Функция генерации идентификаторов формата UUIDv7 уже закоммичена в PostgreSQL

Функция uuidv7() генерации идентификаторов формата UUIDv7 (метод 3) в соответствии с RFC 9562 уже закоммичена и теперь гарантированно попадет в 18 версию PostgreSQL, выход которой ожидается в сентябре 2025 года. До этого можно пользоваться каким-нибудь из имеющихся расширений PostgreSQL.

Реализация имеет три особенности:

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

  2. При параллельной генерации идентификаторов в нескольких процессах обеспечивается возрастание генерируемых идентификаторов, так как точность таймстемпа улучшена до приблизительно 250 наносекунд благодаря 12-битному субмиллисекундному сегменту.

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

Подробнее о UUIDv7

@SergeyProkhorenko
27.12.2024 19:23 UTC
Первоисточник

Комментарии

@
27.12.2024 17:23 UTC
0
НЛО прилетело и опубликовало эту надпись здесь
@Sabirman
28.12.2024 06:24 UTC
+2
  1. Ускоряется вставка строк за счет того что записи первичного ключа попадают на одну и ту же страницу

  2. Можно внедрять секционирование по дате без переписывания кода. До этого приходилось во все запросы дату записи прокидывать, в т.ч. веб-клиент должен был вместе с идентификатором класть и дату объекта.

Если вы спросили про достоинства по сравнению с целочисленным первичным ключом, то оно заключается в том, что uuid-ы (в т.ч. uuid7) можно генерировать в бизнес-логике, а не ждать его из базы данных.

28.12.2024 06:54 UTC
0
НЛО прилетело и опубликовало эту надпись здесь
28.12.2024 07:57 UTC
+1

Можно, но дату в таймстемпе идентификатора смогут намеренно искажать. Вместе с функцией uuidv7() в 18 версию PostgreSQL закоммичена функция uuid_extract_timestamp()