UUID объяснён простыми словами: что это и зачем
Что такое UUID, версии (v1, v4, v7), коллизии, генераторы. Где используется в БД, API, файловых системах.
UUID (Universally Unique Identifier) — 128-битный идентификатор, который выглядит как длинная строка букв и цифр: f47ac10b-58cc-4372-a567-0e02b2c3d479. Используется везде, где нужен уникальный ID без централизованного источника.
Зачем нужен UUID
Когда несколько систем создают записи независимо (например, мобильный клиент и сервер), нужен ID, который точно не пересечётся с другими.
Простой автоинкремент (1, 2, 3) не подходит — два клиента могут создать запись с одним и тем же ID. UUID решает эту проблему: вероятность коллизии — 1 на квадриллион.
Версии UUID
v1: на основе MAC-адреса + времени. Утекает информация о машине.
v4: полностью случайный (122 бита энтропии). Самая распространённая версия.
v7: новинка 2024 — UUID с временной меткой в начале. Удобен для сортировки в БД, лучше для индексов.
Где используется
Базы данных: в качестве первичного ключа (PostgreSQL, MongoDB).
API: идентификация запросов, ресурсов.
Файловые системы: имена временных файлов (чтобы не пересекались).
Распределённые системы: Kafka, Cassandra, межсервисные запросы.
Сессии: токены сессий в веб-приложениях.
Как сгенерировать
Наш /qr-generator имеет вкладку UUID — генерирует v4 и v7.
В JavaScript: crypto.randomUUID() (встроено с 2021).
В Python: import uuid; uuid.uuid4().
В Postgres: расширение uuid-ossp, функция uuid_generate_v4().
UUID vs Auto-increment
UUID: + не пересекаются между системами. − длинный (16 байт), сложнее для индекса.
Auto-increment: + короткий (4-8 байт), быстрый индекс. − утечка информации (легко угадать соседние ID), плохо в распределённой системе.
Для современных приложений рекомендуется UUID v7 — сочетает лучшее из двух подходов.
Частые вопросы
Какова вероятность коллизии UUID v4?
1 на 2^122 ≈ 1 на 5 миллиардов миллиардов. Практически нулевая.
Можно ли использовать UUID в URL?
Технически да — UUID URL-безопасен. Но 36 символов в адресе выглядят громоздко. Часто используют base62-сжатие.
UUID v1 безопасен?
В нём раскрывается MAC-адрес генератора. Для публичных API лучше v4 или v7.