-
-
Notifications
You must be signed in to change notification settings - Fork 0
Feature Sonyflake
github-actions[bot] edited this page Jul 15, 2026
·
1 revision
Альтернатива Snowflake от Sony: 39 бит десятимиллисекундных тиков, 8 бит последовательности, 16 бит машины. Меньше плотность генерации (256 за 10 мс), зато 174 года жизни и 65 536 машин.
use CloudCastle\Uuid\SonyflakeFactory;
$factory = new SonyflakeFactory(machineId: 1234);
$id = $factory->generate();
$id->toInt(); // BIGINT
$id->machineId(); // 1234
$id->sequence(); // 0..255 в пределах тика
$id->dateTime(); // момент (гранулярность 10 мс)
$factory->parse($чужойId); // разбор на поляЭпоха по умолчанию — 2014-09-01 UTC (как в оригинальном Go-Sonyflake), настраивается. Края — как у Snowflake: перенос в следующий тик без сна, откат часов — исключение.
- 65 536 машин без иерархии датацентров — проще раздавать идентификаторы узлов.
- Горизонт 174 года против 69 у Snowflake.
- 256 идентификаторов на 10 мс на машину — для сверхплотной генерации берите Snowflake.
- Большие парки мелких сервисов/устройств с умеренной частотой генерации.
- Пиковые вставки >25 600/с с одной машины — упрётесь в плотность тика.
flowchart LR
C["Часы"] -->|"39 бит тиков по 10 мс"| F[SonyflakeFactory]
M["machine 0..65535"] --> F
F -->|"sequence 8 бит"| ID["SonyflakeId (63 бита)"]
sequenceDiagram
participant A as Приложение
participant F as SonyflakeFactory
A->>F: generate()
F->>F: тик = мс от эпохи / 10
F->>F: тот же тик? → sequence + 1 (256 → тик + 1)
F-->>A: SonyflakeId
| Возможность | Uuid | godruoyi/php-snowflake | 🏆 Победитель |
|---|---|---|---|
| Раскладка Sony 39/8/16 | ✅ | ✅ | Паритет |
| Разбор на поля | ✅ | Uuid | |
| Отдельный типизированный VO | ✅ | ❌ | Uuid |
| PSR-20 часы | ✅ | Uuid |
CloudCastle Uuid · · PHP 8.1+
GitHub · Packagist · Releases · Discussions · Issues
Email · Telegram · VK · Сетка · 💜 Поддержать проект
Исходники Wiki — каталог wiki/ в репозитории (синхронизация через GitHub Actions)