目录
大表为什么不能用自增主键?
自增主键在分布式环境下不适用
- 资源浪费,因为自增主键必须连续
- 只能按范围法进行分片,ID的数量已固定,无法进行动态扩展
- 会产生尾部热点效应,即按范围法进行分片后,前面的分片已储存数据,最后一个分片的压力很大。Hash分片的效率更高。
UUID是好的替代方案吗?
不可以
- UUID是无序的
- 无序导致大量索引重排
- 主键有序的情况下,B+树只需要在原有的数据后面追加即可。
雪花算法
雪花算法(SnowFlake)推特公司分布式项目采用的ID生成算法
结构:符号位(1bit)+ 时间戳(41bit)+ 机器ID(10bit)+ 序列(12bit)
使用方法:直接调用JAR包
雪花算法需要注意时间回拨带来的影响,可能出现id重复的可能。