IT老齐架构300讲笔记(007) 为什么大厂在大表做水平分表时严禁使用自增主键

目录

大表为什么不能用自增主键?

自增主键在分布式环境下不适用

UUID是好的替代方案吗?

​雪花算法

专栏链接:IT老齐架构300讲笔记专栏


大表为什么不能用自增主键?

IT老齐架构300讲笔记(007) 为什么大厂在大表做水平分表时严禁使用自增主键_第1张图片

         自增主键在分布式环境下不适用

  1. 资源浪费,因为自增主键必须连续
  2. 只能按范围法进行分片,ID的数量已固定,无法进行动态扩展
  3. 会产生尾部热点效应,即按范围法进行分片后,前面的分片已储存数据,最后一个分片的压力很大。Hash分片的效率更高。

IT老齐架构300讲笔记(007) 为什么大厂在大表做水平分表时严禁使用自增主键_第2张图片

IT老齐架构300讲笔记(007) 为什么大厂在大表做水平分表时严禁使用自增主键_第3张图片

UUID是好的替代方案吗?

不可以

  1. UUID是无序
  2. 无序导致大量索引重排
  3. 主键有序的情况下,B+树只需要在原有的数据后面追加即可

IT老齐架构300讲笔记(007) 为什么大厂在大表做水平分表时严禁使用自增主键_第4张图片
雪花算法

 雪花算法(SnowFlake)推特公司分布式项目采用的ID生成算法


结构:符号位(1bit)+  时间戳(41bit)+  机器ID(10bit)+  序列(12bit)

IT老齐架构300讲笔记(007) 为什么大厂在大表做水平分表时严禁使用自增主键_第5张图片
使用方法直接调用JAR包

雪花算法需要注意时间回拨带来的影响,可能出现id重复的可能。

你可能感兴趣的:(架构,中间件,IT老齐架构300讲笔记,架构,数据库,笔记)