1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/dekuan-dedid

Клонировать/Скачать
README.md 3.8 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 01.12.2024 17:58 60361a8

Уникальный генератор идентификаторов для первичного ключа распределённой базы данных.

Описание:

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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/dekuan-dedid.git
git@api.gitlife.ru:oschina-mirror/dekuan-dedid.git
oschina-mirror
dekuan-dedid
dekuan-dedid
master