Mysql——分库分表后id冲突解决方案(即分布式ID的生成方案)
目录
-
- 一、分库分表后id冲突(分布式ID的冲突问题)
- 二、分库分表后id冲突解决方案(即分布式ID的生成方案)
-
- 2.1、第一种方案:设置自增主键的步长
-
- 2.1.1、设置自增主键的步长
- 2.1.2、设置自增主键的步长示例
- 2.1.3、设置自增主键的步长的缺点
- 2.2、第二种方案:通过数据库号段的方式
-
- 2.2.1、通过数据库号段的方式
- 2.2.2、通过数据库号段的方式缺点
- 2.2.3、通过数据库号段的方式缺点的解决方式
- 2.3、第三种方案:通过UUID的方式
-
- 2.3.1、通过UUID的方式
- 2.3.2、通过UUID的方式导致性能降低的解决方式
- 2.4、第四种方案:通过Redis生成ID方式
-
- 2.4.1、通过Redis生成ID方式
- 2.4.2、通过Redis生成ID方式的注意事项
- 2.5、第五种方案:通过雪花ID(snowflakelD)方式
-
- 2.5.1、雪花ID(snowflakelD)
- 2.5.2、雪花算法它为什么能够保证唯一性
- 2.5.3、雪花算法缺点
一、分库分表后id冲突(分布式ID的冲突问题)
- 分库分表后导致id冲突,如下图:
二、分库分表后id冲突解决方案(即分布式ID的生成方案)
2.1、第一种方案:设置自增主键的步长
2.1.1、设置自增主键的步长
- 设置自增主键的步长,在默认的情况下,自增主键它的步长是1,就会导致多张表主键都是一样的。
2.1.2、设置自增主键的步长示例
-
示例1:2张表的情况
第一张表,它的起始值是1,步长是2,那么它自身主键就会是1、3、5、7…
第二张表,它的起始值是2,步长是2,那么它自身主键就会是2、4、6、8…
-
示例2:3张表的情况
第一张表,它的起始值是1,步长是3,那么它自身主键就会是4、7、10…
第二张表,它的起始值是2,步长是3,那么它自身主键就会是5、8、11…
第三张表,它的起始值是3,步长是3,那么它自身主键就会是6、9、12…
-
示例3:4张表的情况
第一张表,它的起始值是1,步长是4,那么它自身主键就会是5、9、13…
第二张表,它的起始值是2,步长是4,那么它自身主键就会是6、10、14…
第三张表,它的起始值是3,步长是4,那么它自身主键就会是7、11、15…
第四张表,它的起始值是4,步长是4,那么它自身主键就会是8、12、16…