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

本文探讨了利用数据库自增特性实现全局ID的方法,包括实现思路、优点和缺点。在数据库集群环境中,为避免ID冲突,需设置各节点自增步长不同,例如节点①自增1,3,5...,节点②自增2,4,6...。然而,这种方式存在单点故障、不易扩展和分库分表等问题。" 123410104,11537609,C++实现神奇幻方构造算法,"['算法', 'C++', '数学问题', '编程挑战', '数据结构']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

你觉得自己这辈子都学不会编程?相信自己!超基础Python课程,90分钟快速入门【自学Python教程合集】_哔哩哔哩_bilibili

实现思路

利用数据库自增或者序列号方式实现订单号
注意:在数据库集群环境下,默认自增方式存在问题,因为都是从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,不然生成步长的规则可能会发生变化。



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值