您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

自增序列产生器的实现思路_MySQL

2025/1/20 7:25:50发布17次查看
bitscn.com
自增序列产生器的实现思路 l   需求u  实现mysql自带的字段值自动增长等效的功能;u  同一应用集群中数据库表的自增类型字段值具有全局唯一性;u  支持数据库级别的水平拆分表,同时还需要支持数据库内部的水平拆分表,其id值都来源于同一条配置记录;    l   存储设计序列产生器配置表increment_config结构:列名称 数据类型 是否为空 默认值 是否自增 主键/索引 备注id int unsigned n auto_increment primary key(id) 唯一标示,无意义table_name varchar(40) n unique index 表名称table_total tinyint unsigned n 0 标记数据库内分表的数量column_name varchar(40) n 字段名称start_value bigint unsigned n 1 开始值offset_value smallint unsigned n 10000 增长的步长flag tinyint n 0 0–正常;1–作废值gmt_modified timestamp n 数据库自动更新此值
 备注:1>. gmt_modified不由程序或人为主动去负责更新与填写,而是通过数据库的特性自动填写与更新;2>. 对于数据库内部的水平分表,即table_total0,则通过table_name+table_total组合区分;l   对存储表的操作    u  初始化的 sql对于需要用到序列产生器的表,则在此配置表中增加一条记录,例如:insert into(table_name,table_total,column_name,start_value,offset_value,flag)values(‘msg_’,23, ’msg_id’,1,10000,0);u  序列生成器操作的 sql程序每次获得序列区间段,以及更新相关数据值操作的事务的过程sql,假设msg_系列表对应的记录,在配置表中id=1。start  trnsaction;select  id, table_name,column_name,start_value,start_value+offset_value as end_valuefrom  increment_config  where id=1 for update;update  increment_config  set  start_value=start_value+offset_value where  id=1;commit;l   程序实现建议u  为提供序列产生的速度,而提高业务处理的性能。程序需要以拿序列区间的方式实现,而不是每次需要的时候,都要去数据库获得序列号值;u  程序在每次启动的时候,要初始化配置表中所有有效记录的序列区间值;u  当程序拿到的区间值start_value,经过一段时间使用后达到:start_value=end_value,处理步骤如下:    1>. 挂起当前的序列调用请求;2>. 做序列区间值获取的事务;3>. 把新获得区间值的start_value,给予挂起的调用请求;总结:每个区间值的最大值(end_value)始终作为当前期间的弃用值。   作者 snoopy7713 bitscn.com
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product