基于数据库自增方式实现全局ID

上一篇 <<<分布式全局ID生成总览
下一篇 >>>基于UUID算法实现全局ID


实现思路

利用数据库自增或者序列号方式实现订单号
注意:在数据库集群环境下,默认自增方式存在问题,因为都是从1开始自增,可能会存在重复,应该设置每台不同数据库自增的间隔方式不同。

优点:

简单,代码方便,性能可以接受。
数字ID天然排序,对分页或者需要排序的结果很有帮助。

缺点:

不同数据库语法和实现不同,数据库迁移的时候或多数据库版本支持的时候需要处理。
在性能达不到要求的情况下,比较难于扩展。
在单个数据库或读写分离或一主多从的情况下,只有一个主库可以生成。有单点故障的风险。
分表分库的时候会有麻烦。

在数据库集群环境下,默认自增方式存在问题,因为都是从1开始自增,可能会存在重复,应该设置每台节点自增步长不同。

查询自增的步长

SHOW VARIABLES LIKE 'auto_inc%'

修改自增的步长

SET @@auto_increment_increment=10;

修改起始值

SET @@auto_increment_offset=5;

假设有两台mysql数据库服务器
节点①自增 1 3 5 7 9 11 ….
节点②自增 2 4 6 8 10 12 ….
注意:
在最开始设置好了每台节点自增方式步长后,确定好了mysql集群数量后,无法扩展新的mysql,不然生成步长的规则可能会发生变化。


推荐阅读:
<<<分布式全局ID生成总览
<<<基于UUID算法实现全局ID
<<<基于Twitter的snowflake(雪花)算法实现全局ID
<<<基于Redis生成全局ID

你可能感兴趣的:(基于数据库自增方式实现全局ID)