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.