Для backend и API
UUID и ULID удобно использовать для request ID, user ID, order ID, correlation ID, mock data и технических сущностей.
Создавай UUID v4, UUID v7, ULID и Nano ID для API, баз данных, тестов,
моков, логов и backend-задач. Генерация идёт локально в браузере через
crypto.getRandomValues. Сервер не видит идентификаторы, а значит хотя бы здесь мир не сломан.
UUID и ULID удобно использовать для request ID, user ID, order ID, correlation ID, mock data и технических сущностей.
UUID v7 и ULID лучше подходят там, где важна сортировка по времени. UUID v4 остаётся хорошим случайным вариантом.
Все ID создаются прямо в браузере и не отправляются на сервер. Даже у случайных строк есть право не быть слитыми.
Все четыре формата решают одну задачу — дать записи уникальный номер, который можно сгенерировать где угодно, не спрашивая разрешения у базы. Разница в том, как они устроены внутри и что с ними происходит при росте нагрузки.
| Формат | Длина | Сортируется по времени | Когда брать |
|---|---|---|---|
| UUID v4 | 36 символов | нет | универсальный выбор, когда порядок не важен |
| UUID v7 | 36 символов | да | первичные ключи в базе, события, логи |
| ULID | 26 символов | да | то же, что v7, но компактнее и без дефисов |
| Nano ID | 21 символ | нет | короткие ссылки, публичные идентификаторы |
UUID v4 состоит из случайных чисел, и это его главный недостаток внутри базы данных. Новые записи попадают в случайные места индекса, страницы индекса приходится постоянно перестраивать, и на больших таблицах вставка заметно замедляется.
UUID v7 начинается с метки времени. Идентификаторы, созданные подряд, оказываются рядом и в индексе: вставка идёт в конец, как у обычного автоинкремента, но при этом ключ по-прежнему можно сгенерировать на клиенте. Плюс бесплатный бонус — записи сортируются по времени создания без отдельного поля.
Подробный разбор с замерами — в статье UUIDv7 против UUIDv4 в качестве ключей базы.
Стандартный вид — xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx: 32 шестнадцатеричных знака
и четыре дефиса. Позиция M хранит номер версии, N — вариант стандарта.
Именно поэтому у случайного UUID v4 четырнадцатая позиция всегда равна четвёрке: это не совпадение,
а зашитый в формат признак.
UUID v4 содержит 122 случайных бита. Вероятность совпадения настолько мала, что на практике ею пренебрегают: чтобы шанс коллизии дошёл до одного процента, нужно сгенерировать порядка трёх квинтиллионов значений. Nano ID из 21 символа при генерации тысячи идентификаторов в секунду достигнет сопоставимого риска примерно за сто тысяч лет.
Важнее другое: уникальность обеспечивает качественный источник случайности.
Этот генератор использует криптографический генератор браузера, а не обычный Math.random().
Идентификаторы генерируются в браузере и никуда не отправляются: сервер не знает, что вы создали. Для ключей, которые уйдут в продакшен, это принципиально.
UUID — универсальный уникальный идентификатор. Его часто используют в backend, базах данных, API и логах.
UUID v4 случайный. UUID v7 содержит timestamp, поэтому лучше сортируется по времени создания.
ULID — сортируемый уникальный идентификатор из timestamp и случайной части. Он компактный и хорошо подходит для URL.
Нет. Генерация выполняется локально в браузере через криптографический генератор случайных чисел.
v4 состоит из случайных чисел, а v7 начинается с метки времени. Поэтому идентификаторы v7 сортируются по времени создания и ложатся в конец индекса базы, не заставляя её перестраивать страницы при каждой вставке.
Для ключей в базе — UUID v7 или ULID, они сортируются по времени. Для публичных коротких ссылок — Nano ID: он вдвое короче. UUID v4 остаётся универсальным вариантом, когда порядок не важен.
Практически нет. В UUID v4 122 случайных бита: чтобы вероятность совпадения дошла до одного процента, нужно сгенерировать порядка трёх квинтиллионов значений.