UUID в JVM #
Васильев Андрей Михайлович, 2024
Версии презентации
UUID #
Universally Unique Identifier, универсально уникальный идентификатор, — 128-битная метка
- Если пользоваться установленным правилам создания, то UUID будут уникальны в распределённых системах для решения практических задач
- Уникальность достигается алгоритмом генерации, который не включает общение с центральным брокером
- Широко применяется в современных информационных системах
Существует несколько RFC, фиксирующих правила генерации и обработки этих данных, последний был опубликован в 2024 году
Текстовое представление #
В каноническом представлении UUID изображают в виде числа в шестнадцатеричной системе счисления, разделённого дефисами на пять групп в формате 8-4-4-4-12. Такое представление занимает 36 символов:
123e4567-e89b-12d3-a456-426655440000
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
4 бита M обозначают версию («version») UUID, а 1-3 старших бита N обозначают вариант («variant») UUID
Общее количество уникальных ключей UUID (без учёта версий) составляет
- 2 в 128 степени
- Либо 256 в 16 степени
- Примерно 3.4 на 10 в 38 степени
Это означает, что генерируя 1 триллион ключей каждую наносекунду, перебрать все возможные значения удастся лишь за 10 миллиардов лет
java.util.UUID #
Начиная с версии 1.5 Java предоставляется класс java.util.UUID
Для создания объекта UUID можно воспользоваться:
- Конструктором, который ожидает два базовых числа, использующиеся при формировании UUID
- Статической функцией
randomUUID()
для получения случайного значения, что соответствует 4-й версии UUID - Статической фукнцией
nameUUIDFromBytes()
для получения 3-й версии UUID из набора байт - Статической функцией
fromString()
для получения UUID из строкового представления. В случае проблемы с форматом будет выброшено исключениеIllegalArgumentException
Объекты класса являются неизменяемыми
Для преобразования к строковому представлению можно воспользоваться стандартной
функцией toString()