UUIDv7 гарантирует только уникальность, а Python может обогнать ваши часы
В посте показано, как uuid.uuid7() в Python уходит вперёд относительно системных часов после их отката назад, а разрыв растёт без предела при высокой нагрузке.
Alex Scott в посте доказывает, что три свойства, которые людям приписывают в UUIDv7, — монотонный порядок, надёжное время создания и непредсказуемость — RFC 9562 не гарантирует. Даже Postgres предупреждает, что извлечённая временная метка может не совпадать со временем создания.
Комментаторы сказали, что это упускает главную причину им пользоваться: держать новые строки вместе в индексе.
Три свойства, которые спецификация не обещает
Пост утверждает, что единственное твёрдое свойство UUIDv7 — уникальность. Временные метки могут не совпадать со временем создания, потому что RFC 9562 позволяет реализациям их менять. Монотонность не гарантирована даже на одном узле, если реализация использует миллисекундную точность, а перезапуск процессов после отката часов назад может выдать ID в неправильном порядке. Временные метки ещё и утекают: ID в URL может выдать точное время создания. Автор не призывает отказаться от UUIDv7, а только проверить, что гарантирует конкретная реализация.
«Ради этого им вообще не пользуются»
Разработчик из Эйндховена написал, что статья «сильно недооценивает всю суть UUIDv7»: их ценность в том, что данные сортируются и хранятся примерно по времени создания, что нужно для курсоров, потоков и сообщений в чатах. Другой комментатор сказал, что смысл в кластеризации записи: сужении диапазона, в котором в данный момент может оказаться ID, и для этого нужен порядок, который «достаточно хорош».
Комментатор, который читал исходники CPython, добавил, что дрейф в Python намеренный: код принудительно сдвигает временную метку вперёд, чтобы сохранить порядок, а это то, что нужно, если вам действительно нужны монотонные ID. Для читателя, который выбирает между v4 и v7, практический тест такой: зависит ли ваша система от временной метки внутри ID для корректности. Если да, то спецификация вас не поддержит.
Получайте такие разборы каждый день
Главные истории Hacker News — на email, в Telegram или RSS.
В США дома платят 17,8 цента за кВт·ч у частных энергокомпаний и 14,5 у государственных
Анализ Kadoa по данным EIA показывает разрыв в 23%. С учётом инфляции цены частных компаний выросли на 7,9% с 2020 года, а у государственных и кооперативов упали на 4,3%.