Что такое UUID и чем отличаются версии v1, v4, v7
Что такое UUID и чем отличаются версии v1, v4, v7
ДБ
Дмитрий Борисенко
550e8400-e29b-41d4-a716-446655440000 — если вы работали с базами данных, API
или конфигурацией устройств, такая строка наверняка попадалась на глаза. Это
UUID: идентификатор, который можно сгенерировать где угодно — хоть в браузере,
хоть на сервере без интернета — и почти наверняка не встретить такой же второй
раз. Разберём, как он устроен и какая версия для чего нужна.
UUID и GUID — одно и то же
UUID (Universally Unique Identifier) и GUID (Globally Unique Identifier)
обозначают один и тот же формат — 128-битное число, обычно записанное как 32
шестнадцатеричных цифры через дефисы: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.
GUID — это просто более старое название, которое использует Microsoft в своих
технологиях (реестр Windows, .NET, COM-объекты); везде за пределами экосистемы
Microsoft прижилось UUID. Формат идентичный,
генератор UUID одинаково подходит для обеих задач.
Почему UUID почти никогда не повторяется
Дело в размере пространства значений: 128 бит — это 2¹²⁸ возможных комбинаций, астрономическое число. У случайного UUID (версия 4) вероятность столкнуться с уже существующим значением настолько мала, что на практике ей пренебрегают — сравнимо с тем, чтобы дважды подряд угадать один и тот же атом во вселенной. Именно поэтому UUID можно генерировать независимо на разных серверах, в разных базах данных, даже офлайн — без центрального реестра, который бы это отслеживал, как в случае с автоинкрементным ID.
Версии UUID: чем v1, v4 и v7 отличаются
Цифра версии зашита прямо в самом UUID (третья группа символов), и версии не взаимозаменяемы — они по-разному устроены внутри.
- v4 — случайный. Все значащие биты, кроме служебных, заполняются случайными числами. Никакой связи с временем создания или устройством — просто уникальное значение. Самый распространённый вариант по умолчанию, если нет причины выбрать другой.
- v7 — временная метка + случайность. Стандартизирован в 2024 году и быстро набирает популярность: начинается с Unix-времени создания в миллисекундах, а дальше — случайные биты. Из-за этого UUID v7, сгенерированные один за другим, сортируются в том же порядке, в котором были созданы — это удобно для первичного ключа в базе данных: новые записи физически ложатся в конец индекса, а не в случайное место, как с v4.
- v1 — временная метка + идентификатор узла. Старый стандарт: тоже содержит время создания, но вместо случайных битов — идентификатор устройства (изначально это был MAC-адрес сетевой карты). Из-за этой утечки информации об источнике v1 сейчас используют редко — v7 даёт похожую сортируемость без этого недостатка.
- NIL UUID — особый случай, 32 нуля подряд
(
00000000-0000-0000-0000-000000000000). Не идентифицирует ничего — это условная «пустая» заглушка, когда поле обязано быть UUID, а значения ещё нет.
Какую версию выбрать для базы данных
Если UUID — первичный ключ таблицы, вариант по умолчанию v4 создаёт проблему:
случайные значения ложатся в случайные места B-tree-индекса, и это медленнее
последовательной вставки. Version 7 решает именно это — записи растут по
времени, как автоинкремент, но остаются такими же непредсказуемыми и безопасными
для публичных API, где нежелательно, чтобы ID выдавал количество записей в
системе (id=42 очевидно говорит, что записей было мало).
Сгенерировать можно сразу пачку в нужном формате — с
дефисами, без них, в верхнем регистре или в фигурных скобках, как ожидает
конкретная система.
Генератор UUID
Создавайте уникальные идентификаторы UUID — v4, v7 или v1
Попробовать
Коротко
- UUID и GUID — одно и то же, 128-битный уникальный идентификатор; GUID — просто более старое название из мира Microsoft.
- Столкнуться с повторным случайным UUID практически невозможно — пространство значений слишком велико.
- v4 — случайный и универсальный по умолчанию, v7 — с сортируемой временной меткой (лучше для первичных ключей БД), v1 — устаревший вариант с утечкой идентификатора устройства.

