Генерирует уникальные числовые 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;