tomai
Войти

UUID: v1 против v4 против v7 и когда использовать каждую версию

UUID — это 128-битная метка, записанная как 32 hex-цифры в пяти группах — 8, 4, 4, 4 и 12 символов, — придуманная так, чтобы каждый мог создать ее где угодно, не спрашивая центральный орган. Они идентифицируют строки, файлы, сессии и API-ключи в системах, которые никогда не общаются друг с другом.

1. v1: время плюс машина

Версия 1 встраивает отметку времени и идентификатор узла, обычно выведенный из сетевой карты. Идентификаторы сортируются примерно по времени создания, что очень нравится базам данных, но они раскрывают, когда и где были созданы, — этот privacy-запах оттолкнул большинство новых систем от v1.

2. v4: чистая случайность

Версия 4 заполняет 122 из 128 бит из криптографического случайного источника, а четыре бита фиксированы для обозначения версии. Шансы коллизии абсурдно малы — генерация миллиарда идентификаторов в секунду в течение столетия все равно оставляет шанс хотя бы одного дубликата намного ниже частоты аппаратных сбоев, — но случайность рассеивает индексы баз данных, замедляя вставки в огромных таблицах.

3. v7: современный стандарт

Версия 7 ставит timestamp в миллисекундах первым и заполняет остальное случайно, давая упорядоченные по времени идентификаторы без раскрытия identity машины. Новым проектам, которым нужны сортируемые, дружелюбные к индексам идентификаторы, стоит брать v7; именно ее выдает наш генератор UUID наряду с классической v4.

4. Когда UUID не нужен

Короткие коды для людей, номера счетов и все, что пользователи вводят вручную, лучше обслуживаются счетчиками или компактными кодировками — UUID длинные, непроизносимые и склонные к опечаткам. Никогда не используйте UUID как секрет: они уникальны, но не непредсказуемы, поскольку v1 и v7 содержат timestamps, а v4, хоть и случайна, часто попадает в логи или видна в URL.