那么为何还要引入snowflake呢?
INT自增主键自增主键是办理主键天生的最大略方案,它有如下上风:
相对应的,它也有如下缺陷:

总结来说,INT自增主键在单机性能和主键严格递增上由很大的上风,但是在扩展性和分布式数据库上有较大限定
GUID主键GUID(全局唯一标识符,Globally Unique Identifier)为128位(16字节),它利用太网卡地址、纳秒级韶光、芯片ID码和许多可能的数字根据算法动态天生,理论上可以有2^128个结果,
以是产生2个相同的ID的几率非常小。
它的优点如下:
运用天生,解放做事器压力天生的ID可以做到全库唯一,方便数据库分库分表、数据导入缺陷也很明显:
16字节太长,摧残浪费蹂躏空间非顺序递增,增加数据库存储和检索开销在做数据库主键选则时,如果系统较小,业务逻辑相对大略,可以考虑利用自增主键;如果业务繁芜,涉及到分库分表分布式等,建议考虑GUID。如果认为GUID的缺陷太影相应用,
可以考虑立时开始重点先容的分布式ID天生算法 Snowflake
Snowflake是由Twitter提出并首先利用的分布式ID天生算法,利用它来天生分布式趋势递增的Id。
分布式Id有分布式系统的节点自己天生趋势递增主键非严格顺序递增的,而是根数韶光顺序递增,这在一定程度上担保了数据存储和索引的效率算法讲解总长度为64位长整型(8字节)
1位:首字节固定为0,来担保所有天生的数据都是正数
41位:第2到第42位共41字节,用于天生毫秒级韶光戳,打算大概(2^41−1)/(1000∗60∗60∗24∗365)=69 年,对付一样平常系统来说绝对够用。
10位: 第43位到第52位为事情机ID,可表示2^10=1024台设备,一样平常高5位表示机房Id(datacenterId),低5位表示事情节点ID(workid)
12位:第53位到第64位表示序列号,2^12-1=4095
综上算法,表示单机每毫秒可以供应4095个Id,所有机器每毫秒可天生40951024=4194304个Id。
它的优点如下:
运用天生,解放做事器压力天生的ID可以做到全库唯一,方便数据库分库分表、数据导入8字节,长整型,节省空间趋势递增,方便数据存储和查询