Разница между UUID4 и UUID7

Что такое UUID4 и UUID7

UUID4 - классический универсальный идентификатор, 128 бит, генерируется полностью случайно. Гарантирует глобальную уникальность, но не содержит информации о времени создания.

UUID7 - новый стандарт (RFC 9562, 2024). 128 бит: первые 48 бит кодируют UNIX-время (миллисекунды с эпохи 1970), остальные биты случайные. Сохраняет уникальность и добавляет встроенный timestamp.

Отличия UUID4 и UUID7

|Свойство                          | UUID4                    | UUID7
|----------------------------------|--------------------------|----------------
|Уникальность                      | Полная                   | Полная
|Сортировка по времени             | Нет                      | Да
|Индексы/вставка в БД              | Фрагментированные,       | Локализованные,     |                                    медленные                  быстрые insert
|Хранение                          | 128 бит                  | 128 бит
|Подходит для распределённых       | Да                       | Да
|систем
|Temporal queries / recent items   | Нет                      | Да

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

  • Производительность: последовательные вставки уменьшают фрагментацию B‑tree и повышают пропускную способность.

  • Сортировка по времени: можно делать запросы по времени без отдельного поля created_at.

  • Совместимость с распределёнными системами: каждая нода генерирует UUID7 независимо, сохраняется глобальная уникальность.

Минусы и потенциальные проблемы

  • Утечка времени создания: любой, кто видит UUID7, может узнать точное время создания записи. Критично для приватных данных или публичных API.

  • Совместимость: UUID7 ещё не везде поддерживается в СУБД и инструментах.

  • Размер: 128 бит, как и UUID4, больше, чем integer/BIGINT, что влияет на хранение и сетевой overhead.

Когда использовать

  • UUID4: если нужна максимальная анонимность, публичные API, чувствительные данные.

  • UUID7: если важна производительность, сортировка по времени, распределённые системы с высокими insert-ами, кластерные индексы.

Примеры генерации в PHP

require 'vendor/autoload.php'; // composer require ramsey/uuid

use Ramsey\Uuid\Uuid;

// UUID4
$uuid4 = Uuid::uuid4();
echo "UUID4: " . $uuid4->toString() . "\n";

// UUID7 (через библиотеку ramsey/uuid v5+ поддерживает time-ordered UUIDs)
$uuid7 = Uuid::uuid7();
echo "UUID7: " . $uuid7->toString() . "\n";

Заключение

UUID7 - эволюционное улучшение UUID4: сочетает глобальную уникальность и встроенное время создания. Идеален для масштабируемых систем и высоких нагрузок на вставку. Но важно учитывать требования к приватности и совместимости: утечка времени создания записи может быть нежелательной.

Выбор между UUID4 и UUID7 - архитектурное решение, зависящее от нагрузки, требований к приватности и возможностей СУБД.

Комментарии (0)

Войдите, чтобы оставить комментарий

Похожие статьи

Как установить Docker и Docker Compose на Ubuntu и RedHat системы (2025)

Подробная инструкция по установке Docker и Docker Compose на Debian-based и RedHat-based системы. Разбор всех команд по шагам, настройка GPG-ключей, добавление репозиториев, запуск сервиса, проверка и устранение типичных ошибок.

1 0 2 мин