Универсальный уникальный идентификатор
Акроним | UUID |
---|---|
Организация | Фонд открытого программного обеспечения (OSF), ISO / IEC , Рабочая группа по разработке Интернета (IETF) |
Количество цифр | 32 |
Пример | 123e4567-e89b-12d3-a456-426614174000 |
Веб-сайт | RFC 9562 (устарел) RFC 4122 ) |
Универсальный уникальный идентификатор ( UUID ) — это 128-битная метка , используемая для информации в компьютерных системах. Термин «глобальный уникальный идентификатор» ( GUID ) также используется, в основном в системах Microsoft. [1] [2]
При создании стандартными методами UUID для практических целей уникальны. Их уникальность не зависит от центрального регистрирующего органа или координации между создающими их сторонами, в отличие от большинства других схем нумерации. Хотя вероятность того, что UUID будет продублирован, не равна нулю, обычно она считается достаточно близкой к нулю, чтобы ею можно было пренебречь. [3] [4]
Таким образом, любой может создать UUID и использовать его для идентификации чего-либо с почти уверенностью, что этот идентификатор не дублирует тот, который уже был или будет создан для идентификации чего-то другого. Таким образом, информация, помеченная независимыми сторонами UUID, может впоследствии быть объединена в единую базу данных или передана по тому же каналу с незначительной вероятностью дублирования.
Принятие UUID широко распространено: многие вычислительные платформы обеспечивают поддержку их генерации и анализа их текстового представления.
История
[ редактировать ]В 1980-х годах компания Apollo Computer первоначально использовала UUID в сетевой вычислительной системе (NCS). Позже Фонд открытого программного обеспечения (OSF) использовал UUID для своей распределенной вычислительной среды (DCE). Дизайн UUID DCE был частично основан на UUID NCS. [5] чей дизайн, в свою очередь, был вдохновлен ( 64-битными ) уникальными идентификаторами, определенными и повсеместно используемыми в Domain/OS , операционной системе, разработанной Apollo Computer. [ нужна ссылка ] Позже, [ когда? ] платформы Microsoft Windows приняли дизайн DCE как «глобальные уникальные идентификаторы» (GUID).
RFC 4122 зарегистрировал пространство имен URN для UUID и повторил предыдущие спецификации с тем же техническим содержанием. [2] Когда в июле 2005 г. RFC 4122 был опубликован как предложенный стандарт IETF , ITU также стандартизировал UUID на основе предыдущих стандартов и ранних версий РФК 4122 . 7 мая 2024 г. RFC 9562 Был опубликован , в котором представлены 3 новые «версии» и прояснены некоторые неясности.
Стандарты
[ редактировать ]UUID стандартизированы Фондом открытого программного обеспечения (OSF) как часть распределенной вычислительной среды (DCE). [6] [7]
UUID задокументированы в стандарте ISO / IEC 11578:1996 « Информационные технологии – Взаимодействие открытых систем – Удаленный вызов процедур (RPC)», а в последнее время – в Рек. ITU-T Rec. Х.667 | ИСО / МЭК 9834-8:2014. [8]
Рабочая группа по проектированию Интернета (IETF) опубликовала «Стандартный трек». RFC 9562 [1] из «Рабочой группы по пересмотру определений универсально уникальных идентификаторов» [9] как доработка для РФК 4122 . [2] RFC 4122 технически эквивалентен Рекомендации ITU-T Rec. Х.667 | ISO/IEC 9834-8, но сейчас он устарел.
Двоичный формат провода
[ редактировать ]UUID — это 128-битная метка. Первоначально компания Apollo Computer разработала UUID со следующим форматом проводов: [5] [10]
Устаревший формат провода Имя Компенсировать Длина Описание time_high 0x00 4 октета/32 бита Первые 6 октетов представляют собой количество единиц времени в четыре микросекунды (мкс), прошедших с 01.01.1980 00:00 UTC .
Время 2 48 × 4 мкс после начала 1980 года было 05.09.2015 05:58:26.84262 UTC.
Таким образом, последний раз, когда UUID можно было генерировать в этом исходном формате, был в 2015 году. [11]time_low 0x04 2 октета/16 бит сдержанный 0x06 2 октета/16 бит Эти октеты зарезервированы для использования в будущем. семья 0x08 1 октет/8 бит Этот октет представляет собой семейство адресов. узел 0x09 7 октетов/56 бит Эти октеты представляют собой идентификатор хоста в форме, разрешенной указанным семейством адресов.
Позже UUID был расширен за счет объединения устаревшего поля семейства с новым полем варианта. Поскольку в прошлом поле семейства использовало только значения в диапазоне от 0 до 13, было решено, что UUID, у которого старший бит установлен в 0, является устаревшим UUID. Это дает следующую таблицу для семейной группы:
Поле семейства/варианта старший бит 0 старший бит 1 старший бит 2 Диапазон значений поля устаревшего семейства В шестнадцатеричном формате Описание 0 х х 0–127 (используются только 0–13) 0x00–0x7f Устаревший UUID Apollo NCS 1 0 х 128–191 0x80–0xbf UUID OSF DCE 1 1 0 192–223 0xc0–0xdf UUID Microsoft COM/DCOM 1 1 1 224–255 0xe0–0xff Зарезервировано для будущего определения
Устаревший UUID Apollo NCS имеет формат, описанный в предыдущей таблице. Вариант OSF DCE UUID описан в RFC 9562 . Вариант UUID Microsoft COM/DCOM описан в документации Microsoft.
Чтобы облегчить человеческое чтение, группы обычно представляются в шестнадцатеричном формате, где группы разделяются символом тире ( - ).
Текстовое представление
[ редактировать ]Поскольку UUID представляет собой 128-битную метку, его можно представить в разных форматах.
В большинстве случаев UUID представлены в виде шестнадцатеричных значений. Наиболее часто используемый формат — 8-4-4-4-12. xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
, где каждый x
представляет собой 4 бита. Другими известными форматами являются формат 8-4-4-4-12 со скобками, {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
, как в системах Microsoft, например Windows, или xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
, где все дефисы удалены. В некоторых случаях также возможно наличие xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
с префиксом «0x» или суффиксом «h» для обозначения шестнадцатеричных значений. Формат с дефисами был введен в новой системе вариантов. До этого в устаревшем формате Apollo использовался немного другой формат: 34dc23469000.0d.00.00.7c.5f.00.00.00
. Первая часть — это время (time_high и time_low вместе взятые). Зарезервированное поле пропускается. Поле семейства идет сразу после первой точки, поэтому в данном случае 0d
(13 в десятичном формате) для DDS (службы распространения данных) . Остальные части, разделенные точкой, представляют собой байты узла.
Обычно предпочтительным форматом является строчная форма шестнадцатеричных значений. В частности, в некоторых контекстах, например, определенных в Рекомендации МСЭ-Т. X.667, при создании текста требуются строчные буквы, но версия в верхнем регистре также должна быть принята.
UUID может быть представлен как 128-битное целое число. Например, UUID 550e8400-e29b-41d4-a716-446655440000
также может быть представлено как 113059749145936325402354257176981405696. Обратите внимание, что можно иметь как знаковые, так и беззнаковые значения, если первый бит UUID установлен в 1.
UUID может быть представлен как 128-битное двоичное число . Например, UUID 550e8400-e29b-41d4-a716-446655440000
также может быть представлено как 0101010100001110100001000000000011100010100110110100000111010100101001110001011001000100011001100101010101000100000 0000000000000.
RFC 9562 регистрирует пространство имен «uuid». Это позволяет создавать URN из UUID, например urn:uuid:550e8400-e29b-41d4-a716-446655440000
. Для этого используется обычный формат 8-4-4-4-12. Также возможно создать OID URN из UUID, например urn:oid:2.25.113059749145936325402354257176981405696
. В этом случае используется десятичный формат без знака. UUID «uuid» рекомендуется использовать вместо URN «oid».
Варианты
[ редактировать ]Поле варианта указывает формат UUID (а в случае устаревшего UUID также семейство адресов, используемое для поля узла). Определены следующие варианты:
- Вариант Apollo NCS (обозначенный однобитовым шаблоном 0xxx 2 ) предназначен для обратной совместимости с ныне устаревшим форматом UUID Apollo Network Computing System 1.5, разработанным примерно в 1988 году. Хотя он и отличается в деталях, сходство с современным UUIDv1 очевидно. Биты вариантов в текущей спецификации UUID совпадают со старшими битами октета семейства адресов в UUID NCS. Хотя семейство адресов могло содержать значения в диапазоне 0–255, всегда были определены только значения 0–13. Соответственно, битовая комбинация
0xxx
позволяет избежать конфликтов с историческими UUID NCS, если они все еще существуют в базах данных. [10] Этот вариант определяет «семьи» как подтип. - Вариант OSF DCE (10xx 2 ) называется UUID RFC 4122/DCE 1.1 или UUID «Leach – Salz» в честь авторов исходного Интернет-проекта . Этот вариант определяет «версии» как подтип.
- Вариант Microsoft COM/DCOM (110x 2 ) охарактеризован в RFC как «зарезервированная обратная совместимость корпорации Microsoft» и использовался для ранних GUID на платформе Microsoft Windows .
- Пространство зарезервированных вариантов в настоящее время не используется ни одной спецификацией.
Версии
[ редактировать ]Вариант OSF DCE определяет в стандарте восемь «версий», и каждая версия может быть более подходящей, чем другие, в конкретных случаях использования. Версия указывается значением старшего полубайта (старшие 4 бита или старшая шестнадцатеричная цифра) 7-го байта UUID. В шестнадцатеричном формате это символ после второго тире. Например, UUID 9c5b94b1-35ad-49bb-b118-8e8fc24abf80
это версия 4, так как цифра после второго тире равна 4 в ...-49bb-...
.
Версии 1 и 6 (дата-время и MAC-адрес)
[ редактировать ]Версия 1 объединяет 48-битный MAC-адрес «узла» (то есть компьютера, генерирующего UUID) с 60-битной меткой времени, представляющей собой количество 100- наносекундных интервалов с полуночи 15 октября 1582 года по всемирному координированному времени (UTC). ), дата, когда григорианский календарь был впервые принят большей частью Европы, в которой в то время доминировала римско-католическая Испания. В RFC 4122 указано, что значение времени переходит примерно в 3400 год нашей эры. [2] : 3 в зависимости от используемого алгоритма, что подразумевает, что 60-битная временная метка является величиной со знаком. Однако некоторые программы, такие как библиотека libuuid, рассматривают временную метку как беззнаковую, помещая время перехода в 5623 год нашей эры. [12] Время пролонгации, определенное в Рекомендации МСЭ-Т. X.667 — это 3603 год нашей эры. [13] : v
13-битная или 14-битная «унифицирующая» тактовая последовательность расширяет временную метку для обработки случаев, когда тактовая частота процессора увеличивается недостаточно быстро или когда на каждом узле имеется несколько процессоров и генераторов UUID. Когда UUID генерируются быстрее, чем могут двигаться системные часы, младшие биты полей метки времени могут генерироваться путем их увеличения каждый раз, когда генерируется UUID, для имитации метки времени с высоким разрешением. Поскольку каждый UUID версии 1 соответствует одной точке пространства (узлу) и времени (интервалам и последовательности часов), вероятность того, что два правильно сгенерированных UUID версии 1 непреднамеренно окажутся одинаковыми, практически равна нулю. Поскольку общая длина последовательности времени и часов составляет 74 бита, 2 74 (1.8 × 10 22 или 18 секстиллионов) UUID версии 1 могут быть сгенерированы для каждого идентификатора узла с максимальной средней скоростью 163 миллиарда в секунду на каждый идентификатор узла. [2]
В отличие от других версий UUID, UUID версии 1 и -2, основанные на MAC-адресах сетевых карт, в своей уникальности частично полагаются на идентификатор, выданный центральным органом регистрации, а именно уникальный идентификатор организации на часть MAC-адреса, содержащую (OUI). , который выдается IEEE производителям сетевого оборудования. [14] Уникальность UUID версий 1 и 2, основанных на MAC-адресах сетевых карт, также зависит от того, правильно ли производители сетевых карт назначают уникальные MAC-адреса своим картам, что, как и другие производственные процессы, подвержено ошибкам. Кроме того, некоторые операционные системы позволяют конечному пользователю настраивать MAC-адрес, особенно OpenWRT . [15]
Использование MAC-адреса сетевой карты узла для идентификатора узла означает, что UUID версии 1 можно отследить до компьютера, который его создал. Иногда документы можно отследить до компьютеров, на которых они были созданы или отредактированы, с помощью UUID, встроенных в них с помощью программного обеспечения для обработки текста . Эта дыра в конфиденциальности была использована при поиске создателя вируса Melissa . [16]
RFC 9562 позволяет заменять MAC-адрес в UUID версии 1 (или 2) случайным 48-битным идентификатором узла либо потому, что узел не имеет MAC-адреса, либо потому, что его нежелательно раскрывать. В этом случае RFC требует, чтобы младший бит первого октета идентификатора узла был установлен в 1. [2] Это соответствует биту многоадресной рассылки в MAC-адресах, и его установка служит для различения UUID, где идентификатор узла генерируется случайным образом из UUID на основе MAC-адресов сетевых карт, которые обычно имеют одноадресные MAC-адреса. [2]
Версия 6 аналогична версии 1, за исключением того, что все биты времени расположены в противоположном порядке. Это даст системам возможность сортировки в порядке создания по UUID, где это было невозможно в версии 1.
Версия 2 (дата, время и MAC-адрес, версия безопасности DCE)
[ редактировать ]RFC 9562 резервирует версию 2 для UUID «безопасности DCE»; но он не дает никаких подробностей. По этой причине во многих реализациях UUID версия 2 отсутствует. Однако спецификация UUID версии 2 предоставляется спецификацией служб аутентификации и безопасности DCE 1.1. [7]
UUID версии 2 аналогичны версии 1, за исключением того, что младшие 8 бит тактовой последовательности заменяются номером «локального домена», а младшие 32 бита временной метки заменяются целочисленным идентификатором, имеющим смысл в пределах указанного локальный домен. В системах POSIX номера локального домена 0 и 1 предназначены для идентификаторов пользователей ( UID ) и идентификаторов групп ( GID ) соответственно, а другие номера локального домена определяются сайтом. [7] В системах, отличных от POSIX, все номера локальных доменов определяются сайтом.
Возможность включения 40-битного домена/идентификатора в UUID требует компромисса. С одной стороны, 40 бит позволяют использовать около 1 триллиона значений домена/идентификатора на каждый идентификатор узла. С другой стороны, при усечении значения часов до 28 старших битов по сравнению с 60 битами в версии 1, часы в UUID версии 2 будут «тикать» только один раз каждые 429,49 секунды, что чуть больше 7 минут, поскольку в отличие от каждых 100 наносекунд в версии 1. И при тактовой последовательности всего 6 бит по сравнению с 14 битами в версии 1, за 7-минутный такт может быть сгенерировано только 64 уникальных UUID для каждого узла/домена/идентификатора по сравнению с 16 384 значения тактовой последовательности для версии 1. [17] Таким образом, версия 2 может не подходить для случаев, когда требуются UUID для каждого узла/домена/идентификатора со скоростью, превышающей примерно один раз каждые семь минут.
Версии 3 и 5 (на основе имени пространства имен)
[ редактировать ]UUID версий 3 и 5 генерируются путем хеширования идентификатора и имени пространства имен . Версия 3 использует MD5 в качестве алгоритма хеширования, а версия 5 использует SHA-1 . [1]
Идентификатор пространства имен сам по себе является UUID. Спецификация предоставляет UUID для представления пространств имен для URL-адресов , полных доменных имен , идентификаторов объектов и X.500 отличительных имен ; но любой желаемый UUID может использоваться в качестве указателя пространства имен.
Чтобы определить UUID версии 3, соответствующий данному пространству имен и имени, UUID пространства имен преобразуется в строку байтов, объединяется с входным именем, а затем хэшируется с помощью MD5, что дает 128 бит. Затем 6 или 7 бит заменяются фиксированными значениями, 4-битной версией (например, 0011 2 для версии 3) и 2- или 3-битным «вариантом» UUID (например, 10 2, обозначающим UUID RFC 9562 или 110 2 , указывающий устаревший GUID Microsoft). Поскольку таким образом заранее определены 6 или 7 бит, только 121 или 122 бита способствуют уникальности UUID.
UUID версии 5 аналогичны, но вместо MD5 используется SHA-1. Поскольку SHA-1 генерирует 160-битные дайджесты, перед заменой битов версии и варианта дайджест усекается до 128 бит.
UUID версии 3 и версии 5 обладают свойством, согласно которому одно и то же пространство имен и имя будут сопоставлены с одним и тем же UUID. Однако ни пространство имен, ни имя не могут быть определены по UUID, даже если один из них указан, кроме как методом перебора. RFC 4122 рекомендует версию 5 (SHA-1) вместо версии 3 (MD5) и предостерегает от использования UUID любой версии в качестве учетных данных безопасности. [2]
Версия 4 (случайная)
[ редактировать ]UUID версии 4 генерируется случайным образом. Как и в других UUID, для обозначения версии 4 используются 4 бита, а для обозначения варианта — 2 или 3 бита (10 2 или 110 2 для вариантов 1 и 2 соответственно). Таким образом, для варианта 1 (то есть большинства UUID) случайный UUID версии 4 будет иметь 6 заранее определенных битов варианта и версии, оставляя 122 бита для случайно сгенерированной части, всего 2 122 , или 5,3 × 10 36 (5,3 ундециллиона ) возможных UUID версии 4 варианта 1. Существует вдвое меньше возможных UUID версии 4, варианта 2 (устаревшие GUID), поскольку доступно на один случайный бит меньше, а для варианта используется 3 бита.
Пер RFC 9562 , 4 старших бита седьмого октета указывают, какой версии соответствует UUID. Это означает, что первая шестнадцатеричная цифра в третьей группе всегда начинается с цифры. 4
в UUIDv4s. Визуально это выглядит так xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
, где M
поле версии UUID. Верхние два или три бита цифры N
закодируйте вариант. Например, случайный UUID версии 4, вариант 2 может быть 8D8AC610-566D-4EF0-9C22-186B2A5ED793
. [18]
Версия 7 (метка времени и случайная)
[ редактировать ]UUID версии 7 (UUIDv7) предназначены для ключей в высоконагруженных базах данных и распределенных системах.
UUIDv7 начинается с 48-битной временной метки эпохи Unix с обратным порядком байтов и точностью до миллисекунды. Временная метка может быть сдвинута на любое значение временного сдвига. Сразу после временной метки следует полубайт версии, который должен иметь значение 7. Биты варианта должны быть 10x
. Остальные 74 бита представляют собой счетчик случайного заполнения (необязательно, не менее 12 бит, но не длиннее 42 бит) и случайны.
Два метода обработки опрокидывания счетчика могут использоваться вместе:
- Самый значимый, крайний левый защитный бит счетчика с нулевым заполнением.
- Увеличьте временную метку раньше фактического времени и повторно инициализируйте счетчик при его переполнении.
В СУБД генератор UUIDv7 может быть общим между потоками (привязанным к таблице или экземпляру СУБД) или может быть локальным для потока (с худшей монотонностью, локальностью и производительностью).
Версия 8 (индивидуальная)
[ редактировать ]Версия 8 имеет только два требования:
- Биты вариантов должны быть
10x
. - Полубайт версии должен иметь значение 8.
Эти требования сообщают системе, что это UUID версии 8. Остальные 122 бита могут быть настроены поставщиком. Разница с версией 4 заключается в том, что эти 122 бита являются случайными, а 122 бита в UUID версии 8 — нет, поскольку они следуют правилам, специфичным для поставщика.
Специальные UUID
[ редактировать ]«Нулевой» UUID — это UUID. 00000000-0000-0000-0000-000000000000
; то есть все биты установлены в ноль. [1]
«Максимальный» UUID, иногда также называемый «омни» UUID, — это UUID. FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF
; то есть все биты установлены в единицу. [1]
Кодирование
[ редактировать ]Двоичное кодирование UUID варьируется в зависимости от системы. UUID варианта 1, в настоящее время наиболее распространенный вариант, закодированы в формате с прямым порядком байтов . Например, 00112233-4455-6677-8899-aabbccddeeff
кодируется как байты 00 11 22 33
44 55
66 77
88 99
aa bb cc dd ee ff
. [19] [20]
UUID варианта 2, исторически использовавшиеся в библиотеках Microsoft COM/OLE , используют формат с прямым порядком байтов , но выглядят со смешанным порядком байтов: первые три компонента UUID имеют прямой порядок байтов , а последние два — с прямым порядком байтов из-за отсутствия байтовых тире. при форматировании как строка. [21] Например, 00112233-4455-6677-8899-aabbccddeeff
кодируется как байты 33 22 11 00
55 44
77 66
88 99
aa bb cc dd ee ff
. [22] [23]
Столкновения
[ редактировать ]Коллизия возникает, когда один и тот же UUID генерируется более одного раза и назначается разным референтам. В случае стандартных UUID версий 1 и 2, использующих уникальные MAC-адреса сетевых карт, возникновение коллизий маловероятно, а вероятность увеличивается только в том случае, если реализация отличается от стандартов, случайно или намеренно.
В отличие от UUID версии 1 и версии 2, сгенерированных с использованием MAC-адресов, с UUID версии 1 и -2, которые используют случайно сгенерированные идентификаторы узлов, UUID версий 3 и 5 на основе хэша, а также случайные UUID версии 4, коллизии могут возникать даже без проблем с реализацией, хотя и с вероятностью настолько малой, что ее обычно можно игнорировать. Эту вероятность можно точно вычислить на основе анализа проблемы дня рождения . [24]
Например, количество случайных UUID версии 4, которые необходимо сгенерировать, чтобы иметь 50% вероятность хотя бы одного столкновения, составляет 2,71 квинтиллиона и рассчитывается следующим образом: [25]
Это число эквивалентно генерации 1 миллиарда UUID в секунду в течение примерно 86 лет. Файл, содержащий такое количество UUID (по 16 байт на UUID), будет иметь размер около 45 эксабайт .
Наименьшее количество UUID версии 4, которое необходимо сгенерировать, чтобы вероятность обнаружения коллизии была равна p, аппроксимируется формулой
Таким образом, вероятность найти дубликат среди 103 триллионов UUID версии 4 составляет один на миллиард.
Конфликты происходили, когда производители присваивали продукту UUID по умолчанию, например материнской плате, а затем не могли перезаписать UUID по умолчанию на более позднем этапе производственного процесса. Например, UUID 03000200-0400-0500-0006-000700080009 встречается на многих различных материнских платах Gigabyte. [26]
Использование
[ редактировать ]Значительные области применения включают ext2 / ext3 / ext4 инструменты пользовательского пространства файловой системы ( e2fsprogs использует libuuid, предоставляемый util-linux ), LVM , LUKS зашифрованные разделы , GNOME , KDE и macOS . [27] большинство из которых взято из оригинальной реализации Теодора Цо . [12] Одним из применений UUID в Solaris (с использованием реализации Open Software Foundation) является идентификация работающего экземпляра операционной системы с целью сопоставления данных аварийного дампа с событием управления сбоями в случае паники ядра. [28] «Метка раздела» и «UUID раздела» хранятся в суперблоке . Они оба являются частью файловой системы, а не раздела. Например, ext2–4 содержат UUID, а NTFS или FAT32 — нет. Суперблок является частью файловой системы и поэтому полностью содержится в разделе. dd if=/dev/sda1 of=/dev/sdb1
оставляет как sda1, так и sdb1 с одной и той же меткой и UUID.
Microsoft (COM) используется несколько разновидностей GUID В объектной модели компонентов :
- IID – идентификатор интерфейса; (Те, которые зарегистрированы в системе, хранятся в реестре Windows по адресу
[HKEY_CLASSES_ROOT\Interface]
[29] ) - CLSID – идентификатор класса; (Хранится по адресу
[HKEY_CLASSES_ROOT\CLSID]
) - LIBID – идентификатор библиотеки типов; (Хранится по адресу
[HKEY_CLASSES_ROOT\TypeLib]
[30] ) - CATID – идентификатор категории; (его присутствие в классе идентифицирует его как принадлежность к определенным категориям классов, перечисленным в
[HKEY_CLASSES_ROOT\Component Categories]
[31] )
UUID обычно используются в качестве уникального ключа в таблицах базы данных . NEWID Функция в Microsoft SQL Server версии 4 Transact-SQL возвращает стандартные случайные UUID версии 4, а функция NEWID в Microsoft SQL Server версии 4. Transact-SQL возвращает стандартные случайные UUID версии 4. Функция NEWSEQUENTIALID возвращает 128-битные идентификаторы, аналогичные UUID, которые будут последовательно возрастать до следующей перезагрузки системы. [32] База данных Oracle Функция SYS_GUID не возвращает стандартный GUID, несмотря на имя. Вместо этого он возвращает 16-байтовое 128-битное значение RAW на основе идентификатора хоста и идентификатора процесса или потока, что чем-то похоже на GUID. [33] PostgreSQL содержит UUID Тип данных [34] и может генерировать большинство версий UUID с помощью функций модулей. [35] [36] MySQL предоставляет Функция UUID , которая генерирует стандартные UUID версии 1. [37] Случайный характер стандартных UUID версий 3, 4 и 5, а также порядок полей в стандартных версиях 1 и 2 могут создать проблемы с локальностью базы данных или производительностью, когда UUID используются в качестве первичных ключей . Например, в 2002 году Джимми Нильссон сообщил о значительном улучшении производительности Microsoft SQL Server, когда UUID версии 4, используемые в качестве ключей, были изменены и включали неслучайный суффикс, основанный на системном времени. Этот так называемый подход «COMB» (комбинированный временной GUID) сделал UUID нестандартными и значительно увеличил вероятность дублирования, как признал Нильссон, но Нильссон требовал только уникальности внутри приложения. [38] Путем изменения порядка и кодирования UUID версий 1 и 2 так, чтобы метка времени была первой, можно предотвратить потерю производительности при вставке. [39]
Некоторые веб-фреймворки, такие как Laravel , поддерживают UUID «сначала отметка времени», которые можно эффективно хранить в индексированном столбце базы данных. Это создает UUID COMB с использованием формата версии 4, но первые 48 бит составляют метку времени, расположенную, как в UUIDv1. [40] [41] Более конкретные форматы, основанные на идее COMB UUID, включают:
- «ULID», в котором отсутствуют 4 бита, используемые для обозначения версии 4, и по умолчанию используется кодировка base32. [42]
- UUID версий с 6 по 8, официальное предложение трех форматов COMB UUID. [43]
См. также
[ редактировать ]- Атака на день рождения
- Идентификатор объекта (OID)
- Единый идентификатор ресурса (URI)
- Идентификатор снежинки
Ссылки
[ редактировать ]- ^ Перейти обратно: а б с д и Дэвис, К.; Пибоди, Б.; Лич, П. (2024). Универсально уникальные идентификаторы (UUID) . Рабочая группа по интернет-инжинирингу . дои : 10.17487/RFC9562 . RFC 9562 . Проверено 9 мая 2024 г.
- ^ Перейти обратно: а б с д и ж г час Лич, П.; Миллинг, М.; Зальц, Р. (2005). Универсальный уникальный идентификатор (UUID) Пространство имен URN . Рабочая группа по интернет-инжинирингу . дои : 10.17487/RFC4122 . РФК 4122 . Проверено 17 января 2017 г.
- ^ «Универсально уникальные идентификаторы (UUID)» . Н2 . Проверено 21 марта 2021 г.
- ^ Рекомендация ITU-T X.667 : Генерация и регистрация универсально уникальных идентификаторов (UUID) и их использование в качестве компонентов идентификатора объекта ASN.1 . Стандарт. Октябрь 2012.
- ^ Перейти обратно: а б Зан, Лиза; Дайнин, Теренс; Лич, Пол; Мартин, Элизабет; Мишкин, Натаниэль; Пато, Джозеф; Вайант, Джеффри (1990). Сетевая вычислительная архитектура . Прентис Холл . п. 10. ISBN 978-0-13-611674-5 .
- ^ «DCE 1.1: Удаленный вызов процедур» . Открытая группа. 1997.
- ^ Перейти обратно: а б с «DCE 1.1: Службы аутентификации и безопасности» . Открытая группа. 1997.
- ^ «17-я Исследовательская комиссия ITU-T — Рекомендации по идентификаторам объектов (OID) и органам регистрации» . МСЭ.int . Проверено 28 марта 2023 г.
- ^ «Пересмотр определений универсально уникальных идентификаторов (uuidrev)» . Проверено 30 мая 2023 г.
- ^ Перейти обратно: а б "uuid.c" .
- ^ Но ошибка в домене/ОС сделала доступной только первую половину временного пространства, поэтому проблемы возникли 2 ноября 1997 г. Джим Рис (1996). «Ошибка свидания Аполлона» .
- ^ Перейти обратно: а б «ext2/e2fsprogs.git — утилиты пользовательского пространства файловой системы Ext2/3/4» . Кернел.орг . Проверено 9 января 2017 г.
- ^ «Рекомендация МСЭ-Т X.667» . www.itu.int . Октябрь 2012 года . Проверено 19 декабря 2020 г.
- ^ «Регистрационный орган» . Ассоциация стандартов IEEE . Архивировано из оригинала 4 апреля 2011 года.
- ^ «Настройка MAC-адреса» . OpenWRT . 15 сентября 2021 г.
- ^ Райтер, Люк (2 апреля 1999 г.). «Отслеживание альтер-эго Мелиссы» . ЗДНет . Проверено 16 января 2017 г.
- ^ Кучлинг, А.М. «Что нового в Python 2.5» . Python.org . Проверено 23 января 2016 г.
- ^ "draft-ietf-uuidrev-rfc4122bis-14" . Университет Вашингтона . 6 ноября 2023 г. Архивировано из оригинала 17 апреля 2024 г.
- ^ Стил, Ник. «Разбор UUID» .
- ^ «Описание версий UUID» .
- ^ Чен, Раймонд (28 сентября 2022 г.). «Почему COM выражает GUID как с прямым порядком байтов, так и с прямым порядком байтов? Почему он не может просто выбрать одну из сторон и придерживаться ее?» . Старая новая вещь . Проверено 31 октября 2022 г.
- ^ Лич, Пол. «UUID и GUID» .
- ^ «Метод Guid.ToByteArray» .
- ^ Господи, Павел; Бакеро, Чарльз; Алмаейда, Пауло. «Генерация идентификаторов в мобильных средах» (PDF) . Репозиторий.Sdum.Uminho.pt .
- ^ Матис, Фрэнк Х. (июнь 1991 г.). «Общая проблема дня рождения». Обзор СИАМ . 33 (2): 265–270. CiteSeerX 10.1.1.5.5851 . дои : 10.1137/1033051 . ISSN 0036-1445 . JSTOR 2031144 . ОСЛК 37699182 .
- ^ «03000200-0400-0500-0006-000700080009 — Поиск в Google» . www.google.com . Проверено 30 апреля 2024 г.
- ^ gen_uuid.c в Apple Libc-391, что соответствует Mac OS X 10.4.
- ^ «Реструктуризация аварийного дампа в Solaris» . Блоги.Oracle.com . Оракул . Проверено 9 января 2017 г.
- ^ «Указатели на интерфейсы и интерфейсы» . Центр разработки для Windows — технологии настольных приложений . Майкрософт . Проверено 15 декабря 2015 г.
Вы ссылаетесь на интерфейс во время выполнения с помощью глобального уникального идентификатора интерфейса ( ИИД ). Этот IID , который является конкретным экземпляром глобального уникального идентификатора ( GUID ), поддерживаемый COM, позволяет клиенту точно спрашивать объект, поддерживает ли он семантику интерфейса, без ненужных накладных расходов и без путаницы, которая может возникнуть в системе из-за наличия нескольких версий одного и того же интерфейса с одинаковым именем.
- ^ «Регистрация библиотеки типов» . Сеть разработчиков Microsoft . Майкрософт . Проверено 15 декабря 2015 г.
- ^ «Категоризация по возможностям компонентов» . Центр разработки для Windows — технологии настольных приложений . Майкрософт . Проверено 15 декабря 2015 г.
Список CATID и удобочитаемых имен хранится в хорошо известном месте реестра.
- ^ «NEWSEQUENTIALID (Transact-SQL)» . Сеть разработчиков Microsoft . Майкрософт . 8 августа 2015 года . Проверено 14 января 2017 г.
- ^ «Справочник по SQL базы данных Oracle» . Оракул .
- ^ «Раздел 8.12 Тип UUID» . Документация PostgreSQL 9.4.10 . Группа глобального развития PostgreSQL. 13 февраля 2020 г.
- ^ "uuid-ossp" . PostgreSQL: Документация: 9.6 . Группа глобального развития PostgreSQL. 12 августа 2021 г.
- ^ "pgcrypto" . PostgreSQL: Документация: 9.6 . Группа глобального развития PostgreSQL. 12 августа 2021 г.
- ^ «Раздел 13.20 Прочие функции» . Справочное руководство по MySQL 5.7 . Корпорация Оракл .
- ^ Нильссон, Джимми (8 марта 2002 г.). «Стоимость GUID как первичных ключей» . ИнформИТ . Проверено 20 июня 2012 г.
- ^ «Хранение значений UUID в MySQL» . Перкона. 19 декабря 2014 г. Архивировано из оригинала 29 ноября 2020 г. . Проверено 10 февраля 2021 г.
- ^ «Помощники — Laravel — PHP Framework для веб-мастеров» . Ларавел.com .
- ^ Кабрера, Итало Баэса (31 января 2020 г.). «Laravel: загадочный «Упорядоченный UUID» » . Середина .
- ^ «Универсально уникальный лексикографически сортируемый идентификатор» . Гитхаб . УЛИД. 10 мая 2021 г.
- ^ Дэвис, Кайзер Р.; Пибоди, Брэд (5 сентября 2023 г.). "draft-ietf-uuidrev-rfc4122bis-11" . www.tools.ietf.org .
Внешние ссылки
[ редактировать ]- Рекомендация МСЭ-Т X.667 (Свободный доступ)
- ISO/IEC 9834-8:2014 (Платный)
- Техническое примечание TN2166 — Секреты GPT — разработчик Apple
- Документация по UUID — идентификатор Apache Commons
- Ключ CLSID - Microsoft Docs
- Универсальный уникальный идентификатор — Библиотека открытой группы
- Инструмент декодера UUID
- Краткая история UUID
- Понимание того, как генерируются UUID