Skip to content

Comparison

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

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

Сравнение CloudCastle Uuid с пятью аналогами: ramsey/uuid, symfony/uid, robinvdvleuten/ulid, hidehalo/nanoid-php, godruoyi/php-snowflake. Таблица возможностей генерируется из tools/features-data.php (composer docs:features), числовые бенчмарки — из composer compare (composer docs:comparison), уровни качества — из конфигов пакета.

Возможности

Сгенерировано из tools/features-data.php (факты о поддержке). Легенда: ✅ полностью · ⚠️ частично · 🔌 адаптер · ❌ нет · — неприменимо.

Версии UUID (RFC 9562)

Функция Uuid ramsey/uuid symfony/uid robinvdvleuten/ulid hidehalo/nanoid-php godruoyi/php-snowflake 🏆 Победитель
UUID v1 — время Григория + узел Паритет
UUID v2 — DCE Security (домен + локальный ID) Uuid + ramsey/uuid
UUID v3 / v5 — имя в пространстве имён (MD5/SHA-1) Паритет
UUID v4 — случайный Паритет
UUID v6 — переупорядоченное время (сортируемый v1) Паритет
UUID v7 — миллисекунды Unix (сортируемый) Паритет
UUID v8 — пользовательские 122 бита Паритет
Nil и Max UUID Паритет
Монотонность v7 в пределах миллисекунды Паритет

Формы сериализации UUID

Функция Uuid ramsey/uuid symfony/uid robinvdvleuten/ulid hidehalo/nanoid-php godruoyi/php-snowflake 🏆 Победитель
Каноническая 8-4-4-4-12 Паритет
16 сырых байт (BINARY-хранение) Паритет
Hex-строка (32 символа) Паритет
Base58 (22 символа) Uuid + symfony/uid
Base32/Crockford — форма ULID (26 символов) Uuid + symfony/uid
URN «urn:uuid:…» Uuid + ramsey/uuid
Десятичное 128-битное число Uuid + ramsey/uuid
GUID Microsoft (little-endian поля) Uuid + ramsey/uuid
Фигурная форма «{uuid}» ⚠️ Uuid
Умный fromString() — любая форма по длине Uuid + symfony/uid
Интроспекция: версия, вариант, метка, узел, последовательность ⚠️ Uuid + ramsey/uuid

ULID

Функция Uuid ramsey/uuid symfony/uid robinvdvleuten/ulid hidehalo/nanoid-php godruoyi/php-snowflake 🏆 Победитель
Генерация ULID Паритет
Монотонный режим в пределах миллисекунды Uuid + symfony/uid
Бинарная форма 16 байт Uuid + symfony/uid
Метка времени из ULID Паритет
Мост ULID ↔ UUID (байты 1:1) Uuid + symfony/uid
Верхний и нижний регистр вывода ⚠️ Uuid + robinvdvleuten/ulid
Nil и Max ULID Uuid + symfony/uid

NanoID

Функция Uuid ramsey/uuid symfony/uid robinvdvleuten/ulid hidehalo/nanoid-php godruoyi/php-snowflake 🏆 Победитель
Генерация NanoID (стандартный алфавит) Паритет
Произвольный алфавит и длина Паритет
Несмещённая отбраковочная выборка Паритет
Валидация алфавита (дубликаты, мультибайт) Uuid

Snowflake и Sonyflake

Функция Uuid ramsey/uuid symfony/uid robinvdvleuten/ulid hidehalo/nanoid-php godruoyi/php-snowflake 🏆 Победитель
Snowflake (раскладка Twitter 41/5/5/12) Паритет
Sonyflake (раскладка Sony 39/8/16) Паритет
Разбор идентификатора на поля Паритет
Настраиваемая эпоха Паритет
Обнаружение отката часов без ожидания ⚠️ Uuid
Перенос при переполнении последовательности без сна ⚠️ Uuid

Тестируемость и источники

Функция Uuid ramsey/uuid symfony/uid robinvdvleuten/ulid hidehalo/nanoid-php godruoyi/php-snowflake 🏆 Победитель
PSR-20 часы во всех временных генераторах ⚠️ ⚠️ Uuid
Подменяемый источник случайности ⚠️ Uuid + ramsey/uuid + hidehalo/nanoid-php
Полный детерминизм в тестах (время + случайность) ⚠️ ⚠️ ⚠️ Uuid
Явный момент генерации (в прошлом/будущем) Uuid + ramsey/uuid + symfony/uid + robinvdvleuten/ulid
Единый контракт идентификаторов + сквозное сравнение ⚠️ Uuid
Экранирование управляющих символов в ошибках Uuid

Зависимости и вес

Функция Uuid ramsey/uuid symfony/uid robinvdvleuten/ulid hidehalo/nanoid-php godruoyi/php-snowflake 🏆 Победитель
Одна runtime-зависимость (psr/clock — только интерфейс) ⚠️ Uuid + robinvdvleuten/ulid + hidehalo/nanoid-php + godruoyi/php-snowflake
Без polyfill и брендированных зависимостей Uuid + robinvdvleuten/ulid + hidehalo/nanoid-php + godruoyi/php-snowflake
Все пять семейств идентификаторов в одном пакете ⚠️ Uuid

Строгость контроля качества

Сгенерировано из конфигов пакета (composer docs:sync). Уровни Uuid — из phpstan.neon / psalm.xml / infection.json.dist / phpmd.xml / deptrac.yaml; по аналогам — заявленный инструментарий из их composer.json (Composer-дистрибутивы аналогов конфигов качества не содержат, поэтому их уровни — «н/д»).

Контроль качества Uuid ramsey/uuid symfony/uid robinvdvleuten/ulid hidehalo/nanoid-php godruoyi/php-snowflake 🏆 Победитель
PHPStan ✅ level max + strict-rules ✅ (уровень: н/д) ✅ (уровень: н/д) Uuid (уровень задокументирован)
Psalm ✅ errorLevel 1 Uuid
Мутационное тестирование (Infection) ✅ minMSI 98% (факт: 0 выживших) Uuid
PHPMD ✅ 10 правил Uuid
Deptrac (архитектурные слои) ✅ 5 слоёв Uuid
Rector (dry-run в CI) Uuid
Код-стайл (PSR-12: phpcs + cs-fixer) ✅ (уровень: н/д) ✅ (уровень: н/д) Uuid (уровень задокументирован)
Покрытие строк (порог на файл) 98% (факт: 100%) н/д н/д н/д н/д н/д Uuid
Конфиги качества в дистрибутиве ✅ поставляются Uuid

Производительность

Методика: каждая пара «библиотека × сценарий» выполняется в отдельном php-процессе (память и состояние одной библиотеки не влияют на замеры другой), одинаковый цикл и число итераций у всех, Xdebug выключен, медиана из 7 прогонов.

Сгенерировано из composer compare (PHP 8.1.34). Правки в блоке будут перезаписаны.

Сценарий Uuid ramsey/uuid symfony/uid robinvdvleuten/ulid hidehalo/nanoid-php godruoyi/php-snowflake 🏆 Победитель
UUID v4: генерация до канонической строки 1 046 205 ops/s 610 239 ops/s 1 018 006 ops/s Uuid
UUID v7: генерация до канонической строки 371 194 ops/s 249 140 ops/s 314 415 ops/s Uuid
UUID v5: имя в пространстве DNS до строки 1 180 795 ops/s 169 722 ops/s 742 033 ops/s Uuid
UUID: разбор канонической строки в объект 1 881 107 ops/s 3 495 373 ops/s 1 542 031 ops/s ramsey/uuid
UUID: сериализация в Base58 267 701 ops/s 99 551 ops/s Uuid
UUID: разбор строки до 16 байт (для BINARY-хранения) 1 827 324 ops/s 1 986 579 ops/s 850 262 ops/s ramsey/uuid
ULID: генерация до канонической строки 344 694 ops/s 326 323 ops/s 275 941 ops/s Uuid
ULID: разбор строки в объект 549 310 ops/s 1 583 402 ops/s 1 758 765 ops/s robinvdvleuten/ulid
ULID: генерация до 16 байт (для BINARY-хранения) 541 988 ops/s 237 421 ops/s Uuid
ULID: порядковое сравнение двух значений 8 731 642 ops/s 7 952 315 ops/s Uuid
NanoID: генерация 21 символа 1 413 007 ops/s 530 293 ops/s Uuid
Snowflake: генерация до десятичной строки 552 896 ops/s 81 348 ops/s Uuid
Snowflake: разбор идентификатора на поля 3 017 522 ops/s 1 139 132 ops/s Uuid

Память — добавленная пиковая память процесса за сценарий (классы библиотеки + объекты + операции), меньше — лучше:

Сценарий Uuid ramsey/uuid symfony/uid robinvdvleuten/ulid hidehalo/nanoid-php godruoyi/php-snowflake 🏆 Победитель
UUID v4: генерация до канонической строки 0.0 КБ 163.7 КБ 0.0 КБ Паритет лидеров
UUID v7: генерация до канонической строки 0.0 КБ 164.5 КБ 0.0 КБ Паритет лидеров
UUID v5: имя в пространстве DNS до строки 0.0 КБ 218.8 КБ 0.0 КБ Паритет лидеров
UUID: разбор канонической строки в объект 0.0 КБ 0.0 КБ 0.0 КБ Паритет лидеров
UUID: сериализация в Base58 0.0 КБ 0.0 КБ Паритет лидеров
UUID: разбор строки до 16 байт (для BINARY-хранения) 0.0 КБ 0.0 КБ 0.0 КБ Паритет лидеров
ULID: генерация до канонической строки 0.0 КБ 0.0 КБ 0.0 КБ Паритет лидеров
ULID: разбор строки в объект 0.0 КБ 0.0 КБ 0.0 КБ Паритет лидеров
ULID: генерация до 16 байт (для BINARY-хранения) 0.0 КБ 0.0 КБ Паритет лидеров
ULID: порядковое сравнение двух значений 0.0 КБ 0.0 КБ Паритет лидеров
NanoID: генерация 21 символа 0.0 КБ 0.0 КБ Паритет лидеров
Snowflake: генерация до десятичной строки 0.0 КБ 0.0 КБ Паритет лидеров
Snowflake: разбор идентификатора на поля 0.0 КБ 0.0 КБ Паритет лидеров

Заключение

Плюсы cloudcastle/uuid

  • Единственный пакет со всеми пятью семействами: UUID 1–8 (включая v2 DCE), ULID, NanoID, Snowflake и Sonyflake — суперсет возможностей пяти библиотек.
  • PSR-20 часы и подменяемая случайность во всех генераторах — байт-в-байт воспроизводимая генерация в тестах; аналоги дают это частично или никак.
  • Девять форм сериализации UUID: читает и пишет «диалекты» и ramsey (URN, десятичная, GUID), и symfony (Base58, Base32) одновременно.
  • Байтовая модель значений: toBytes() мгновенный, сравнение и мост UUID↔ULID без перекодирования (генерация ULID до 16 байт — +128 % к symfony/uid).
  • Производительность: лидер в 11 из 13 сценариев (NanoID ×2.7, Snowflake ×6.8, Base58 ×2.7, v5 +59 % к соответствующим аналогам); память — 0.0 КБ добавленной пиковой во всех сценариях.
  • Жёсткая граница ввода: полная валидация всех форм, типизированные исключения, экранирование управляющих символов (безопасно для логов).
  • Одна runtime-зависимость — интерфейс psr/clock.

Минусы cloudcastle/uuid (честно)

  • «Разбор строки в объект»: ramsey/uuid и robinvdvleuten/ulid быстрее, потому что возвращают ленивые обёртки — строка сохраняется без немедленного декодирования и полной валидации. Мы сразу материализуем и проверяем 16 байт; это два единственных сценария из тринадцати, где пакет не первый.
  • Молодой пакет: меньше продакшн-пробега и экосистемных интеграций (Doctrine-типы ramsey, Symfony-нормализаторы uid).

Когда какую библиотеку выбирать

Ситуация Рекомендация
Несколько семейств идентификаторов, тестируемость времени, BINARY-хранение cloudcastle/uuid — всё в одном пакете
Doctrine-типы и глубокая legacy-экосистема вокруг UUID ramsey/uuid
Проект на Symfony, нужен только UUID/ULID со строковым выводом symfony/uid
Минимальный ULID без бинарной формы и валидации диапазона robinvdvleuten/ulid
Только NanoID hidehalo/nanoid-php
Snowflake с Redis/Laravel-резолвером последовательности godruoyi/php-snowflake

Clone this wiki locally