由于我们的数据库在生产环境中要分片部署(MyCat),所以我们不能使用数据库本身的自增功能来产生主键值,只能由程序来生成唯一的主键值。我们采用的是开源的twitter( 非官方中文惯称:推特.是国外的一个网站,是一个社交网络及微博客服务) 的snowflake (雪花)算法。
(https://img-blog.csdnimg.cn/2019071310385531.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xfX01Z,size_16,color_FFFFFF,t_70)
默认情况下41bit的时间戳可以支持该算法使用到2082年,10bit的工作机器id可以
支持1024台机器,序列号支持1毫秒产生4096个自增序列id . SnowFlake的优点是,整
体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由数据中心ID和机器ID
作区分),并且效率较高,经测试,SnowFlake每秒能够产生26万ID左右