雪花算法的坑
雪花算法尽量不要模2或4 会导致id偏移到0区
雪花算法组成
正数统一为0|
时间戳0-0101-0000-1000-0010-1101-0101-0101-1010-1111-0010|
机房01100|
机器00111|
毫秒值碰撞0000-0000-0000
最后12位表示0位 (Math.pow(2, 12) - 1)=4095 一共4096个数
5位datacenterId和5位workerId表示各 0-31 一共32个数
存在问题
当分配id速率小时,同一毫秒只分配一个id则最后12位都是0,所以不存在2^0,故而雪花生成的id是2,4的倍数,取模偏移0区
数据量少时或者tps低时尽量避免取模2,4,如分片键
本文探讨了雪花算法在生成唯一ID时可能出现的问题,特别是在数据量较小或TPS(每秒事务处理量)较低的情况下,由于同一毫秒内可能只分配一个ID,导致ID为2和4的倍数,取模运算时会偏移到0区。因此,建议在使用雪花算法作为分片键时避免取模2或4,以防止数据分布不均。
2258

被折叠的 条评论
为什么被折叠?



