Что такое UUID и как они создаются?

Взгляд на универсальные уникальные идентификаторы

Универсальный уникальный идентификатор (UUID) — это 128-битное число, которое идентифицирует информацию в компьютерной системе. Он также известен как глобальный уникальный идентификатор (GUID). Стандартное представление UUID обычно состоит из шестнадцатеричных цифр:

e5d520d8-d06e-4bc2-9bb9-a28e47014884

Всего вы видите 32 символа с четырьмя дефисами между ними. Чтобы соответствовать своему названию, ожидается, что UUID будет уникальным. Обычно это не так — их уникальность зависит от методов или алгоритмов, используемых для их создания. Однако, хотя это возможно, вероятность того, что UUID дублируется, достаточно близка к нулю, чтобы ею можно было пренебречь.

Есть разные способы вычисления UUID. Я объясню, в чем различия, и дам некоторое представление о реализациях.

Версия первая

UUID версии 1 — это универсальный уникальный идентификатор, который создается с использованием MAC-адреса компьютера и времени создания.

Означает ли это, что UUID первой версии уникален? Что ж, они в значительной степени таковы. Для обеспечения уникальности существует ограничение в 163 миллиарда в секунду на компьютере (или узле), но это не то, с чем вы часто сталкиваетесь как разработчик.

Есть и другие проблемы, о которых нужно беспокоиться с этой версией. Почти гарантированная уникальность достигается за счет анонимности. Поскольку эта версия требует времени и уникального MAC-адреса, можно определить адрес и время компьютера.

Версия вторая

Я буду кратко обсуждать версию второй. UUID версии 2 аналогичны идентификаторам UUID версии 1 и не часто реализуются, поскольку RFC 4122 не содержит подробностей. На практике вы вообще не будете их использовать. Их также называют UUID безопасности DCE.

Версия третья

В третьей версии для генерации UUID используются криптографическое хеширование и текстовые строки, предоставляемые приложением. В этой версии используется хеширование MD5. UUID генерируются из имен. Теперь мы можем использовать имя и пространство имен для создания серии UUID. Алгоритм хеширования MD5 — это широко используемая хеш-функция, которая производит 128-битное хеш-значение.

Первоначально MD5 был разработан для использования в качестве криптографической хеш-функции, но теперь, похоже, в нем есть проблемы с уязвимостью. Слишком легко найти два разных сообщения с одним и тем же значением хэша. По этой причине это не та версия, которую вы хотите использовать в своем приложении.

Версия четвертая

Генератор псевдослучайных чисел, также известный как детерминированный генератор случайных битов, представляет собой алгоритм для генерации последовательности чисел, свойства которой аппроксимируют свойства последовательностей случайных чисел. — Википедия

Эта версия использует генератор псевдослучайных чисел для генерации UUID. Очень просто использовать. Каждый бит строки генерируется полностью «случайным образом». По-прежнему существует вероятность того, что UUID может быть продублирован, но он крошечный из-за большого количества возможных комбинаций. Точное количество возможностей составляет около «м²».

На сегодняшний день четвертая версия имеет реализации на большинстве языков программирования. Очень легко использовать. Приведу пример на Java:

UUID uuid = UUID.randomUUID();

Версия пятая

Единственная разница между версией 3 и версией 5 заключается в том, что используется другой алгоритм хеширования. В пятой версии вместо MD5 используется SHA-1. Хотя это технически более совершенный алгоритм хеширования, он также может иметь те же проблемы, что и версия 3. Не рекомендую его использовать.

Заключение

Большим преимуществом UUID является то, что он практически уникален (в отличие от гарантированного уникального), что вполне приемлемо для повседневного использования.

Вот основные недостатки UUID:

  • Например, вместо использования индекса, который увеличивается каждый раз, когда запись вставляется в базу данных, необходимо сгенерировать UUID. Это может занять больше времени. Он ничего не говорит о порядке создания. Если вам нужен порядок, подумайте о том, чтобы не использовать UUID для сортировки по чему-либо, кроме идентификатора.
  • С ними может быть немного странно работать. UUID ничего не говорит о сущности, которой он принадлежит. Это может затруднить отладку, особенно в тестах.
  • Это довольно длинное значение, которое может снизить производительность. Однако в наши дни пространство дешевле.

Но у него есть и некоторые важные преимущества:

  • Основное преимущество UUID в том, что он уникален. Например, пользователю практически невозможно угадать его как параметр URL (открыто для обсуждения, поскольку это может быть проблемой безопасности). И они уникальны для разных приложений.
  • Это не зависит от окружающей среды. Вы можете создать его где угодно (даже в автономном режиме), и вы не полагаетесь на базу данных для создания идентификатора. Когда у вас есть несколько баз данных, содержащих сегмент (осколок) ваших данных, UUID уникален для всех баз данных, а не только для той, в которой вы сейчас находитесь. Это делает перемещение данных между базами данных намного безопаснее.

Хотя почти каждая версия имеет свои сильные стороны, у них также есть явные недостатки, которые могут навредить вам при разработке приложения.

Четвертая версия полностью случайна и непредсказуема, и это та версия, которую я бы рекомендовал использовать сейчас.

Если вы не хотите конфликтовать в нескольких экземплярах баз данных, не хотите, чтобы идентификаторы были предсказуемыми или предоставляли информацию о системе, рассмотрите возможность использования UUID.

Источник: ledsshop.ru

Стиль жизни - Здоровье!