UUID и GUID: что это такое и как использовать

Гайд по UUID для разработчиков: версии v1 и v4, форматы, применение в базах данных и API.

UUID (Universally Unique Identifier) — это 128-битный идентификатор, который с практически нулевой вероятностью повторится. Разберемся, как они устроены и когда стоит использовать UUID вместо обычных числовых ID.

UUID vs GUID: в чем разница

Никакой разницы нет. GUID (Globally Unique Identifier) — это термин Microsoft для того же самого стандарта. UUID — официальное название по RFC 4122. Формат идентичен: 32 шестнадцатеричных цифры, разделенных дефисами.

Пример UUID: 550e8400-e29b-41d4-a716-446655440000

Версии UUID

UUID v1 (timestamp) — генерируется на основе текущего времени и MAC-адреса устройства. Идентификаторы получаются уникальными и хронологически упорядоченными. Минус: можно извлечь время создания и частично идентифицировать устройство.

UUID v4 (random) — полностью случайный. Используется криптографический генератор случайных чисел. Самый популярный вариант, рекомендуется для большинства задач.

Существуют также v3 и v5 (на основе namespace и имени с хешированием), но они используются реже.

Когда использовать UUID

Распределенные системы. Когда несколько серверов или сервисов создают записи независимо друг от друга. UUID можно генерировать локально без обращения к центральной базе данных.

Публичные API. UUID в URL безопаснее числовых ID. Нельзя угадать следующий идентификатор или перебрать все записи последовательно.

Мерж данных. При объединении баз данных из разных источников UUID гарантированно не пересекутся, в отличие от auto-increment ID.

Офлайн-приложения. Клиент может создавать записи без подключения к серверу. UUID можно сгенерировать локально и синхронизировать позже.

Когда НЕ использовать UUID

Первичные ключи в больших таблицах. UUID занимает 16 байт против 4-8 байт для integer. На миллионах записей это существенно влияет на размер индексов и скорость запросов.

Внутренние системы. Если данные не выходят за пределы одной базы, обычный auto-increment проще и эффективнее.

Человекочитаемые идентификаторы. UUID сложно запомнить или продиктовать. Для заказов или тикетов лучше использовать короткие коды.

Форматы UUID

Стандартный формат с дефисами: 550e8400-e29b-41d4-a716-446655440000

Можно также представить UUID в других форматах: без дефисов, в фигурных скобках (Microsoft), в верхнем регистре или в Base64 для компактности.

UUID в разных языках

JavaScript: crypto.randomUUID() в современных браузерах и Node.js

Python: import uuid; uuid.uuid4()

Java: UUID.randomUUID()

PostgreSQL: gen_random_uuid() или расширение uuid-ossp

Коллизии: стоит ли бояться

Вероятность коллизии UUID v4 ничтожно мала. Чтобы с вероятностью 50% получить два одинаковых UUID, нужно сгенерировать около 2.71 квинтиллиона идентификаторов. Это больше, чем песчинок на Земле.

На практике можно считать UUID уникальными. Единственный риск — баг в генераторе случайных чисел, поэтому используйте проверенные библиотеки.

Совет: Используйте наш генератор UUID для быстрого создания идентификаторов при разработке и тестировании. Поддерживаются версии v1 и v4, разные форматы и массовая генерация.