UUID v1 против v4 против v5: Какую версию выбрать?
Быстрый ответ
Используйте UUID v4 (random) по умолчанию —не требует координации и имеет незначительный риск коллизии. Используйте v1 (time-based) только когда нужны time-orderable ID. Используйте v5 (namespace+name) для детерминированных ID. Генерируйте любой нашим бесплатным UUID Generator.
Введение
UUID (Universally Unique Identifier) — 128-bit идентификатор, представленный как 36 символов в 8-4-4-4-12 hex-группах, напр. 123e4567-e89b-12d3-a456-426614174000. RFC 9562 определяет несколько версий; три наиболее распространённые — v1 (time + MAC), v4 (random) и v5 (namespace + name, SHA-1). Каждая делает разные trade-off между гарантиями уникальности, сортируемостью и детерминизмом.
Шаг за шагом
-
UUID v1 — на основе времени и узла
v1 кодирует текущую 60-битную метку времени (интервалы 100 нс с 15.10.1582) и 48-битный идентификатор узла (обычно MAC-адрес). Идентификаторы, генерируемые на одном узле, монотонно увеличиваются и сортируются по времени. Риск: MAC-адрес приводит к утечке аппаратных данных, а смещение тактовой частоты между узлами может нарушить порядок.
-
UUID v4 —случайно
v4 использует 122 случайных бита (6 бит фиксированы для версии/варианта). При 122 случайных битах вероятность конфликта среди 2,71 триллиона идентификаторов составляет 50 % — для любой реальной рабочей нагрузки вероятность фактически равна нулю. Версия 4 не требует координации и не раскрывает информацию о хосте, что делает ее самым безопасным вариантом по умолчанию.
-
UUID v5 — пространство имен и имя (SHA-1)
v5 хэширует пространство имен UUID и строку имени с помощью SHA-1 для создания детерминированного 128-битного идентификатора. Одна и та же пара (пространство имен, имя) всегда дает один и тот же UUID, что идеально подходит для дедупликации и стабильных идентификаторов, полученных из натуральных ключей. v3 — та же идея, но использует MD5 (избегайте этого).
-
Сравните компромиссы
Версия v1 поддается сортировке, но пропускает MAC и требует синхронизации часов. v4 является случайным и частным, но не поддается сортировке. Версия 5 является детерминированной и выполняет дедупликацию, но не является случайной — угадывание имени позволяет злоумышленнику воспроизвести UUID. Выбирайте, исходя из того, нужен ли вам порядок, случайность или детерминизм.
-
Выберите подходящую версию для вашего случая
Первичные ключи базы данных: v4 (или v7 в более новых системах для упорядочивания по времени). Распределенные системы без координации: v4. Детерминированные идентификаторы из естественного ключа (например, URL →UUID): v5. Журналы аудита, которые выигрывают от временного порядка: v1 с защищенным случайным идентификатором узла.
Примеры
UUID v1 (по времени, с возможностью сортировки)
Вход: Сгенерировано в 2026-08-28T12:00:00Z на узле 00:11:22:33:44:55.
Выход: 1ef7c1d0-2d3b-11f0-8000-001122334455 (цифра версии '1', с возможностью сортировки по времени)
UUID v4 (случайно)
Вход: Random generation
Выход: f47ac10b-58cc-4372-a567-0e02b2c3d479 (цифра версии «4», случайные биты)
UUID v5 (детерминировано из пространства имен+имя)
Вход: Пространство имен DNS (6ba7b810-9dad-11d1-80b4-00c04fd430c8) + имя «freeonlinetoolsgo.com»
Выход: 74738ff5-5367-5958-9aeb-0c1f1f1f1f1f (один и тот же ввод всегда дает одинаковый вывод)
Распространенные проблемы
- Хранение UUID как VARCHAR(36) вместо собственного 16-байтового типа BINARY/UUID: это приводит к удвоенной трате памяти и снижению производительности индекса. Используйте собственный тип столбца UUID, если он доступен.
- Использование версии 1 без защиты идентификатора узла: MAC-адрес по умолчанию нарушает идентификацию оборудования и является проблемой конфиденциальности. Замените его криптографически случайным 48-битным значением на узел.
- Если предположить, что столкновения v4 невозможны: это не так — они просто астрономически маловероятны. При 122 случайных битах вам понадобится около 2,71 триллиона идентификаторов для вероятности 50%. Для 1 миллиарда идентификаторов вероятность составляет ~ 0,0000000000000001.
- Использование версии 3 (на основе MD5) вместо версии 5 (на основе SHA-1): MD5 не работает, поэтому предпочтительна версия 5. Оба являются детерминированными, но v5 имеет более высокую устойчивость к коллизиям.
Советы
- По умолчанию используется версия 4 почти для каждого варианта использования — она случайная, конфиденциальная и защищена от коллизий без какой-либо координации.
- Если вам нужны случайные идентификаторы с сортировкой по времени, обратите внимание на UUID v7 (RFC 9562, 2024), который сочетает в себе временную метку Unix со случайными битами — лучше, чем v1 для современных баз данных.
- Используйте версию 5 для генерации стабильных идентификаторов из естественных ключей (URLs, адресов электронной почты), чтобы одни и те же входные данные всегда сопоставлялись с одним и тем же UUID — это полезно для дедупликации и идемпотентного APIs.
- По возможности сгенерируйте UUID на клиенте, чтобы избежать обратного пути к серверу — наш генератор UUID полностью запускается в вашем браузере с помощью crypto.getRandomValues().