sschiau/Particle
GitHub: sschiau/Particle
一个基于 PHP 的 64 位非协调式分布式 ID 生成器,支持毫秒级时间戳、多机器部署和序列号,适用于分布式系统中生成全局唯一且时间有序的标识符。
Stars: 133 | Forks: 28
[](https://packagist.org/packages/sschiau/particle)
[](https://packagist.org/packages/sschiau/particle)
# Particle
#### 语言:PHP
#### 64位整型基于时间的 ID 生成器
### 非协调式
为了在数据中心内部和跨数据中心实现高可用性,生成 ID 的机器彼此之间不需要进行协调。
### 解决方案
* PHP(已在 v8.4.14 上测试)
* Particle ID(64 位)由以下部分组成:
* time(时间戳) - 42 位(毫秒精度,使用自定义 epoch)
* configured machine id(已配置的机器 ID) - 10 位 - 最多支持 1024 台机器
* sequence number(序列号) - 12 位 - 最多 4096 个随机数
### 系统时钟依赖
您应该使用 NTP 来保持系统时钟的准确性。
## 如何使用
#### 生成 Particle ID
将 particle 类中的 EPOCH 常量更改为今天的毫秒级 epoch 时间(13 位数字)
```
$machineID = 0; // Machine ID (aka Server ID no.)
Particle::generateParticle($machineID);
```
#### 从 Particle ID 获取时间(毫秒精度)
```
$particleID = '4611691166465789880';
Particle::timeFromParticle($particleID);
```
标签:64位ID生成器, Composer包, NTP时钟同步, OpenVAS, Packagist, PHP, 分布式ID, 后端开发, 唯一ID, 唯一标识符, 序列号, 数据中心, 数据库主键, 无协调, 时间基ID, 机器ID, 毫秒级时间戳, 雪花算法, 高并发