3个不稳定版本
0.2.0 | 2020年9月13日 |
---|---|
0.1.1 | 2019年11月9日 |
0.1.0 | 2019年11月9日 |
#1124 在 数据库接口
7KB
71 行
WebeID
基于Snowflake的唯 一ID生成器,但适用于我们这些巫师
64位唯 一ID
定义
5字节 - 自定义纪元以来的时间(总共34.84年)。
1字节 - 节点ID(总共256个节点)
2字节 - 增量序列号
对此ID的假设
- 技术将迅速发展,到那时,128位ID(如GUID)在极大型数据库表中将具有可接受的性能。
- 这意味着我们不需要大的时间范围,我们很可能永远不会使用Snowflake和Sonyflake的“未来使用”位。
- 使用此ID的开发者是一个爱好者或小型生产者。
- 不太可能将ID创建扩展到成千上万的分布式机器。
- 使用这些ID不太可能超过34.84年的最大时间范围
优势
- 自定义纪元。
- 防止系统时间回滚的安全性。
- 防止序列溢出的安全性。
- 支持快速ID创建,每节点每毫秒最多可创建65536个ID。
- 数据部分可以在常见的8位字节边界上分割
- 解析部分不需要位操作。使用 ".to_be_bytes()" 转换为big-endian字节序列,然后使用切片索引0-4,5,6-7
- 当每秒生成许多ID时,前6个字节会非常重复(因此可压缩)
备注
- 我可以选择10ms的间隔,如Sony的Sonyflake,这将总时间范围提高到348.4年
- 每10ms更高的序列意味着ID将更具可压缩性。
- 然而;我的猜测是,未来的处理器,甚至在几年后,将能够超过10ms的最大序列范围(导致重复)。