progamesigner/snowflakes

PHP中的去中心化k-顺序UUID生成器

v0.1.1 2018-04-24 04:26 UTC

This package is auto-updated.

Last update: 2024-09-21 19:50:24 UTC


README

Snowflakes是一个PHPComposer包,提供

  • 一个简单的128位ID生成器。
  • 将雪花ID转换为字符串的方法

Snowflakes生成128位和按时间排序的ID。它们在基础设施中的每个节点上运行,并将在需要时生成不冲突的ID,无需协调。

该项目灵感来自Twitter的SnowflakeDiscord的Go实现,但扩展到128位,且与Twitter的Snowflake不兼容。此库提供ID生成的基础,但不提供分发ID或节点ID协调的服务。

入门指南

安装

composer require progamesigner/snowflakes

用法

use ProGameSigner\Snowflakes\Node;

$node = new Node($worker_id);

$some_id = $node->next()->toString();

如果你正在使用Laravel,你可以使用此包附带的SnowflakesServiceProvider。使用config('services.snowflakes.id', $worker_id)配置worker id,并通过resolve('snowflakes')->next()获取雪花ID。

格式

雪花ID是128位宽,如下所示,从最高有效位到最低有效位

  • 时间戳(64位)-自纪元(1970年1月1日)以来的毫秒数
  • 节点ID(48位)-可配置的节点ID
  • 序列(16位)-通常为0,当同一毫秒内有多个请求时增加,当时钟前进时重置为0

系统时钟依赖性

你应该使用NTP来保持系统时钟的准确性。当检测到非单调时钟时,雪花将保留请求。要运行不移动时钟的NTP模式,请参阅http://wiki.dovecot.org/TimeMovedBackwards#Time_synchronization以获取有关如何执行此操作的提示。

相关项目

维护者

@progamesigner.

贡献

  1. 在GitHub上 Fork仓库
  2. 将项目克隆到您的机器上
  3. 更改提交到您的分支
  4. 您的作品推回到您的Fork
  5. 提交一个拉取请求,以便我可以审查您的更改

许可

MIT © 杨生汉