Смещение значения таймстемпа UUIDv7

от автора

UUIDv7 – это удобный и безопасный 128-битный уникальный идентификатор, который призван заменить целочисленные суррогатные ключи формата bigint в качестве первичного ключа в высоконагруженных базах данных и распределенных системах.

UUIDv7 содержит таймстемп, обеспечивающий быструю вставку в таблицу БД новых записей, индексируемых по этому идентификатору. Благодаря таймстемпу производительность БД с идентификаторами UUIDv7 такая же, как с идентификаторами формата bigint. Кроме того, таймстемп может быть использован в качестве ключа разбиения при секционировании (partitioning) по интервалам, а также может помочь в выявлении причин ошибок.

Однако таймстемп раскрывает дату и время создания записи, что может нарушать требования информационной безопасности. К счастью, RFC 9562 разрешает смещение таймстемпа (timestamp offset), что позволяет искажать истинные дату и время создания записи. Кроме того, при использовании смещения таймстемпа значения UUIDv7 могут быть достаточно равномерно распределены, что позволяет использовать их в качестве ключа дистрибуции при сегментировании (sharding).

Разработчики функций для генерации UUIDv7 уже проектируют использование параметра для задания смещения таймстемпа. В частности, в PostgreSQL смещение будет иметь тип interval. Но существует потребность в автоматическом расчете смещения таймстемпа.

С точки зрения информационной безопасности желательно, чтобы смещение таймстемпа было случайным (положительным или отрицательным), достаточно частым (не реже, чем раз в час) и происходило в случайные моменты времени. А для высокой производительности БД важно, чтобы смещение таймстемпа было не слишком частым (чтобы страницы данных в памяти были по возможности заполнены) – не чаще, чем раз в минуту.

Допустимый интервал смещения таймстемпа ограничен лишь тем, что значение самого таймстемпа должно укладываться в его допустимый интервал. В противном случае смещение не должно применяться.

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


ссылка на оригинал статьи https://habr.com/ru/articles/855832/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *