麒麟v10 上部署 TiDB v5.1.2 生产环境优化实践
1143
2023-04-06
基于数据库的号段模式生成分布式ID
号段模式是当下分布式ID生成器的主流实现方式之一 ,号段模式可以理解成从数据库批量获取ID。将ID缓存在本地,提升效率。
比如每次从数据库获取ID时,就获取一个号段,如(1,1000],这个范围表示1000个ID,业务应用在请求提供ID时,只需要在本地从1开始自增并返回,而不需要每次去请求数据库,一直到本地自增到1000时,也就是当前号段已经用完了,才去数据库重新获取下一号段。
CREATE TABLE id_generator ( id int(10) NOT NULL, max_id bigint(20) NOT NULL COMMENT '当前最大id', step int(20) NOT NULL COMMENT '号段的步长', biz_type int(20) NOT NULL COMMENT '业务类型', version int(20) NOT NULL COMMENT '版本号', PRIMARY KEY (`id`))
biz_type : 代表不同业务类型
max_id : 当前最大的可用id
step : 代表号段的长度
version : 是一个乐观锁,每次都更新version,保证并发时数据的正确性
id | biz_type | max_id | step | version |
1 | 101 | 1000 | 2000 | 0 |
等这批号段ID用完,再次向数据库申请新号段,对max_id字段做一次update操作 , update max_id = max_id + step ,update成功则说明新号段获取成功,新的号段范围是(max_id,max_id+step)。
update id_generator set max_id = #{max_id+step}, version = version + 1 where version = # {version} and biz_type = XXX
由于多业务端可能同时操作,所以采用的版本号version乐观锁方式更新,这种分布式ID生成方式不强依赖于数据库,不会频繁的访问数据库,对数据库的压力小很多
参考地址
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。