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()