UUID v7, упорядоченный по времени
UUID версии 7: Unix-мс в старших битах, случайность в остальных. Для индексов лучше, чем v4.
В старших битах 48-битный Unix в миллисекундах, дальше случайность. Новые id почти по порядку создания, меньше случайных сплитов B-tree, чем у v4.
Ниббл версии 7. Два id в одну миллисекунду всё равно различаются случайными битами. Это не плотная последовательность без дыр.
Выпустите v4 и v7 рядом и сравните префикс. v7 для новых таблиц, где id ещё и ключ. v4 для публичных токенов, где время создания светить нельзя.
Версия 7 кладёт миллисекунды Unix в начало, поэтому более поздний id в индексе базы идёт после более раннего. Хвост случайный: два id из одной миллисекунды не совпадают. Время не спрятано: его читают из hex без ключа. Если часы прыгнули назад, новый id может встать перед более старой строкой. Страница открывается на версии 7. Случайный v4 нужен, когда порядок не должен выдавать время создания.
Частые вопросы
v7 выдаёт время создания?
Да, timestamp внутри id. Не используйте, если время должно быть скрыто.
Замена v4?
Длина строки та же. Старые v4 можно оставить, новые писать v7, если колонка UUID.
Скачок часов?
Сбитые часы портят порядок вставок. NTP важнее, чем для v4.
