在分布式架构中,为什么不能使用自增ID或者UUID做主键,雪花算法优缺点?
在分布式架构中,为什么不能使用自增ID或者UUID做主键,雪花算法优缺点?
自增ID
- 如果基于主键分片,因为是自增,压力会集中在某个分片上
- 在分布式系统中,每个节点都有自己的id,数据库合并或者迁移的时候会造成ID冲突
UUID
由32个十六进制数字和4个连字符组成,不容易阅读,还浪费空间
全局唯一
由于是随机生成的,mysql底层是由B+树实现的,那么可能会有大量的数据移动,并且要改变指针的值,可能会导致索引分裂和磁盘碎片,影响查询性能
雪花算法
- 由63bit组成,分别是41bit时间戳,10bit机器编号,12bit序列号
- 基于unix时间戳,网上递增,理论上可以使用69年,通常时间戳可以采用当前时间减去服务器的启用时间
- 发生服务器时钟回拨,就可能导致产生相同的id
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.