Что именно такое GUID? Почему и где я должен это использовать? - PullRequest
59 голосов
/ 16 декабря 2008

Что такое GUID? Почему и где я должен это использовать?
Я видел ссылки на GUID во многих местах, и в Википедии, но не очень понятно, как вам это использовать. Если бы кто-то мог ответить на это, было бы неплохо. Спасибо

Ответы [ 15 ]

87 голосов
/ 16 декабря 2008

GUID технически означает глобально уникальный идентификатор. Фактически, это 128-битная структура, которая вряд ли когда-либо повторится или создаст коллизию. Если вы делаете математику, домен значений находится в undecillions .

Используйте руководства, если у вас есть несколько независимых систем или клиентов, генерирующих идентификаторы, которые должны быть уникальными.

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

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

20 голосов
/ 16 декабря 2008

GUID - это «глобально уникальный идентификатор». Вы используете его везде, где вам нужен идентификатор, который гарантированно отличается от любого другого.

Обычно вам нужно, чтобы значение было «локально уникальным» - например, идентификатор первичного ключа в таблице базы данных должен отличаться только от других строк в этой таблице, но может совпадать с идентификатором в других таблицах. (здесь не нужен GUID)

GUID обычно используются, когда вы будете определять идентификатор, который должен отличаться от идентификатора, который будет определять кто-то другой (вне вашего контроля). Одно из таких мест в идентификаторе интерфейса в элементах управления ActiveX. Любой может создать ActiveX и не знать, с каким другим элементом управления кто-то будет их использовать - и ничто не мешает всем давать своим элементам управления одно и то же имя. Идентификаторы GUID сохраняют их четкими.

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

Их также иногда называют UUID (универсальный уникальный идентификатор).

14 голосов
/ 16 декабря 2008

В дополнение ко всем остальным ответам, есть генератор GUID онлайн :

http://www.guidgenerator.com/

Что такое GUID?

GUID (или UUID) является аббревиатурой от «Глобальный уникальный идентификатор» (или «Универсально уникальный идентификатор»). Это 128-битное целое число, используемое для определить ресурсы. Термин GUID является обычно используется разработчиками, работающими с технологиями Microsoft, в то время как UUID используется везде.

Насколько уникален GUID?

128-бит достаточно велик и алгоритм генерации достаточно уникален что если 1,0000,000,000 GUID за второй были созданы в течение 1 года вероятность дубликата будет только 50%. Или если каждый человек на Земле сгенерировал там 600 000 000 GUID будет только 50% вероятности дублировать.

Как используются GUID?

GUID используются при разработке программного обеспечения в качестве ключей базы данных, компонент идентификаторы, или где угодно иначе действительно уникальный идентификатор требуется. GUID также используются для идентифицировать все интерфейсы и объекты в Программирование COM.

11 голосов
/ 16 декабря 2008

GUID - это «Глобально уникальный идентификатор». Также называется UUID (универсальный уникальный идентификатор).

Это в основном 128-битное число, которое генерируется определенным образом (см. RFC 4112 http://www.ietf.org/rfc/rfc4122.txt), что делает практически невозможным создание дубликатов. Таким образом, я могу генерировать GUID без необходимости какой-либо сторонней организации отдай их мне, чтобы убедиться, что они уникальны.

Одним из широко используемых идентификаторов GUID является идентификатор COM-объектов в Windows (классы, библиотеки типов, интерфейсы и т. Д.). Используя GUID, разработчики могут создавать свои COM-компоненты, не обращаясь в Microsoft для получения уникального идентификатора. Хотя идентификация сущностей COM является основным использованием GUID, они используются для многих вещей, которые требуют уникальных идентификаторов. Некоторые разработчики генерируют идентификаторы GUID для записей базы данных, чтобы предоставить им идентификатор, который можно использовать, даже если они должны быть уникальными для многих различных баз данных.

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

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

Поскольку идентификаторы GUID могут быть громоздкими (с точки зрения восприятия человеком они представляют собой строку шестнадцатеричных чисел, обычно сгруппированных следующим образом: aaaaaaaa-bbbb-cccc-dddd-ffffffffffff), некоторые пространства имен, которым требуются уникальные имена в разных организациях другая схема (часто основанная на доменных именах в Интернете).

Таким образом, пространство имен для пакетов Java по соглашению начинается с доменного имени организации (в обратном порядке), за которым следуют имена, которые определяются определенным образом организации. Например, пакет Java может иметь имя:

com.example.jpackage

Это означает, что решение конфликтов имен становится обязанностью каждой организации.

Пространства имен XML также делаются уникальными аналогичным образом - условно, кто-то, создающий пространство имен XML, должен сделать его «под» зарегистрированным доменным именем под своим контролем. Например:

xmlns="http://www.w3.org/1999/xhtml"

Другой способ управления уникальными идентификаторами - для MAC-адресов Ethernet. Компания, которая производит карты Ethernet, должна получить блок адресов, назначенных им IEEE (я думаю, что это IEEE). В этом случае схема сработала довольно хорошо, и даже если производитель облажался и выпустил карты с дублирующимися MAC-адресами, все будет работать нормально, если эти карты не находятся в одной подсети, поскольку за пределами подсети только IP адрес используется для маршрутизации пакетов. Хотя есть некоторые другие способы использования MAC-адресов, которые могут быть затронуты - один из алгоритмов для генерации GUID использует MAC-адрес в качестве одного параметра. Этот метод генерации GUID уже не так широко используется, поскольку считается угрозой конфиденциальности.

Одним из примеров схемы создания уникальных идентификаторов, которые не очень хорошо работали, были предоставленные Microsoft идентификаторы драйверов VxD в Windows 9x. Разработчики сторонних драйверов VxD должны были запросить у Microsoft набор идентификаторов, которые можно использовать для любых драйверов, написанных третьей стороной. Таким образом, Microsoft может убедиться, что не было дублированных идентификаторов. К сожалению, многие авторы драйверов никогда не беспокоились и просто использовали любой идентификатор, который был в примере VxD, который они использовали в качестве отправной точки. Я не уверен, сколько проблем это вызвало - я не думаю, что уникальность VxD ID была абсолютно необходима, но это, вероятно, повлияло на некоторые функциональные возможности в некоторых API.

9 голосов
/ 16 декабря 2008

GUID или UUID (глобально против универсально) Уникальный IDentifier, ну, в общем, уникальный идентификатор :) Когда вам нужно что-то действительно уникальное сгенерированное устройство, есть библиотеки, чтобы получить его.

Подробнее см. GUID в Википедии .

Когда вам не нужен GUID, это когда счетчик, которым вы управляете (так или иначе, как тип SERIAL SQL или последовательность), увеличивается. Индексирование «текстового» значения (GUID в текстовой форме) или 128-битного двоичного значения (которым является GUID) намного дороже, чем целое число.

5 голосов
/ 16 декабря 2008

Кто-то сказал, что это концептуально 128-битные случайные значения, и это, по сути, так, но, немного прочитав UUID (GUID обычно относится к реализации UUID от Microsoft), я вижу, что есть несколько разных версий UUID, и большинство из них не являются случайными. Таким образом, можно сгенерировать UUID для машины (или чего-то еще) и иметь возможность надежно повторить этот процесс для получения того же UUID в будущем, что важно для некоторых приложений.

4 голосов
/ 16 декабря 2008

Для меня проще думать о них как о «128-битных случайных значениях». Который по сути то, что они есть. Есть несколько алгоритмов для включения небольшого количества информации в несколько цифр вашего GUID (таким образом, случайная часть становится немного меньше), но все же они являются довольно большими почти случайными значениями.

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

Я предоставлю вам возможность выяснить, где их использовать, но в других ответах уже есть некоторые примеры. Дайте волю своему воображению. :)

3 голосов
/ 20 декабря 2008

Я работал над системой центра обработки вызовов ACD несколько лет назад, когда мы хотели собрать подробные записи о вызовах с нескольких процессоров вызовов в одну базу данных. Я настраиваю столбец в MS SQL, чтобы сгенерировать GUID для ключа базы данных, а не использовать сгенерированный системой последовательный идентификатор (столбец идентификаторов). Тогда для этого требовалось установить значение по умолчанию NewID (или создать его в коде, но функция NewID () была более безопасной). Конечно, большое значение ключа может поднять несколько бровей, но я бы предпочел отказаться от места, чем рисковать столкновением.

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

3 голосов
/ 16 декабря 2008

128-битный глобальный уникальный идентификатор. Вы можете генерировать GUID с этого момента до заката, и вы никогда не будете генерировать один и тот же GUID дважды, и никто другой. Они часто используются с COM.

Например, для чего-то, для чего вы бы их использовали, мы используем их в одном из наших продуктов. Наши пользователи могут создавать категории и карты на различных устройствах. Мы хотим убедиться, что мы не путаем категорию, созданную на одном устройстве, с категорией, созданной на другом, поэтому важно, чтобы идентификаторы были уникальными независимо от того, кто их генерирует, где они генерируют и когда они генерируют. Поэтому мы используем GUID (на самом деле мы используем нашу собственную схему с использованием 64-битных чисел, но они похожи на GUID).

3 голосов
/ 16 декабря 2008

Может быть трудно понять из-за всей математики, которая происходит за их генерацией. Думайте об этом как уникальный идентификатор. Вы можете заставить Visual Studio сгенерировать один для вас или .NET, если вы используете C # или одно из многих других приложений или веб-сайтов. Они считаются уникальными, потому что есть такой маленький глупый шанс, что вы дважды увидите один и тот же, что не стоит об этом думать.

...