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.

Следующая новость · 11 из 11 Читать дальше
📈Biz

В США дома платят 17,8 цента за кВт·ч у частных энергокомпаний и 14,5 у государственных

Анализ Kadoa по данным EIA показывает разрыв в 23%. С учётом инфляции цены частных компаний выросли на 7,9% с 2020 года, а у государственных и кооперативов упали на 4,3%.

★ 526 · 💬 384 · kadoa.com · 2 мин