OneTimeSnowflakeId,进一步改进了梨花算法。
不依赖时间的梨花算法,Workerid应放在序号sequence的上一段,且应用SerialUniqueId算法,使ID不依赖于时间自动递增。
使用不依赖时间的梨花算法OneTimeSnowflakeId,应保证各节点大概均衡轮流出号,这样入库的ID会比较有序,因此每个段号内的序列号不能太多。
支持批获取ID号。可以一次取一批ID(即一个范围内的ID一次就可以获取了)。可以代替依赖DB的号段模式。
应用订单号等有安全要求的场景,可随机不定时获取一些批的号码不用即可。
考虑到2019年双11的峰值不超过55万笔/秒, 因此419w/s这个值已可以满足此苛刻要求;采用testSpeedLimit()检测平均值不超过419w/s这个值即可,而且在空闲时
段省下的ID号,还可以在高峰时使用。
+------+----------------------+----------+-----------+-----------+
| sign | time(second) | segment | workerid | sequence |
+------+----------------------+----------+-----------+-----------+
1 bit 31 bits 9 bits 10 bits 13 bits