分表分库一般是你的业务并发高,或者数据量大的情况下进行业务拆分。但是分表后会带来一系列你想不到的问题,比如我们今天要讨论的分表分库后的 id 分配问题。

分表之前,你的数据表中的主键,可以设置为自动增长等。但是分表后,id 在所有分后的表中是不能重复的。举个例子,我的用户表,我一共分了 3 个表。那么 u1 中存在 id 为 1 的主键后,u2、u3 就不能使用相同的主键 id 了。因此,分表后,要达到每个表中的主键不能相同,而且效率还得得到保证。

这里我推荐几种做法,供大家参考。

1、每个表还是保持各自的自动增长,但要让它们增长的不一样。

具体做法就是,每个表配置不同的起始值。比如,u1 配置 auto_increment = 1,然后步长为 3。u2 配置起始值为 2,步长也为 3,u3 配置起始值为 3,步长也为 3。这样做了之后,主键 Id 都能够自动增长,且能够做到不重复。

2、借助 UUID、Mongo 的 ObjectId 等生成唯一主键 Id。

UUID 由于每个微服务系统生成的都不一样,因此可以考虑作为分表后的主键 Id 来使用。另外 Mongo 的 ObjectId 本身也是采用的 UUID,因此也可以用来做分表后的主键。但是,这两个的规律性都比较差。

3、借助开源的分布式 ID 生成器。

这类开源的 ID 生成器就比较多了,我前面也写过类似的文章《5 大分布式 ID 生成器优缺点简单对比》,还被不少人转载过。

比如,出名的 snowflake,它产生的 id 太长。但是效率非常的高,适合超高并发场景。

其他的如:Leaf、sharding-jdbc、uid-generator 都需要借助 DB 支持,也就是说需要另外的表来支持。

以上就是分表分库后,全局 ID 的生成策略。我这里讨论的比较简单,具体结合自己公司的业务进行调整或采用其他方案。

©著作权归作者所有:来自51CTO博客作者mob604756f06ed8的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 一键生成前后端代码,Mybatis-Plus代码生成器让我舒服了
  2. 玩转可迭代对象迭代器生成器
  3. 报表生成器FastReport .Net如何存储和加载报告
  4. FastReport报表生成器有关COM / ActiveX快速报告
  5. TensorFlow-手写数字识别(三)
  6. 实际测试内存在顺序IO和随机IO时的访问延时差异
  7. .NET报表生成器Stimulsoft Reports.Net 常问问题解答
  8. Java 生成随机数的 5 种方式,你知道几种?
  9. Python学习系列之 xrange和range的区别!

随机推荐

  1. 从0开始的Python学习019更多的Python内容
  2. gsutil - 正则表达式与替代不工作
  3. 第五十九节,模拟浏览器请求Python结合html
  4. LBP特征学习(附python实现)
  5. Python处理字符串
  6. 在管理页面中编辑M2M的两面
  7. 5月28日 python学习总结 CSS学习(二)
  8. 用python阐释工作量证明(proof of work)
  9. 008 Python基本语法元素小结
  10. 在python 3.3列表中查找最小值