Что такое GUID? Зачем и где мне его использовать?

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
76
0
44 070
15
Перейти к ответу Данный вопрос помечен как решенный

Ответы 15

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

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

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

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

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

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

Sergio 16.12.2008 19:25

Да, поэтому я использовал это как пример места, где вам НЕ нужен GUID.

James Curran 16.12.2008 19:27

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

Brian Rudolph 16.12.2008 20:10

Фактически, GUID - это частный вариант стандартного UUID. В частности, «Вариант 2» идентифицируется трехбитовой комбинацией (110x N = c..d, 3 бита). Другими словами, GUID все GUID являются UUID, но не все UUID являются GUID. используются в основном на платформах Microsoft. В документации Microsoft иногда используется «GUID» для обозначения всех типов UUID, поэтому этот термин может сбивать с толку.

Basil Bourque 30.01.2017 00:22

GUID = Глобальный уникальный идентификатор.

Используйте его, если хотите однозначно идентифицировать что-то в глобальном контексте.

Этот генератор может пригодиться.

GUID или UUID (глобально и универсально). Уникальный идентификатор - это, ну, уникальный идентификатор :)

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

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

В статье Википедия о идентификаторах GUID довольно четко указано, для чего они используются - возможно, перефразирование вашего вопроса поможет - для чего вам нужен GUID?

"зачем вам GUID?" Думаю, в этом был вопрос.

Michael Myers 16.12.2008 19:14
Ответ принят как подходящий

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

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

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

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

Очень чистый / краткий ответ, спасибо. Однако только сторона этого (возможно, это уже другой вопрос, который я понимаю), когда создаете, скажем, приложение на основе javascript / HTML, и вам нужно возвращать записи, скажем, для сообщений или чего-то еще, лучше ли возвращать только GUID на интерфейс, а чем фактический ID? рассуждение, конечно, если это идентификатор (автоматически сгенерированный prim.key), то было бы довольно легко угадать другой - тогда как GUID, очевидно, намного сложнее угадать ??

Dav.id 24.08.2011 05:57

«Область значений находится в квинтиллионах» - Нет, область на в значительной степени больше этого. Общее количество возможных UUID версии 4 составляет 2ʌ122 или 5,3x10ʌ36 (5,3 ундециллион). См. Википедия.

Basil Bourque 30.01.2017 00:31

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

GUID расшифровывается как «Глобальный уникальный идентификатор», и вы используете его, когда хотите иметь, например, глобальный уникальный идентификатор.

Например, в RSS-каналах у вас должен быть GUID для каждого элемента в канале. Таким образом, программа чтения каналов сможет отслеживать, прочитали ли вы этот элемент или нет. Без GUID это было бы невозможно сказать.

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

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

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

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

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

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

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

В дополнение ко всем другим ответам вот онлайн-генератор GUID:

http://www.guidgenerator.com/

What is a GUID?

GUID (or UUID) is an acronym for 'Globally Unique Identifier' (or 'Universally Unique Identifier'). It is a 128-bit integer number used to identify resources. The term GUID is generally used by developers working with Microsoft technologies, while UUID is used everywhere else.

How unique is a GUID?

128-bits is big enough and the generation algorithm is unique enough that if 1,0000,000,000 GUIDs per second were generated for 1 year the probability of a duplicate would be only 50%. Or if every human on Earth generated 600,000,000 GUIDs there would only be a 50% probability of a duplicate.

How are GUIDs used?

GUIDs are used in software development as database keys, component identifiers, or just about anywhere else a truly unique identifier is required. GUIDs are also used to identify all interfaces and objects in COM programming.

В мире Windows простой способ сгенерировать GUID - использовать команду Powershell: [Guid] :: NewGuid (). ToString (). ToUpperInvariant ()

Milan Gardian 25.06.2009 16:55

См. Мой комментарий к Ответ Куррана. Строго говоря, все GUID являются UUID, но не все UUID являются GUID.

Basil Bourque 30.01.2017 00:25

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

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

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

Возможно, их проще рассматривать как «128-битные случайные значения», но при злоупотреблении это может привести к некоторым проблемам. У Рэймонда Чана есть хорошая запись о них blogs.msdn.com/oldnewthing/archive/2008/06/27/8659071.aspx

Jon 17.12.2008 22:09

Эта ссылка не работает, поэтому вот обновленная: devblogs.microsoft.com/oldnewthing/20080627-00/?p=21823

Vilx- 23.07.2020 22:26

Однако я отмечу, что в наши дни наиболее распространенным идентификатором GUID является версия 4 GUID, который на самом деле почти все случайные биты.

Vilx- 23.07.2020 22:35

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 могла гарантировать отсутствие повторяющихся идентификаторов. К сожалению, многие разработчики драйверов никогда не беспокоились и просто использовали любой ID, который был в примере VxD, который они использовали в качестве отправной точки. Я не уверен, сколько проблем это вызвало - я не думаю, что уникальность идентификатора VxD была абсолютно необходима, но, вероятно, это повлияло на некоторые функции в некоторых API.

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

Это то, чего люди обычно не понимают, когда говорят о GUID.

BobbyShaftoe 16.12.2008 19:52

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

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

Другие вопросы по теме