Comments 8
ГПТ, ГПТ, я не твой... Отпусти меня, ГПТ...
Наверное, те, кто читал RFC 9562, и без того знают обо всем, что написано в этой статье. А кто не читал, ничего не поймут...
Ошибаетесь. RFC 9562 настолько объемный, сложный и запутанный, что все (включая разработчиков функций, реализующих UUIDv7) читают его "по диагонали", упуская важные детали.
Практически все отзывы в интернете о UUIDv7 звучат примерно так: "UUIDv7 раскрывает дату создания записи, поэтому в приложениях, где важна криптостойкость, следует использовать bigint". То есть, никто даже не подозревает, что таймстемп можно искажать, и это разрешено RFC 9562. И в 99% функций, реализующих UUIDv7, таймстемп невозможно исказить, так как разработчики об этом не позаботились.
В RFC 9562 нет совершенно ничего об автоматическом расчете смещения значения таймстемпа. Об этом Вы больше нигде не прочитаете в интернете.
Если кто-то не читал RFC 9562 (таких 99% людей) и ничего не понял в этой статье (таких гораздо меньше), то советую им пройти по ссылкам и узнать для себя кое-что новое и интересное.
Не могу гарантировать, что писал не человек, но формат мне подходит. Лишней воды в стиле "я Петя из компании Рога и Копыта, родился и вырос...." нет и очень хорошо. Так что спасибо за ознакомление с интересной темой.
На самом деле, статья, действительно, полезная. Даже если бы её написал ChatGPT - лично мне этот факт о смещении очень пригодился и достаточно кратко объяснено. Недавно решил использовать UUIDv7 в базе и тоже немного напрягла сквозная отметка времени. Теперь буду знать что это может быть не так опасно.
В Percona Server for MySQL тоже используется сдвиг значения таймстемпа (в миллисекундах, положительный или отрицательный), чтобы скрыть время создания записи.
"UUID_V7() generates a UUID of version seven (timestamp-based). The function takes no arguments or one integer argument. The argument is a number of milliseconds to shift the timestamp of UUID forth or back if the argument is negative. If there is no argument, timestamp shift is not performed. Timestamp shift may be used to hide the actual time of the record creation."
Я тоже начинал со сдвига в миллисекундах, пока не обнаружил в PostgreSQL более удобный тип данных interval
Смещение значения таймстемпа UUIDv7