UUID в MySQL

Создано Евгений Злобин в февраля 27, 2011
В этой статьей я предлагаю рассмотреть UUID как альтернативу привычному всем нам первичному ключу. Взглянуть на его плюсы и минусы. И понять где его стоит использовать.
UUID расшифровывается как Universal Unique Identifier (Универсальный Уникальный Идентификатор). UUID – это 32 байтная строка, разделенная четырьмя дефисами (всего 36 символов) состоящая из пяти шестнадцатеричных чисел в формате aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee . Если в MySQL мы привыкли для первичного ключа и счётчика использовать поле AutoIncrement типа Int, то для MSSQL UUID – это стандартный счётчик.
Функция UUID() в MySQL возвращает этот самый идентификатор, который генерируется в соотвествии со спецификациями. Эта функция появилась в версии MySQL 4.1.2.

Выполнив запрос:

SELECT UUID();

мы получим что-то на подобии этого: c427934f-2adc-11e0-8aae-cf2343e5b2ce

Первые три числа генерируются на основе временной метки.

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

Пятое число – это номер узла ШЕЕ 802, который представляет пространственную уникальность. Случайное число подставляется в случае, если последнее недоступно (например, если компьютер-хост не имеет сетевой платы Ethernet, или нет возможности извлечь аппаратный адрес интерфейса вашего компьютера). В этом случае пространственная уникальность не может быть гарантирована. Однако, несмотря на это, коллизии крайне маловероятны. В настоящее время МАС-адрес интерфейса принимается во внимание только в средах FreeBSD и Linux. В других операционных системах MySQL использует случайно сгенерированное 48-разрядное число.

UUIDы созданы быть уникальными не только для отдельной таблицы, но и для всех таблиц и баз данных. Если вам требуется поле, которое должно оставаться уникальным для всех систем, то UUIDы подходят лучше всего.
Например, если в CakePHP определите первичный ключ типа CHAR(36) или BINARY(36), то он будет автоматически генерировать UUIDы при добавлении новой записи.

Чем плох UUID:

  1. тем, что он просто длиннее, чем int и, соответственно, медленнее;
  2. тем, что его значения не идут по порядку. и функция «неявного времени» таким образом отсутствует;
  3. тем, что пока не работает с репликацией.

Может быть Вам это интересно?

32 отв. в “UUID в MySQL”

  1. регистрация компании

    Спасибо, что так детально все изложили.
    Очень полезная информация.

  2. Екатерина

    Интересная статья, раньше об этом не знала. Некоторые моменты возьму на заметку.

  3. очень хорошо написана статья, полезная для меня информация

  4. Владимир

    Плохо что есть недоработки(

  5. Скарбнычка

    если бы еще отдельно описали все плюсы, было бы вообще отлично

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

  7. Лучше глянуть на практический аспект, кто-то встречал реальное использование UUID в действующих проектах с использованием MySQL., я лично нет. Будем ждать экспериментаторов и рисковых парней которые задействуют UUID в чем-то масштабном и узнаем насколько такое новшество окажется полезным и самое главное производительным.
    Хорошо что обращаете внимание на такие оригинальные решениея.

  8. Denis_Chuprina

    Скарбнычкамарта 12, 2011
    А плюсы вы сами найдете)

  9. Хорошая статья, из тех которую хочется добавить в закладки. Спасибо за старания, побольше-бы таких блогов!

  10. Спасибо за статью!

  11. Потому и используют для первичного ключа и счётчика поле AutoIncrement, что UUID медленнее. Зачем заморачиваться? Если только для узких целей.

  12. Спасибо за информацию. Буду иметь ввиду :)

  13. Людмила

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

  14. Информация отлично изложена, правда я в этом не особо что понимаю, но все равно спасибо.

  15. Константин

    спасибо за урок,добавлю этот пост в закладки.

  16. Александр

    Интересно интересно много чего не знал

  17. отличный сайт, мне очень понравился, спасибо автору

  18. Не так то все просто. Много непонятных для меня терминов. Зато теперь знаю, что такое UUID и как его используют.

  19. Спасибо за статью, познавательно.

  20. Спасибо интересно!

  21. Все четко и понятно, спасибо

  22. В чем отличие от GUID`a?

  23. помойму минусы все таки перевешивают плюсы, но это мое личное мнение.

  24. Помоему слишком мудрёная функция, мне достаточно умения тупо создать базу с таблицами в mysql и юзера прикрепить.

  25. Все зависит от конкретной таблицы. Если в таблице ограниченное и не большое количество записей то с моей точки зрения абсолютно не важно какой ключ использовать.

  26. Интересно, как это на больших объемах данных будет работать…

  27. You have always been such a creative inspiration to me through your blog.! Thanks for that. Now to implement it.

  28. Что поражает, так это то что все пишут пытаясь надеяться что Злобный им ссылку поставит в коменте:) Наивные. Я вообще по случаю зарулил сюды и просто охуел:( Пишут всякую срань под конкретно довольно путевым материалом. Обидно…

  29. UUIDы чем-нибудь отличаются от обычных ID?

  30. Хоть и сложновато для меня,но разобрался,осилил материал.Постепенно повышаю свои знания.

  31. да отличия есть, но подробнее об этом вам расскажет гугл… а по теме: полезная и довольно профессиональная информация, спасибо

  32. лучше обратите внимание на функцию UUID_SHORT()
    она гораздо полезнее

Оставить ответ