Как стать автором
Обновить

UUIDv7

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров15K
UUIDv7 обеспечивает запредельную скорость работы баз данных
UUIDv7 обеспечивает запредельную скорость работы баз данных

Седьмая версия UUID (Universally Unique Identifier Version 7, UUID Version 7, UUIDv7) является модифицированной и стандартизованной версией ULID. Долгожданный стандарт RFC9562 "Universally Unique IDentifiers (UUID)" опубликован. И уже есть большое количество реализаций UUIDv7, применяемых в действующих информационных системах. В интернете доступно большое количество информации по ключевому слову UUIDv7.

Целями разработки UUIDv7 были устранение существенных недостатков UUID и стандартизация (отсутствующая у ULID) – для широкого использования UUIDv7 «по умолчанию» вместо других составных идентификаторов и автоинкремента (целых чисел) в качестве суррогатных ключей в базах данных и в качестве ключей в распределенных информационных системах (а также в других указанных в стандарте целях).

В крайнем левом сегменте UUIDv7 находится метка времени эпохи Unix в миллисекундах (timestamp), благодаря чему генерируемые UUIDv7 как правило возрастают по моменту времени генерации (это так называемая монотонность) и поэтому гораздо быстрее находятся в базах данных. В продвинутых реализациях между меткой времени и псевдослучайным сегментом есть инициализируемый псевдослучайным числом счетчик (Fixed-Length Dedicated Counter), что обеспечивает возрастание генерируемых UUIDv7 при неизменной метке времени внутри миллисекундного интервала.

Стандарт содержит требования безопасности:

  • для сокрытия даты создания записей разрешает сдвиг метки времени относительно реальной даты и времени на любую величину (но не допускает заполнения метки времени данными, не зависящими от текущего времени, чтобы обеспечить монотонность и защиту от коллизий - совпадений)

  • запрещает парсинг UUIDv7 без крайней необходимости, в том числе, для извлечения и использования метки времени

  • требует реализовать защиту от перевода системных часов назад или временной потери доступа к источнику времени

  • описывает способы защиты от переполнения счетчика

  • для защиты от атак перебором идентификатора требует заполнить крайний правый сегмент UUIDv7 псевдослучайными данными, сгенерированными специально для каждого UUIDv7

  • требует реализовать защиту от отсутствия доступа к генератору истинно случайных чисел, которые нужны как «соль» для инициализации псевдослучайных данных

Стандарт намеренно оставляет некоторые важные вопросы на усмотрение разработчиков реализации. Поэтому реализации UUIDv7 существенно отличаются друг от друга структурой UUIDv7, источниками времени и энтропии, алгоритмами, надежностью, монотонностью и производительностью.

Стандарт разрешает использовать UUIDv7 в качестве левой части идентификатора, используемого в качестве ключа. При этом правая часть этого идентификатора может быть заполнена любыми метаданными и контрольной суммой.

Слева от метки времени UUIDv7 не могут быть помещены никакие части идентификатора-ключа, но при необходимости разнести UUIDv7 подальше в таблице можно воспользоваться разрешенным сдвигом метки времени относительно реальной даты и времени.

Стандарт разрешает использовать UUIDv7 вместе с другими идентификаторами. Например, в записи может храниться UUIDv7, сгенерированный базой данных, а также, для обеспечения целостности и обратной связи, ключ из системы-источника, который тоже может быть UUIDv7.

Стандарт содержит приоритеты использования UUIDv7 и других версий UUID. В большинстве случаев рекомендована седьмая версия, а в редких случаях, когда монотонность UUID не важна, рекомендована четвертая версия.

Теги:
Хабы:
Всего голосов 16: ↑13 и ↓3+13
Комментарии37

Публикации

Истории

Работа

Data Scientist
85 вакансий

Ближайшие события

19 сентября
CDI Conf 2024
Москва
24 сентября
Конференция Fin.Bot 2024
МоскваОнлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн