УИД — уникальный идентификатор объекта¶
УИД (англ. 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 от Microsoft | Windows, 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 802 | MAC-адреса как компонент УИД |
| POSIX.1 | UID/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
