Что именно является идентификатор GUID? Почему и где я должен его использовать?
Что такое GUID? Почему и где я должен его использовать?
Я видел ссылки на GUID во многих местах, и в Википедии, но не очень ясно, где его использовать. Если бы кто-нибудь мог ответить на этот вопрос, было бы здорово. Спасибо
15 ответов
GUID технически означает глобальный уникальный идентификатор. На самом деле это 128-битная структура, которая является вряд ли чтобы когда-либо повторить или создать столкновение. Если вы делаете математику, домен значений в undecillions.
используйте GUID, когда у вас есть несколько независимых систем или клиентов, генерирующих ID, которые должны быть уникальными.
например, если у меня есть 5 клиентских приложений, создающих и вставляющих транзакционные данные в таблицу это имеет уникальное ограничение на ID, а затем использует GUID. Это предотвращает необходимость принудительного запроса клиентом выданного идентификатора с сервера.
Это также отлично подходит для фабрик объектов и систем, которые имеют множество типов объектов, хранящихся в разных таблицах, где вы не хотите, чтобы любые 2 объекта имели одинаковый идентификатор. Это упрощает реализацию схем кэширования и очистки.
GUID — это «глобальный уникальный идентификатор». Вы используете его везде, где вам нужен идентификатор, который гарантированно будет отличаться от любого другого.
обычно вам нужно только значение «локально уникальное» — идентификатор первичного ключа в таблице базы данных,например, должен отличаться только от других строк в этой таблице, но может быть таким же, как идентификатор в других таблицах. (нет необходимости в GUID здесь)
GUID обычно используются, когда вы будете определять идентификатор, который должен отличаться от идентификатора, который будет определять кто-то другой (вне вашего контроля). Одно такое место в идентификаторе интерфейса на элементах управления ActiveX. Любой может создать ActiveX и не знать, с каким другим элементом управления кто-то будет использовать их с — — — и нет ничего, чтобы остановить всех от предоставления их элементов управления с тем же именем. GUIDs их различают.
GUID-это комбинация времени (в очень малых долях секунды) (поэтому она гарантированно отличается от любой GUID, определенный до или позже), и номер, определяющий ваше местоположение (иногда берется из MAC-адреса вашей сетевой карты) (так что он наверняка будет отличаться от любого другого GUID, определенного прямо сейчас кем-то другим).
Они также иногда известны как UUID (универсальный уникальный идентификатор).
в дополнение ко всем другим ответам, вот онлайн генератор GUID:
что такое GUID?
GUID (или UUID) является аббревиатурой «Глобальный уникальный идентификатор» (или «Универсальный Уникальный Идентификатор»). Он это 128-разрядное целое число, используемое для определите ресурсы. Термин GUID-это обычно используется разработчиками с технологиями Microsoft, в то время как UUID используется везде.
насколько уникален GUID?
128-бит достаточно большой и алгоритм генерации достаточно уникален что если 1,0000,000,000 GUIDs в во-вторых были произведены для 1 года вероятность дублировать будет только 50%. Или если каждый человек на Земле создается 600,000,000 там идентификаторы будет только 50% вероятности дубликат.
Как используются GUID?
GUID используются при разработке программного обеспечения как ключи базы данных, компонент идентификаторы, или где угодно else поистине уникальный идентификатор требуемый. GUID также используются для определить все интерфейсы и объекты в Программирование COM.
GUID — это «глобально уникальный идентификатор». Также называется UUID (универсальный уникальный идентификатор).
это в основном 128-битное число, которое генерируется таким образом (см. RFC 4112 http://www.ietf.org/rfc/rfc4122.txt), что делает практически невозможным создание дубликатов. Таким образом, я могу генерировать GUID без какой-либо сторонней организации, которая должна дать их мне, чтобы гарантировать, что они уникальны.
одно широко распространенное использование GUID в качестве идентификаторов для COM-сущностей в Windows (классы, typelibs, интерфейсы и т. д.). Используя GUID, разработчики могут создавать свои com-компоненты, не обращаясь в Microsoft за уникальным идентификатором. Несмотря на то, что идентификация com-сущностей является основным использованием GUID, они используются для многих вещей, которые нуждаются в уникальных идентификаторах. Некоторые разработчики генерируют GUID для записей базы данных, чтобы предоставить им ID, который можно использовать, даже если они должны быть уникальными во многих различных базах данных.
Как правило, вы можете думать о GUID как серийный номер, который может быть создан кем угодно в любое время, и они будут знать, что серийный номер будет уникальным.
другие способы получения уникальных идентификаторов включают в себя получение доменного имени. Чтобы обеспечить уникальность доменных имен, вы должны получить его от какой-либо организации (в конечном счете, управляемой ICANN).
потому что GUID могут быть громоздкими (с читаемой человеком точки зрения они представляют собой строку шестнадцатеричных чисел, обычно сгруппированных следующим образом: aaaaaaaa-bbbb-cccc-dddd-ffffffffffff), некоторые пространства имен, которым нужны уникальные имена в разных организациях, используют другую схему (часто основанную на доменных именах Интернета).
таким образом, пространство имен для пакетов Java по соглашению начинается с доменного имени orgnaization (reversed), за которым следуют имена, определенные в некоторой организации specfic. Например, пакет Java может быть назван:
это означает, что работа с коллизиями имен становится ответственность каждой организации.
пространства имен XML также уникальны аналогичным образом-по соглашению, кто-то, создающий пространство имен XML, должен сделать его » под » зарегистрированным доменным именем под их контролем. Например:
другой способ управления уникальными идентификаторами-для MAC-адресов Ethernet. Компания, которая делает карты Ethernet, должна получить блок адресов, назначенных им IEEE (я думаю, что это IEEE). В этом случае схема работала довольно хорошо, и даже если производитель завинчивает и выдает карты с дубликатами MAC-адресов, все будет работать нормально, пока эти карты не находятся в одной подсети, так как за пределами подсети для маршрутизации пакетов используется только IP-адрес. Хотя есть некоторые другие виды использования MAC-адресов, которые могут быть затронуты — один из алгоритмов генерации GUID использует MAC-адрес в качестве одного параметра. Этот метод генерации GUID не так широко используется, потому что он считается угрозой конфиденциальности.
одним из примеров схемы, чтобы придумать уникальные идентификаторы, которые не очень хорошо работали, были идентификаторы Microsoft для драйверов » VxD » в Windows 9x. Разработчики сторонних драйверов VxD должны были запросить у Microsoft набор идентификаторов для любых драйверов, написанных третьей стороной. Таким образом, Microsoft может гарантировать, что не было дубликатов идентификаторов. К сожалению, многие авторы драйверов никогда не беспокоились и просто использовали любой идентификатор в Примере VxD они использовались в качестве отправной точки. Я не уверен, сколько проблем это вызвало — я не думаю, что уникальность VXD ID была абсолютно необходима, но это, вероятно, повлияло на некоторые функции в некоторых API.
GUID или UUID (глобально против универсально) уникальный идентификатор, ну, уникальный идентификатор:) когда вам нужно что-то действительно уникальное сгенерированное машиной, есть библиотеки, чтобы получить его.
посмотреть GUID в Википедии для сведения.
Что касается того, когда вам не нужен GUID, это когда счетчик, который вы контролируете (так или иначе, как последовательный тип SQL или последовательность), увеличивается. Индексирование» текстового » значения (GUID в текстовой форме) или 128-битного двоичного значения (который GUID) намного дороже, чем целое число.
кто-то сказал, что они концептуально 128-битные случайные значения, и это по существу верно, но сделав небольшое чтение на UUID (GUID обычно относится к реализации Microsoft UUID), я вижу, что существует несколько разных версий UUID, и большинство из них на самом деле не являются случайными. Таким образом, можно создать UUID для машины (или что-то еще) и иметь возможность надежно повторить этот процесс, чтобы получить тот же UUID по дороге, что важно для некоторых приложения.
для меня легче думать о них как просто «128-битные случайные значения». По сути, так оно и есть. Есть некоторые алгоритмы для включения немного информации в несколько цифр вашего GUID (таким образом, случайная часть становится немного меньше), но все же они довольно большие почти случайные значения.
поскольку они такие большие, это очень маловероятно, что когда-либо будут созданы два GUID, которые одинаковы. Для всех практических целей каждый GUID когда — либо создавался является уникальным в мире.
Я оставлю это вам, чтобы выяснить, где их использовать, но в других ответах уже есть некоторые примеры. Пусть ваше воображение одичал. 🙂
может быть трудно понять из-за всей математики, которая идет за их генерированием. Думайте об этом как об уникальном id. Вы можете получить Visual Studio для создания одного для вас или .NET, если вы используете C# или одно из многих других приложений или веб-сайтов. Они считаются уникальными, потому что есть такой глупый маленький шанс, что вы увидите один и тот же дважды, что не стоит рассматривать.
128-битный уникальный идентификатор. Вы можете генерировать GUID отныне до заката, и вы никогда не будете генерировать один и тот же GUID дважды, и никто другой. Они используются много с COM.
как например чего-то вы использовали бы их для, мы используем их в одном из наших продуктов. Наши пользователи могут создавать категории и карты на различных устройствах. Мы хотим убедиться, что мы не путаем категорию, сделанную на одном устройстве, с категорией, созданной на другом, поэтому важно эти идентификаторы уникальны независимо от того, кто их генерирует, где и когда они генерируют. Поэтому мы используем GUID (на самом деле мы используем нашу собственную схему, используя 64-битные числа, но они похожи на GUID).
несколько лет назад я работал над системой ACD call center, где мы хотели собрать подробные записи вызовов из нескольких процессоров вызовов в одну базу данных. Я настраиваю столбец в MS SQL для создания GUID для ключа базы данных, а не с помощью системного последовательного идентификатора (столбец идентификаторов). Тогда это требовало установки значения по умолчанию в NewID (или генерации его в коде, но функция NewID () была более безопасной). Конечно, наличие большого значения для ключа может поднять несколько бровей, но я предпочел бы отказаться от пространства, чем рисковать столкновением.
Я не видел ни одного адреса, использующего GUID в качестве ключа базы данных, поэтому я подумал, что это может помочь узнать, что Вы тоже можете это сделать.
идентификатор GUID-глобальный уникальный идентификатор.
используйте его, когда вы хотите однозначно идентифицировать что-то в глобальном контексте.
GUID означает «глобальный уникальный идентификатор», и вы используете его, когда хотите иметь глобальный уникальный идентификатор.
в RSS-каналах, например, вы должны иметь GUID для каждого элемента в ленте. Таким образом, программа чтения ленты может отслеживать, прочитали ли вы этот элемент или нет. Без GUID было бы невозможно сказать.
GUID отличается от чего-то вроде идентификатора базы данных тем, что независимо от того, кто создает объект-вы, я, парень вниз улица — наши гиды будут всегда быть разные. Не должно быть конфликтов с использованием GUID.
вы также увидите термин UUID, который означает » универсальный уникальный идентификатор.- В сущности, между ними нет никакой разницы. UUID-более подходящий термин. GUID-это термин, используемый Microsoft.
Если вам нужно создать идентификатор, который должен быть уникальным в течение всего срока службы вашего приложения, вы используете GUID.
представьте, что у вас есть сервер с сеансами, если вы даете каждому сеансу идентификатор GUID, вы уверены, что он будет уникальным для каждого сеанса, когда-либо созданного вашим сервером. Это полезно для отслеживания ошибок.
одно особенно полезное приложение GUID, которое я нашел, использует их для отслеживания уникальных посетителей в webapps, где посетители анонимны (т. е. не вошли в систему или зарегистрированы).
на Википедия статья о GUIDs довольно ясно, для чего они используются — возможно, перефразирование вашего вопроса поможет — для чего вам нужен GUID?
Что такое guid-код (гуид) в системе «Меркурий»?
При оформлении ветеринарных электронных сопроводительных документов очень важно, чтобы при перемещении товара от производителя до получателя не возникло путаницы. Многие не могут оформить ВСД без ошибок, потому что неверно указывают товар или место назначения. Чтобы не было путаницы, в «Меркурии» существует код GUID.
Код GUID в «Меркурии» — что это?
GUID (Globally Unique Identifier), или глобальный уникальный идентификатор — это код, который состоит из 36 символов с учетом пробелов. Система «Меркурий» присваивает такой код хозяйствующим субъектам, площадкам и товарам.
Различают четыре уровня кода GUID для товаров:
1 уровень — тип продукции («пищевая продукция»);
2 уровень — продукцию («молоко и молочная продукция»);
3 уровень — вид продукции («творог»);
4 уровень — наименование номенклатуры товара (творог «Нежный» 9%).
Первые три уровня — это ветеринарные группы. Они основаны на сведениях из ТН ВЭД ЕЭС и контролируются Россельхознадзором.
Четвертый уровень — это справочник номенклатуры производителей и участников оборота. Именно код GUID четвертого уровня отображается в эВСД.
Как получить GUID продукции
Чтобы узнать «гуид» 3 или 4 уровня в «Меркурии», необходимо сделать следующее:
войти в личный кабинет подсистемы «Меркурий.ХС»;
выбрать обслуживаемое предприятие;
перейти в раздел «Справочники» — «Наименование продукции»;
нажать кнопку загрузки справа от заголовка «Список наименований продукции»;
в скачанном файле найти «Наименование вида продукции» — рядом в таблице будет указан код «гуид» 3 уровня;
«гуид» 4 уровня будет записан как «наименование номенклатуры продукции».
Как получить GUID предприятия, ХС и площадки
Чтобы посмотреть код предприятия, войдите в систему. На странице выбора обслуживаемого предприятия нажмите на кнопку с зеленой стрелкой, не выбирая предприятие.
Код «гуид» поможет избежать путаницы, если по одному юридическому адресу находятся несколько юридических лиц. Поэтому поставщики запрашивают код ХС и площадок у получателей.
Узнать «гуид» ХС или площадки можно в системе «Цербер». Для этого войдите в личный кабинет, а затем выберите в меню «Хозяйствующий субъект» или «Площадка». В строке «Глобальный идентификатор» будет указан код «гуид».
Как формируется GUID?
Что такое GUID или уникальный идентификатор объекта?
GUID (Globally Unique Identifier) — статический уникальный 128-битный идентификатор. Его главная особенность — уникальность, которая позволяет создавать расширяемые сервисы и приложения без опасения конфликтов, вызванных совпадением идентификаторов. Хотя уникальность каждого отдельного GUID не гарантируется, общее количество уникальных ключей настолько велико (2^128 или 3,4028*10^38), что вероятность того, что в мире будут независимо сгенерированы два совпадающих ключа, крайне мала.
GUID состоит из четырех частей разделенных символом тире и содержащих в сумме 32 символа, которые являются шестнадцатеричным представлением 16 байт (128 бит). Т.е. два символа в GUID (октет) – это один байт в шестнадцатеричном виде. Пример GUID: b0d4ce5d-2757-4699-948c-cfa72ba94f86
[1]
Из чего состоит guid?
Определяется типом:
— Random: Just use the system’s random-number generator to create a 128-bit number.
— Time-based: Create a GUID based on the current time.
— Hardware-based: Make a GUID with certain portions based on hardware features, such as the MAC address of a network card.
— Content-based (MD5 or SHA-1 hash of data): Create a GUID based on a hash of the file contents. Files with the same contents will get the same GUID.
[1]
Почему нельзя упорядочить по ссылке, если в ней содержится дата создания?
Как уже было описано, guid изначально был придуман для РАСПРЕДЕЛЕННЫХ систем, в которых ПРОБЛЕМА УНИКАЛЬНОСТИ идентификаторов решена полным ОТКАЗОМ ОТ АВТОИНКРЕМЕНТА в пользу СЛУЧАЙНЫХ чисел и специальных техник. GUIDы случайны и неповторяемы по определению и в этом его достоинство и недостаток. Например, в предопределенных элементах и произвольных идентификаторах используется Random GUIDs (Version 4). В "типизированных" же Time-Based GUIDs (Version 1).
И все-таки?
Random UUIDs вызывают деградацию операций вставки. У таких гуидов индексы получаются плохо кластеризованы, дерево поиска максимально широкое. Для обхода этого недостатка был придуман COMB Guid — Combined Guid for the combination of a timestamp. Поэтому когда используюся Time-Based GUIDs для первичных ключей, они получаются более сгруппированными, но никак не последовательными. "Механизм генерации ссылок обеспечивает только их уникальность. Возрастающая последовательность при их генерации не обеспечивается." (c) БГ
//infostart.ru/public/84177/
Можно ли вытащить время из гуида?
Можно. Но не нужно.
bdb62d89-cede-11e4-b12b-d4ae52b5e909
Алгоритм:
дата содержится в первых символах, bdb62d89-cede-11e4 которые нужно переставить задом наперед: 11e4-cede-bdb62d89
первый символ отбрасываем, убираем "лишние" знаки "-"(тире)
интервал в десятых долях микросекунд (HEX) получается равным: интервал16= 1E4CEDEBDB62D89
переводим его в десяничный интервал интервал10 = HexToDec(интервал16);
в результате получаем: интервал10 = 136 461 344 788 852 105
находим интервал в секундах: интервалСек = интервал10 / 10 000 000;
Делаем сдвиг даты от [3]
Почему части времени идут "задом-наперед"?
"Так сложилось" 😉
Например потому что guid’ы появились задолго до того, как до них добрались руки ietf и баз данных.
Или потому что платформа написана на C, а не на Java, а как мы знаем из асемблера архитектура x86 имеет little-endian byte order.
Или, как говорит википедия, использовалось 2 варианта: для передачи по сети "on-wire" "network" (big-endian) byte order, а для хранения "native" (little-endian) byte order.
В любом случая я не знаю как там было и можно только догадываться.
[2] [3]
Если отчет из одной конфигурации копипастой тащу в другую — ID сохранится его?(в моей его не было) (c) 2michael
Ответ: При копировании объекта из одной конфы в другую _копипастом_ внутренний гуид меняется!
НО: при сравнении объединении этого не видно!, так как происходит сопоставление по имени.
НО: это не касается и предопределённых данных! Если добавлять их вручную, а потом конфу разработки сравнить-объединить с боевой — возникнут дубли в справочнике!
В edt же есть режим сравнения только по guid.
Именно поэтому создание нового объекта желательно делать через сравнение-объединение, иначе будет замедление на больших конфигурациях. Подробнее в ИТС: https://its.1c.ru/db/metod8dev/content/2299/hdoc
При замене отчета в дереве конфигурации командой "Заменить на внешнюю обработку, отчет. " меняется ли внутренний идентификатор объекта (отчета)? (с) Pandoch upd:02.07.20
Ответ: Нет, гуид при замене из файла остаётся прежним
Другая вариация вопроса: Есть две разные конфы. Но в них есть одинаковый объект метаданных например документ "Покупка". Как можно получить внутренний идентификатор этого объекта в обеих базах, используемый в сравнении и объединении, чтобы удостовериться, что этот объект, не зависимо от имени, замениться, а не дублируется ? Как я понял ЗначениеВСтрокуВнутр() дает не тот ID который нужен мне.
Вообще, внутренний идентификатор объекта программно узнать нельзя, а увидеть его можно в выгрузке конфигурации в файлы, строка <Report uuid="1ce0ffe7-2218-4d9d-88d5-d3eec204bfff">:
При каждой выгрузке во внешний отчет/обработку guid генерируется заного. При загрузке из файла — востанавливается. Это позволяет хоть 10 раз выгрузить отчет/обработу во внешний файл, и каждый из этих файлов можно будет открыть параллельно в клиенте.
ЗначениеВСтрокуВнутр() выдает идентификатор прикладного типа, а не внутреннего объекта метаданных. Помимо внутреннего идентификатора у каждого объекта метаданных есть идентификаторы типов. Например ОтчетМенеджер.<Имя отчета> и ОтчетОбъект.<ИмяОтчета>:
Все типы имеют свои идентификаторы, но при загрузке через "Заменить на внешнюю обработку, отчет. " они, так же как и идентификатор метаданных, заменяются на текущие.
Например — загрузка в отчет ABCАнализПокупателей внешнего отчета ДебиторскаяЗадолжность.epf вызовет лишь добавление суффикса (такой отчет уже есть в конфигурации), а все идентификаторы остаются прежними.
Скрин до загрузки — после загрузки:
Идентификаторы не изменились.
Почему используется "перевернутый" формат UUID внутри 1с?
<Объект не найден> (26:80f408002771598b11e7a3f0a3a64c3b)
Не знаю. Знаю только что первая цифра соответствует имени таблицы в sql: Reference26 -> ВидыНоменклатуры
[1]
Есть же спецификация?
Есть.
Расшифровываю:
Timestamp — это 60-битное число, содержащее количество 100-наносекундных интервалов с 15 октября 1582 г.
Часть low обнуляется каждые 2^32 / 10^7 / 60
7 минут, часть mid через 1 год, часть hi сами представляете.
Version — старшие 4 бита в седьмом октете, содержат тип гуида.
0x0001 1 time-based version
0x0010 2 DCE Security version (POSIX UIDs)
0x0011 3 name-based version (MD5 hashing)
0x0100 4 randomly generated version
0x0101 5 name-based version (SHA-1 hashing)
Clock Sequence — используется чтобы избежать появления дубликатов, когда часы переводятся назад или меняется идентификатор узла. Если предыдущее значение счетчика известно — то увеличивается на единицу, иначе берется случайное число.
Node — содержит физический MAC-адрес сервера. Дада, проверьте ipconfig /all 😉
Примеры? Есть их у меня.
Мы же "программисты", накодим функции:
Проверим ссылку обычного документа:
Проверим ссылку, сформированную вручную:
Проверим работу счетчика "уникальности":
Можно даже так:
Какой мак-адрес у меня, вы уже знаете 😉
ps: под "упорядочить по ссылке" везде имеется ввиду сортировка в порядке создания ссылок и вообще в каком-либо порядке, отличном от сравнения в побитовом бинарном формате хранения бд.
Ну вот и все.
Надеюсь, теперь мысль о том, чтобы "упорядочить по ссылке", я из вас вытряхнул окончательно.