Что такое UUID

UUID (Universally Unique Identifier, также называемый GUID) — это 128-битное значение, используемое для пометки чего-либо, строки, запроса, файла, без согласования с кем-либо ещё. Обещание в названии в том, что два независимо сгенерированных UUID, для всех практических целей, никогда не совпадают. Это позволяет отдельным сервисам, офлайн-устройствам и параллельным процессам чеканить идентификаторы, которые не столкнутся при последующем слиянии данных, без центрального распределителя, раздающего номера.

UUID записывается как 32 шестнадцатеричные цифры в пяти группах, разделённых дефисами: 8-4-4-4-12, например 550e8400-e29b-41d4-a716-446655440000. Две конкретные позиции не случайны: ниббл версии определяет, как был сгенерирован UUID, а поле варианта отмечает стандарт компоновки (современный — RFC 4122 / RFC 9562).

Версия 4: случайная

Безусловно самая распространённая форма, версия 4, почти полностью случайна: 122 из 128 бит берутся из надёжного источника случайности, а оставшиеся биты фиксированы для обозначения версии и варианта. При такой энтропии вероятность столкновения двух v4-UUID пренебрежимо мала для любого реалистичного объёма идентификаторов.

Её слабость — не уникальность, а упорядоченность. Поскольку значения v4 случайны, последовательные вставки разбросаны по всему пространству ключей. Когда v4-UUID используется как первичный ключ базы данных, эта случайность борется с индексом B-дерева: новые строки попадают в произвольные места, ухудшая локальность кеша и фрагментируя индекс со временем.

Версия 7: упорядоченная по времени

Версия 7, стандартизированная в RFC 9562 (2024), была спроектирована, чтобы исправить именно это. Она помещает 48-битную метку времени Unix в миллисекундах в наиболее значимые биты, за которыми следуют случайные биты для уникальности в пределах одной миллисекунды. Поскольку метка времени идёт впереди, v7-UUID сортируются в порядке создания при сравнении как текст или байты.

Это единственное свойство делает v7 куда лучшим первичным ключом: новые строки добавляются ближе к концу индекса, а не разбрасываются, восстанавливая локальность, которой обладают последовательные целочисленные ключи, при сохранении децентрализованной уникальности UUID. Значение v7 также несёт собственное время создания, которое можно прочитать прямо из этих ведущих битов, инструмент UUID делает это, когда вы его осматриваете.

Другие версии, кратко

Для полноты: версия 1 сочетает метку времени с MAC-адресом генерирующей машины, что раскрывает аппаратную идентичность и время создания и потому вызывает опасения о приватности. Версии 3 и 5 основаны на имени, они хешируют пространство имён плюс имя (с и -1 соответственно), чтобы получить детерминированный UUID, полезный, когда один и тот же вход всегда должен отображаться в один и тот же идентификатор. Версия 6 переупорядочивает поля версии 1, чтобы они были сортируемыми, но для новых систем v7 — рекомендуемый выбор, упорядоченный по времени.

Выбор

Берите v4, когда вам нужен просто случайный непрозрачный идентификатор и упорядоченность не важна. Берите v7, когда UUID будет ключом базы данных или чем-то ещё, что выигрывает от сортировки по времени создания, что всё чаще является рекомендацией по умолчанию. Инструмент UUID генерирует оба и декодирует версию, вариант и встроенную метку времени любого UUID, который вы вставите, целиком в вашем браузере.