Skip to content

AlexanderGrom/php-snowflake

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PHP-Snowflake - Генератор идентификаторов по мотивам Twitter Snowflake

Генерирует уникальные числовые 64-битный идентификаторы. Генератор основывается на идеях Twitter Snowflake.

Данная библиотека используется мной на сайте DigHub.ru для генерации идентификаторов, для добавленных ссылок.

Предназначение

Snowflake требуется для генерации уникальных упорядоченных идентификаторов на разных машинах. Поддерживает 1023 машины (1-1023).

Детали

64-битный идентификатор состоит из:

  • 1bit под знак
  • 41bit под отметку времени в микросекундах
  • 10bit под номер машины, на котором идет генерация
  • 12bit под случайный номер выполнения в одну микросекунду

Обязательно загляните внутрь и измените значение переменной $epochTimeStamp. В ней содержится время в микросекундах начала эпохи генерации идентификаторов. Например, если задать отметку времени от 01.01.2015 00:00:00, то генератор сможет работать ещё почти 69 лет пока не будет переполнен. Чем отметка меньше, тем меньше времени осталось генератору. Рекомендуется установить её в отметку времени начала разработки проекта.

Вы можете расчитать время, например так:

$date_obj = DateTime::createFromFormat("d.m.Y H:i:s", "01.01.2015 00:00:00", new DateTimeZone("UTC"));
echo $date_obj->getTimestamp()*1000; // 1420070400000

Пример

require('snowflake.php');

$snowflake = new Snowflake();

$id = $snowflake->generate(1); // 1 - номер машины

echo $id;

-- THE END --

About

Generates 64bit ordered IDs similar to Twitter Snowflake

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages