Что такое 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 - архитектурное решение, зависящее от нагрузки, требований к приватности и возможностей СУБД.