В этой статье
Что такое UUID?
UUID (Universally Unique Identifier) — это 128-битный идентификатор, уникальность которого гарантируется в любом месте и в любое время без необходимости централизованного контроля. UUID записывается как 32 шестнадцатеричных символа в 5 группах, разделённых дефисами: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.
Существует несколько версий UUID, каждая из которых генерируется по-своему. Версия 4 (случайная) используется наиболее широко: она генерирует 122 случайных бита, делая коллизии практически невозможными — чтобы получить 50% шанс столкновения, пришлось бы создавать миллиард UUID в секунду на протяжении 85 лет.
Как работает генерация UUID
UUID v4 использует криптографически стойкую случайную генерацию.
- Случайные биты — 122 случайных бита генерируются с помощью CSPRNG
- Маркировка версии — биты 12–15 третьей группы устанавливаются в 0100 для обозначения версии 4
- Маркировка варианта — биты 6–7 четвёртой группы устанавливаются в 10 для обозначения варианта RFC 4122
Попробуйте бесплатно — без регистрации
Сгенерировать UUID →Когда использовать UUID
UUID — предпочтительный тип идентификатора для распределённых систем и баз данных.
- Первичные ключи баз данных — используйте UUID-ключи в распределённых системах, чтобы избежать конфликтов ID при слиянии данных
- Токены сессий — генерируйте UUID для идентификаторов сессий и временных токенов
- Именование файлов — используйте UUID для создания уникальных имён файлов при загрузке пользователями или генерации ресурсов
Частые вопросы
В чём разница между UUID v1, v3, v4 и v5?
v1 основан на времени и включает MAC address, что делает его отслеживаемым. v3 и v5 детерминированы — они хешируют пространство имён и имя, каждый раз давая один и тот же UUID (v3 использует MD5, v5 — SHA-1). v4 случаен и применяется чаще всего для универсальных уникальных ID. v7 (новый стандарт) сочетает метку времени и случайность для сортируемых UUID.
Что лучше для первичных ключей: UUID или автоинкрементные целые числа?
Автоинкрементные числа проще и экономичнее по хранению. UUID предпочтительнее в распределённых системах, при слиянии данных из нескольких источников, при отображении ID в URL без раскрытия последовательности, а также при генерации ID на стороне клиента до вставки в базу данных. Для одиночных серверов автоинкремент зачастую достаточен.
Насколько UUID действительно уникальны?
UUID v4 имеет 2^122 возможных значений — около 5,3 × 10^36. Вероятность генерации двух одинаковых UUID настолько мала, что для любого практического применения её можно считать нулевой. Парадокс дней рождения означает, что для 50% шанса коллизии потребуется примерно 2,71 квинтиллиона UUID.