Уникальный генератор идентификаторов для первичного ключа распределённой базы данных.
Описание:
Dekuan/Dedid — это уникальный генератор идентификаторов, который используется для создания первичных ключей в распределённых базах данных. Алгоритм генератора основан на реализации Twitter Snowflake, но с возможностью использования не только случайных чисел, но и хеш-значений от заданной строки в последних 12 битах.
Структура бита:
64-битное целое число (bigint).
Позиция | Длина | Использование | Примечание |
---|---|---|---|
0 | 1 | Зарезервировано | Всегда равно 0 |
1–41 | 41 | Экранированное время (в миллисекундах) | От 0 до 69 лет |
42–46 | 5 | Количество дата-центров | От 0 до 31 |
47–51 | 5 | Номер узла в дата-центре | От 0 до 31 |
52–63 | 12 | Случайное число / хеш | От 0 до 4095 |
Битовые метки:
0 00000000 00000000 00000000 00000000 00000000 0 11111 00000 0000 00000000
00000000 00000000 00000000 00000000 00000000 00111110 00000000 00000000
00 00 00 00 00 3E 00 00
0 00000000 00000000 00000000 00000000 00000000 0 00000 11111 0000 00000000
00000000 00000000 00000000 00000000 00000000 00000001 11110000 00000000
00 00 00 00 00 01 F0 00
0 11111111 11111111 11111111 11111111 11111111 1 00000 00000 0000 00000000
01111111 11111111 11111111 11111111 11111111 11000000 00000000 00000000
7F FF FF FF FF C0 00 00
0 00000000 00000000 00000000 00000000 00000000 0 00000 00000 1111 11111111
00000000 00000000 00000000 00000000 00000000 00000000 00001111 11111111
00 00 00 00 00 00 0F FF
Использование:
Создание нового идентификатора:
$cDId = CDId::getInstance();
$nCenter = 0;
$nNode = 1;
$arrD = [];
$nNewId = $cDId->createId( $nCenter, $nNode, null, $arrD );
echo "new id = " . $nNewId . "\r\n";
print_r( $arrD );
Вывод:
new id = 114654484990270790
Array
(
[center] => 0
[node] => 1
[time] => 27335759399
[rand] => 3398
)
Создание нового идентификатора с использованием хеш-значения от указанной строки:
$cDId = CDId::getInstance();
$nCenter = 0;
$nNode = 15;
$sSrc = "dekuan";
$arrD = [];
$nNewId = $cDId->createId( $nCenter, $nNode, $sSrc, $arrD );
echo "new id = " . $nNewId . "\n";
print_r( $arrD );
Вывод:
new id = 114654631304370386
Array
(
[center] => 0
[node] => 1
[time] => 27335794283
[rand] => 2258
)
Анализ идентификатора для получения подробной информации:
$cDId = CDId::getInstance();
$arrId = $cDId->parseId( 114654631304370386 );
print_r( $arrId );
Вывод:
Array
(
[center] => 0
[node] => 1
[time] => 27335794283
[rand] => 2258
)
Установка:
# composer require dekuan/dedid
Для получения дополнительной информации посетите https://packagist.org/packages/dekuan/dedid.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )