背景
现在的服务基本上都是分布式服务,经常会使用生成唯一主键的功能,如何在分布式服务上生成高效、不重复的主键呢
方案
UUID
#### 缺:32位有点长
* 无序
* 入库性能差,主要是涉及到B+tree的分裂
#### 优:开发简单
数据库自增主键
#### 缺:对数据库严重依赖 性能低
SnowFlake
介绍
twitter提供的一种分布式算法
一共64位bit
第一部分 1bit 始终为0 没有什么实际意义
第二部分 41bit 时间戳精确到毫秒,总共可以容纳140年的时间
第三部分 10bit 工作机器id 高位5bit是数据中心的 地位5bit是工作节点id
第四部分 12bit 自增 同一毫秒内最多可以生成多个全局唯一id 统一毫秒id的数据量 1024*4096
格式:
0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000
优缺点
优:
性能高