合作机构:阿里云 / 腾讯云 / 亚马逊云 / DreamHost / NameSilo / INWX / GODADDY / 百度统计
上了微服务之后,很多原本很简单的问题现在都变复杂了,例如全局 ID 这事!
松哥最近工作中刚好用到这块内容,于是调研了市面上几种常见的全局 ID 生成策略,稍微做了一下对比,供小伙伴们参考。
当数据库分库分表之后,原本的主键自增就不方便继续使用了,需要找到一个新的合适的方案,松哥的需求就是在这样的情况下提出的。
接下来我们一起来捋一捋。
整体上来说,这个问题有两种不同的思路:
这两种思路又对应了不同的方案,我们一个一个来看。
数据库自己搞定,就是说我在数据插入的时候,依然不考虑主键的问题,希望继续使用数据库的主键自增,但是很明显,原本默认的主键自增现在没法用了,我们必须有新的方案。
数据库分库分表之后的结构如下图(假设数据库中间件用的 MyCat):
图片
此时如果原本的 db1、db2、db3 继续各自主键自增,那么对于 MyCat 而言,主键就不是自增了,主键就会重复,用户从 MyCat 中查询到的数据主键就有问题。
找到问题的原因,那么剩下的就好解决了。
我们可以直接修改 MySQL 数据库主键自增的起始值和步长。
首先我们可以通过如下 SQL 查看与此相关的两个变量的取值:
SHOW VARIABLES LIKE 'auto_increment%'
TOP