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

УИД — уникальный идентификатор объекта

УИД (англ. UID, Unique Identifier) — уникальный идентификатор, числовая или символьная последовательность, однозначно определяющая объект в пределах заданной области видимости. УИД назначается объекту при его создании и, как правило, не изменяется в течение жизненного цикла. Механизм широко применяется в операционных системах, базах данных, сетевых протоколах и программном обеспечении для однозначной адресации и ссылок между объектами.

Принцип работы

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

Стандартная форма, описанная в спецификациях RFC 4122 (IETF) и ISO/IEC 9834-8, представляет собой 128-битное значение, записываемое в шестнадцатеричном виде:

`` xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ``

Например: 550e8400-e29b-41d4-a716-446655440000. Первые 60 бит содержат временну́ю метку, 4 бита — версию схемы, 12 бит — вариант реализации, 62 бита — идентификатор узла и счётчик. Благодаря такой структуре генерация УИД возможна без центрального координатора, что критично для распределённых систем.

Виды идентификаторов

ТипОписаниеОбласть применения
UUID (RFC 4122)128-битный универсальный идентификаторСетевые протоколы, файловые системы
GUIDРеализация UUID от MicrosoftWindows, COM-объекты, реестр
UID (POSIX)Числовой идентификатор пользователяLinux, Unix
PIDИдентификатор процессаОперационные системы
inodeИдентификатор файлаФайловые системы Unix
Row IDИдентификатор строкиРеляционные базы данных

Применение в операционных системах

Пользователи и группы

В Unix-подобных системах каждый пользователь имеет числовой UID, а каждая группа — GID (Group ID). Стандарт POSIX закрепляет диапазон 0–65535, из них 0 зарезервирован за суперпользователем root. Служебные учётные записи занимают диапазон 1–999 (в современных дистрибутивах), обычные пользователи начинаются с 1000. Команды id, getent passwd и ls -n позволяют получить или отобразить числовые идентификаторы.

Процессы

Каждому запущенному процессу ядро назначает PID (Process ID) — уникальный в пределах текущего сеанса номер. PID используется для управления процессами (kill, ps, top), организации иерархии父子-процессов и именования файловых дескрипторов в /proc/<pid>/.

Файлы

В файловых системах семейства ext (ext2, ext3, ext4) каждый файл имеет inode — числовой индекс, под которым хранятся метаданные: права доступа, владелец, размер, расположение блоков данных. Имя файла — лишь «подпись» inode в каталоге; один и тот же файл, доступный по разным именам (жёсткие ссылки), имеет общий inode.

Применение в базах данных

В реляционных СУБД УИД выполняет роль первичного ключа там, где нежелателен централизованный счётчик: при репликации, слиянии данных из нескольких источников, распределённой вставке. PostgreSQL поддерживает тип UUID и расширение uuid-ossp для генерации. MySQL — тип BINARY(16) с функциями UUID() и UUID_SHORT(). MongoDB автоматически генерирует ObjectId — 96-битный идентификатор, встроенный в каждый документ.

Применение в сетевых протоколах

УИД используется для именования сессий, вызовов и объектов в протоколах SIP (Call-ID), DHCP (Client Identifier), X.509 (серийные номера сертификатов), а также в системах публикации-подписки (WebSocket, message queues). В контейнерных технологиях Docker и Kubernetes каждый объект — контейнер, под, том — получает 64-битный или 128-битный идентификатор.

Стандарты

СтандартОбласть
RFC 4122Универсальные UUID
ISO/IEC 9834-8Процедуры генерации UUID
IEEE 802MAC-адреса как компонент УИД
POSIX.1UID/GID пользователей и групп

Ограничения

Простые счётчики (auto-increment) не гарантируют уникальность при распределённой генерации, а УИД — гарантируют с вероятностью, превышающей 99,99 %. Однако 128-битный идентификатор занимает больше места в индексах, что может снижать производительность запросов по сравнению с 32-битным счётчиком. Для компромисса применяют 64-битные идентификаторы (Snowflake от Twitter, идентификаторы в ClickHouse).

Источники:

  • RFC 4122 — A Universally Unique IDentifier (UUID) URN Namespace
  • ISO/IEC 9834-8 — Information technology — Open Systems Interconnection — Procedures for real-time identification
  • Документация PostgreSQL — тип данных UUID
  • Документация POSIX (IEEE Std 1003.1) — User ID and Group ID
  • Документация Linux Kernel — /proc filesystem
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru