Skip to content

Feature Uuid v4

github-actions[bot] edited this page Jul 15, 2026 · 1 revision

🎲 UUID v4 — случайный

← Возможности · Главная · Сравнение

122 криптографически случайных бита — идентификатор «по умолчанию», когда не нужна сортируемость: непредсказуемый, без утечки времени и адреса узла.

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

Фабрика берёт 16 байт у источника случайности и одной строковой операцией проставляет биты версии и варианта — без посимвольных преобразований:

use CloudCastle\Uuid\Uuid;
use CloudCastle\Uuid\UuidFactory;

Uuid::uuid4();                        // шорткат через процессную фабрику
(new UuidFactory())->uuid4();         // или своя фабрика

$uuid = Uuid::uuid4();
$uuid->toString();                    // 'e2b0dd0e-…-…' (канон, нижний регистр)
$uuid->toBytes();                     // 16 байт для BINARY(16)
$uuid->version();                     // 4

Источник случайности подменяем — в тестах генерация детерминирована:

use CloudCastle\Uuid\Contract\RandomSourceInterface;

$factory = new UuidFactory(random: $мойИсточник); // RandomSourceInterface

Плюсы

  • Непредсказуемость: подходит для публичных идентификаторов и токенов сущностей.
  • Не раскрывает ни момент создания, ни машину.
  • Самый быстрый в генерации (см. сравнение).

Минусы

  • Несортируем: как первичный ключ B-Tree вызывает случайные вставки по всему индексу (для ключей БД берите UUID v7 или ULID).

✅ Рекомендуется

  • Публичные идентификаторы API, где нежелательна утечка порядка создания.
  • Идемпотентность запросов, ключи корреляции, трассировка.

❌ Антипаттерны

  • Кластеризованный первичный ключ большой таблицы — деградация вставок.
  • «Укорачивание» v4 обрезкой строки — берите NanoID нужной длины.

Схема фичи

flowchart LR
    R[RandomSourceInterface] -->|"bytes(16)"| F[UuidFactory]
    F -->|"маска версии/варианта<br/>одной операцией"| B[(16 байт)]
    B --> U[Uuid v4]
Loading

Жизненный цикл

sequenceDiagram
    participant A as Приложение
    participant F as UuidFactory
    participant R as RandomSource

    A->>F: uuid4()
    F->>R: bytes(16)
    R-->>F: случайные байты
    F->>F: (bytes & AND) | OR — версия 4 + вариант RFC
    F-->>A: Uuid
Loading

Сравнение с аналогами

Возможность Uuid ramsey/uuid symfony/uid 🏆 Победитель
Генерация v4 Паритет
Подменяемый источник случайности Uuid + ramsey/uuid
Скорость генерации до строки 🥇 🥉 🥈 Uuid

Clone this wiki locally