UUID
生成方式
- 简单、生成代码方便
- 性能较好,不存在性能问题
-
缺点
无排序,不可读,不能保证趋势递增
- 使用字符串存储,查询效率较低
-
UUID_SHORT()
使用数据库的 UUID_SHORT() 函数生成类似于 snowflake 的分布式ID
Redis
生成方式
优点
不依赖于数据库,灵活方便,性能优于数据库
-
缺点
需要引入新的组件,增加系统复杂度
- 需要编码和配置的工作量大
- 网络传输造成性能下降
snowflake
生成方式
符号位
最高位是符号位,为保证生成的ID是正数,故不使用,其值恒为0时间戳
用来记录时间戳的毫秒数,41位长度的时间戳可以保证使用69年。数据中心ID、机器ID
数据中心ID、机器ID一共10位,用于标识工作的计算机,在这里数据中心ID、机器ID各占5位序列号
最低的12位为序列号,可用于标识、区分同一个计算机在相同毫秒时间内的生产的ID优点
生成的分布式ID有较好的可读性,趋势递增的顺序缺点
时钟回拨可能会造成生成的分布式ID重复问题UIDGenertor
UIDGenertor 是百度基于snowflake算法实现的分布式ID生成器。UidGenerator以组件形式工作在应用项目中, 支持自定义workerId位数和初始化策略, 从而适用于docker等虚拟化环境下实例自动重启、漂移等场景。UidGenerator通过借用未来时间来解决sequence天然存在的并发限制; 采用RingBuffer来缓存已生成的UID, 并行化UID的生产和消费, 同时对CacheLine补齐,避免了由RingBuffer带来的硬件级「伪共享」问题. 最终单机QPS可达600万。
使用手册Leaf
官方介绍Seqsvr
文档介绍
