在分布式架构中,为什么不能使用自增ID或者UUID做主键,雪花算法优缺点?

自增ID

  • 如果基于主键分片,因为是自增,压力会集中在某个分片上
  • 在分布式系统中,每个节点都有自己的id,数据库合并或者迁移的时候会造成ID冲突

UUID

  • 由32个十六进制数字和4个连字符组成,不容易阅读,还浪费空间

  • 全局唯一

  • 由于是随机生成的,mysql底层是由B+树实现的,那么可能会有大量的数据移动,并且要改变指针的值,可能会导致索引分裂和磁盘碎片,影响查询性能

雪花算法

  • 由63bit组成,分别是41bit时间戳,10bit机器编号,12bit序列号
  • 基于unix时间戳,网上递增,理论上可以使用69年,通常时间戳可以采用当前时间减去服务器的启用时间
  • 发生服务器时钟回拨,就可能导致产生相同的id