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 уникальными. Единственный риск — баг в генераторе случайных чисел, поэтому используйте проверенные библиотеки.