Что такое UUID v7?

UUID v7 — это новейшая версия универсальных уникальных идентификаторов, определённая в RFC 9562. В отличие от более старых версий, таких как UUID v4 (полностью случайный) или UUID v1 (использует MAC-адрес), UUID v7 встраивает 48-битную временну́ю метку Unix Epoch в миллисекундах непосредственно в идентификатор. Это делает значения UUID v7 естественно сортируемыми по времени создания — значительное преимущество для индексирования баз данных, распределённых систем и журналирования событий, где важен хронологический порядок.

Поскольку UUID v7 не использует MAC-адреса, он лишён проблем с конфиденциальностью, характерных для UUID v1. Оставшиеся биты после временно́й метки и полей версии/варианта заполняются случайными или монотонными данными, обеспечивая уникальность даже при генерации нескольких UUID в пределах одной миллисекунды.

Структура UUID v7

UUID v7 состоит из 128 бит, организованных следующим образом:

  • Биты 0–47: 48-битная беззнаковая временна́я метка Unix Epoch в миллисекундах в формате big-endian
  • Биты 48–51: 4-битное поле версии, установленное в 0111 (7)
  • Биты 52–63: 12 бит случайных или монотонных данных для субмиллисекундной точности или уникальности
  • Биты 64–65: 2-битное поле варианта, установленное в 10 (RFC 9562)
  • Биты 66–127: 62 бита случайных или монотонных данных для дополнительной уникальности

Такая структура означает, что UUID, сгенерированные позже по времени, всегда будут сортироваться после более ранних на уровне миллисекунд, что делает их идеальными в качестве первичных ключей в базах данных с B-tree индексами.

Описание инструмента

Этот генератор UUID v7 создаёт UUID версии 7, соответствующие RFC 9562, с визуальной разбивкой встроенной временно́й метки. Генерируйте от одного до 100 UUID за раз, переключайтесь между форматированием в верхнем и нижнем регистре, а также выбирайте, включать ли дефисы. Инструмент также извлекает и отображает встроенную временну́ю метку Unix Epoch из первого сгенерированного UUID, позволяя проверить время создания, закодированное в каждом идентификаторе.

Примеры

Формат Пример вывода
Стандартный 019544a2-3b4c-7d8e-9f01-2a3b4c5d6e7f
Верхний регистр 019544A2-3B4C-7D8E-9F01-2A3B4C5D6E7F
Без дефисов 019544a23b4c7d8e9f012a3b4c5d6e7f

Возможности

  • Массовая генерация: генерация от 1 до 100 значений UUID v7 за раз с помощью ползунка количества
  • Переключение регистра: переключение между выводом в нижнем и верхнем регистре
  • Переключение дефисов: включение или удаление дефисов для компактных форматов
  • Извлечение временно́й метки: автоматически отображает встроенную временну́ю метку Unix Epoch из сгенерированного UUID
  • Поддержка загрузки: экспорт сгенерированных UUID в текстовый файл для пакетного использования

Варианты использования

  • Генерация сортируемых по времени первичных ключей для крупных баз данных, где важны производительность вставки и локальность данных
  • Создание монотонно возрастающих идентификаторов для распределённых систем потоковой передачи событий, таких как Kafka или Pulsar
  • Замена UUID v4 в приложениях, которым необходима хронологическая сортировка без отдельного столбца с временно́й меткой

UUID v7 в сравнении с другими версиями

Версия На основе времени Сортируемый Безопасность конфиденциальности Случайность
v1 Да Нет Нет (использует MAC) Низкая
v4 Нет Нет Да Высокая
v6 Да Да Нет (использует MAC) Низкая
v7 Да Да Да Средняя

UUID v7 сочетает в себе лучшие качества: сортируемость на основе времени без раскрытия аппаратных идентификаторов, с достаточной долей случайности для предотвращения коллизий в распределённых узлах.

Описание параметров

  • Количество (1–100): сколько значений UUID v7 генерировать за один раз. Все UUID в пакете имеют приблизительно одинаковую временну́ю метку, но отличаются случайными битами.
  • Верхний регистр: при включении выводит UUID с символами шестнадцатеричного кода в верхнем регистре (A–F вместо a–f).
  • Дефисы: при включении (по умолчанию) UUID включают стандартную группировку с дефисами 8-4-4-4-12. Отключите для получения компактной 32-символьной шестнадцатеричной строки.

Часто задаваемые вопросы

Могут ли UUID v7 совпадать? Коллизии крайне маловероятны. Даже в пределах одной миллисекунды 74 бита случайных/монотонных данных обеспечивают более 18 квинтиллионов возможных комбинаций. Библиотека uuid также использует монотонные счётчики для гарантии уникальности в рамках одного процесса.

Совместим ли UUID v7 с UUID v4? Да. UUID v7 использует тот же 128-битный формат 8-4-4-4-12 и является допустимым везде, где принимаются UUID. Существующие столбцы UUID, парсеры и валидаторы работают без изменений.

Когда следует использовать UUID v7 вместо UUID v4? Используйте UUID v7, когда ваш сценарий использования выигрывает от ключей, упорядоченных по времени, — например, в качестве первичных ключей базы данных, где производительность B-tree индекса улучшается при последовательных вставках. Используйте UUID v4, когда порядок не важен и вам нужна максимальная случайность.