Открыть сервис

GUID

GUID (сокращение от англ. Globally Unique Identifier — глобальный уникальный идентификатор) — это 128-битное (16-байтное) целое число, используемое в информатике для однозначной идентификации объектов, сущностей или ресурсов в распределённых компьютерных системах. Основное свойство GUID — практическая уникальность в пространстве и времени, что позволяет создавать идентификаторы без обращения к централизованному координатору. GUID является реализацией стандарта UUID (Universally Unique Identifier), описанного в спецификациях RFC 4122 и ISO/IEC 9834-8:2014.

История

Концепция глобально уникальных идентификаторов возникла в 1980-х годах в корпорации Apollo Computer (США) для операционной системы Domain/OS. Первоначально они назывались UUID и использовались для идентификации объектов в сетевой файловой системе. В 1990-х годах технология была адаптирована Open Software Foundation (OSF) для распределённой вычислительной среды (DCE). В 1997 году спецификация UUID была стандартизирована Internet Engineering Task Force (IETF) в документе RFC 4122.

В экосистеме Microsoft GUID появился в 1995 году с выходом Windows 95 и COM (Component Object Model). Microsoft использовала GUID для идентификации COM-классов, интерфейсов и библиотек типов. Впоследствии GUID стал широко применяться в .NET Framework (структура System.Guid), реестре Windows, базах данных (SQL Server, PostgreSQL) и многих других системах.

Структура и формат

GUID представляет собой 128-битное число, которое обычно записывается в виде 32 шестнадцатеричных цифр, сгруппированных в пять блоков, разделённых дефисами. Канонический формат выглядит так:

xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

Где:

Пример GUID: 550e8400-e29b-41d4-a716-446655440000

Версии GUID

Согласно RFC 4122, существует несколько версий UUID, которые различаются способом генерации:

ВерсияНазваниеМетод генерацииПрименение
v1Time-basedНа основе текущего времени (100-наносекундные интервалы с 15 октября 1582 года) и MAC-адреса сетевого интерфейсаСистемы, где важна хронологическая упорядоченность
v2DCE SecurityНа основе времени, идентификатора пользователя (UID) и группы (GID)Распределённые вычислительные среды DCE
v3Name-based (MD5)Хеширование MD5 от имени (например, URL) и пространства имёнСоздание детерминированных идентификаторов
v4RandomСлучайные или псевдослучайные числаНаиболее распространённая версия; используется в большинстве современных приложений
v5Name-based (SHA-1)Хеширование SHA-1 от имени и пространства имёнАналог v3, но с более стойким хешированием

Варианты

Старшие биты четвёртой группы определяют вариант (variant) GUID:

Свойства и характеристики

Уникальность

Вероятность коллизии (совпадения двух случайно сгенерированных GUID версии 4) оценивается как 1 на 5,3×10³⁶ для генерации 1 миллиарда идентификаторов в год. На практике это значение считается пренебрежимо малым для любых реальных систем. Для версии 1 уникальность гарантируется комбинацией времени и MAC-адреса (при условии, что часы не сбрасываются и MAC-адрес уникален).

Размер

GUID занимает 16 байт (128 бит) в памяти. В строковом представлении с дефисами — 36 символов (32 цифры + 4 дефиса). В фигурных скобках (стиль Microsoft) — 38 символов. В двоичном виде — 16 байт.

Преимущества

Недостатки

Применение

Базы данных

GUID широко используется в качестве первичных ключей (Primary Key) в реляционных СУБД, особенно в системах с репликацией (например, Microsoft SQL Server, PostgreSQL, Oracle). Это позволяет избежать конфликтов при вставке записей на разных узлах.

Компонентные модели

В COM (Component Object Model) и DCOM каждый COM-класс, интерфейс и библиотека типов идентифицируются GUID, называемыми CLSID, IID и LIBID соответственно. Реестр Windows хранит эти идентификаторы для регистрации компонентов.

Файловые системы

В NTFS (Windows NT File System) каждый файл и каталог имеет уникальный идентификатор — Object ID, который представляет собой GUID. Это используется для отслеживания перемещений файлов и работы службы теневого копирования томов (Volume Shadow Copy).

Сетевые протоколы

Программирование

Идентификация пользователей и сессий

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

Альтернативы

Целочисленные идентификаторы (int, bigint)

Snowflake (Twitter)

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

ULID (Universally Unique Lexicographically Sortable Identifier)

26-символьный строковый идентификатор на основе времени и случайных данных. Сочетает свойства GUID (уникальность) и упорядоченность по времени. Используется в некоторых современных системах (например, CockroachDB).

NanoID

Короткий (21 символ по умолчанию) URL-безопасный идентификатор, генерируемый из случайных символов. Меньше GUID, но вероятность коллизии выше при больших объёмах.

Интересные факты

Источники

  1. RFC 4122 — A Universally Unique IDentifier (UUID) URN Namespace (2005).
  2. ISO/IEC 9834-8:2014 — Information technology — Procedures for the operation of object identifier registration authorities — Part 8: Generation of universally unique identifiers (UUIDs) and their use as object identifier components.
  3. Microsoft Docs — GUID structure (Windows).
  4. PostgreSQL Documentation — UUID Type.
  5. Oracle Database Documentation — RAW and GUID Datatypes.
  6. Python Standard Library Documentation — uuid module.
  7. Java Platform, Standard Edition Documentation — java.util.UUID.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →