一种分布式数据库中针对序列的处理方法、装置及系统制造方法及图纸

技术编号:37974831 阅读:21 留言:0更新日期:2023-06-30 09:50
本发明专利技术公开了分布式数据库中针对序列的处理方法、装置及系统,其中处理方法包括:接收序列值获取请求;对序列对象元数据进行存储及缓存处理;对序列对象值进行存取及持久化处理;对序列对象值进行缓存、预分配及缓存加速处理;对本地序列进行缓存并发访问控制处理;以及全局保序控制处理,以及对序列对象版本进行检查。本方案可以提高分布式数据库系统生成序列值的效率,并且在严格模式下,保证分布式数据库系统生成全局保序的序列值。数据库系统生成全局保序的序列值。数据库系统生成全局保序的序列值。

【技术实现步骤摘要】
一种分布式数据库中针对序列的处理方法、装置及系统


[0001]本专利技术涉及分布式数据库
,具体涉及一种分布式数据库中针对序列的处理方法、装置及系统。

技术介绍

[0002]在传统数据库系统中,经常用到自增列或序列对象。此类数据库系统中对象一般是有序、单调递增、无重复值生成。通常,此类数据库对象用于为应用系统提供全局唯一的ID标识,用于生成用户id,订单id等,是数据库系统中用途最广泛的特性之一。
[0003]随着移动互联网的推广,各种数据呈指数级增长,传统的单机数据库已经无法满足当今日益增长的数据量的存储需求,分布式数据库系统慢慢开始替代单机系统。在一个分布式数据库系统中,各个计算节点均承载应用的业务请求。在此前提下,各个计算节点需要支持生成全局唯一的序列值。
[0004]由于分布式数据库系统承载的业务系统通常请求量较大,在分布式数据库系统中需要考虑生成序列值的性能开销。如果处理序列请求时需要在多个计算节点间进行一次消息同步,则可能无法满足业务需求。因此,需要根据分布式数据库的特点结合应用业务对序列值附加属性的要求进行合理设计,在满足需求的前提下降低序列值获取的响应延迟、提高分布式数据库系统中并发生成序列值的iops(每秒进行读写(I/O)操作的次数)。

技术实现思路

[0005]本专利技术提供一种分布式数据库中针对序列的处理方法、装置及系统,以解决现有技术中存在的上述问题。
[0006]本专利技术提供一种分布式数据库中针对序列的处理方法,该处理方法包括:
[0007]S100,接收序列值获取请求;
[0008]S200,对序列对象元数据进行存储及缓存处理;
[0009]S300,对序列对象值进行存取及持久化处理;
[0010]S400,对序列对象值进行缓存、预分配及缓存加速处理;
[0011]S500,对本地序列进行缓存并发访问控制处理;以及全局保序控制处理,以及对序列对象版本进行检查。
[0012]优选的,所述S100包括:
[0013]S101,序列值获取请求包含在SQL语句中,根据需返回的行数确定需要的序列值个数;
[0014]S102,当单并发获取单个序列值时,不考虑并发问题;
[0015]S103,当本地多并发获取序列值时,按请求的目标序列对象进行分组;如存在对某个序列对象的多个并发请求,对该序列上的多个并发请求做互斥、排队等待处理;
[0016]S104,当分布式数据库系统的多个节点同时接收序列值获取请求时,各个节点生成的序列值是全局唯一,当创建序列对象时设置了保序属性时,各个节点按照全局单调递
增保序。
[0017]优选的,所述S200包括:
[0018]S201,每个计算节点包含一份记录序列对象的元数据定义和对应的元数据定义缓存;序列对象在创建时通过分布式数据库内部的同步机制将序列对象的DDL定义同步到各个计算节点;其它计算节点收到创建序列的消息后,以slave角色在内部执行一次序列对象创建,并保存一份该对象的定义,同时加载到序列对象缓存;
[0019]S202,序列对象缓存用于语句的解析,参与判断语句中的序列值请求是否合法并提供访问加速;请求访问数据库序列对象时,直接检查该对象是否存在于序列对象缓存中;
[0020]S203,分布式数据库的计算节点在启动时,访问序列对象的持久化元数据记录,并将其加载到数据库对象缓存;在计算节点提供服务期间,序列对象缓存内某个序列的生命周期与该序列对象的生命周期一致,直至删除序列对象。
[0021]优选的,所述S300包括:
[0022]S301,序列对象的当前值存储并持久化在后端存储节点;访问或修改序列当前值时,通过元数据路由信息定位到后端存储节点;
[0023]S302,根据访问请求的类型对存储序列当前值的持久化内容加共享读锁或互斥写锁的同步原语;访问请求的类型包括:读取或修改;
[0024]S303,后端存储节点支持以序列对象为粒度、多个计算节点对此持久化记录的并发访问控制;实现方式包括:读写锁、数据库表内记录的行锁。
[0025]优选的,所述S400包括:
[0026]S401,序列值缓存与序列对象相对应,每个序列对象均对应一条序列值缓存记录;两者缓存储在各个计算节点的数据库实例的内存;
[0027]S402,序列值缓存采用预分配的方式从序列的合法值区间中设置一段独占的数值空间供当前节点独占使用;一旦某段数值空间被设置并赋给某个计算节点,则其他计算节点无法再使用该数值空间;若计算节点的数据库实例关闭或异常崩溃,序列值缓存中剩余未使用的预分配数值将被丢弃;
[0028]S403,计算节点的序列值缓存中记录预分配数值区间、数值区间中尚未使用的值以及辅助判断状态的标记;状态标记为STATUS_READY,直接检查预分配数值区间是否有可用值;如果有可用值,则直接使用该值作为本次序列请求的返回值并对应修改数值区间中尚未使用的值;如果无可用值,则预分配一段新的数值区间。
[0029]优选的,所述S500中对本地序列进行缓存并发访问控制处理包括:
[0030]S501,计算节点的序列对象缓存使用读写锁实现缓存对象的保护并提供并发访问控制;当创建、删除序列对象时,获取写锁并对缓存内的条目进行增删;SQL语句parse阶段查询、获取序列值、修改序列对象操作时只对序列对象缓存使用读锁;
[0031]S502,每个序列对象的缓存条目内部包含一个互斥锁,用于获取序列值、修改序列对象的并发控制;通过二级加锁模式减少锁等待,提高并发处理能力。
[0032]所述S500中全局保序控制处理包括:
[0033]S503,全局保序作为序列的属性在创建序列时被指定;
[0034]S504,当指定全局属性后,预分配数值区间时被强制分配一个可用数值,该数值被消费掉,新的序列请求到来时,重新进行一次预分配流程并强制读最新的当前值的操作;
[0035]所述S500中对序列对象版本进行检查包括:
[0036]S505,序列对象在创建时,为其分配一个初始版本号,默认值为0;
[0037]S506,每次修改该序列的属性成功后,对其版本号+1;当需要检查序列版本时,访问序列对象时记录序列当前的版本;在下次访问时,检查当前序列对象版本号是否与上次访问的版本号一致。
[0038]本专利技术还提供一种分布式数据库中针对序列的处理系统,该处理系统包括:
[0039]序列操作语法解析模块,用于解析创建、删除、修改序列的SQL语句;解析获取序列的SQL请求;解析数据库序列的运维语句;
[0040]序列操作执行模块,用于对分布式数据库系统的主要逻辑进行控制;
[0041]序列对象元数据管理模块,用于序列对象元数据信息的持久化和加载;在计算节点数据库实例启动期间,读取所有的序列对象持久化信息,加载到序列对象缓存;保证序列对象元数据信息和序列对象本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种分布式数据库中针对序列的处理方法,其特征在于,包括:S100,接收序列值获取请求;S200,对序列对象元数据进行存储及缓存处理;S300,对序列对象值进行存取及持久化处理;S400,对序列对象值进行缓存、预分配及缓存加速处理;S500,对本地序列进行缓存并发访问控制处理;以及全局保序控制处理,以及对序列对象版本进行检查。2.根据权利要求1所述的分布式数据库中针对序列的处理方法,其特征在于,所述S100包括:S101,序列值获取请求包含在SQL语句中,根据需返回的行数确定需要的序列值个数;S102,当单并发获取单个序列值时,不考虑并发问题;S103,当本地多并发获取序列值时,按请求的目标序列对象进行分组;如存在对某个序列对象的多个并发请求,对该序列上的多个并发请求做互斥、排队等待处理;S104,当分布式数据库系统的多个节点同时接收序列值获取请求时,各个节点生成的序列值是全局唯一,当创建序列对象时设置了保序属性时,各个节点按照全局单调递增保序。3.根据权利要求1所述的分布式数据库中针对序列的处理方法,其特征在于,所述S200包括:S201,每个计算节点包含一份记录序列对象的元数据定义和对应的元数据定义缓存;序列对象在创建时通过分布式数据库内部的同步机制将序列对象的DDL定义同步到各个计算节点;其它计算节点收到创建序列的消息后,以slave角色在内部执行一次序列对象创建,并保存一份该对象的定义,同时加载到序列对象缓存;S202,序列对象缓存用于语句的解析,参与判断语句中的序列值请求是否合法并提供访问加速;请求访问数据库序列对象时,直接检查该对象是否存在于序列对象缓存中;S203,分布式数据库的计算节点在启动时,访问序列对象的持久化元数据记录,并将其加载到数据库对象缓存;在计算节点提供服务期间,序列对象缓存内某个序列的生命周期与该序列对象的生命周期一致,直至删除序列对象。4.根据权利要求1所述的分布式数据库中针对序列的处理方法,其特征在于,所述S300包括:S301,序列对象的当前值存储并持久化在后端存储节点;访问或修改序列当前值时,通过元数据路由信息定位到后端存储节点;S302,根据访问请求的类型对存储序列当前值的持久化内容加共享读锁或互斥写锁的同步原语;访问请求的类型包括:读取或修改;S303,后端存储节点支持以序列对象为粒度、多个计算节点对此持久化记录的并发访问控制;实现方式包括:读写锁、数据库表内记录的行锁。5.根据权利要求1所述的分布式数据库中针对序列的处理方法,其特征在于,所述S400包括:S401,序列值缓存与序列对象相对应,每个序列对象均对应一条序列值缓存记录;两者缓存储在各个计算节点的数据库实例的内存;
S402,序列值缓存采用预分配的方式从序列的合法值区间中设置一段独占的数值空间供当前节点独占使用;一旦某段数值空间被设置并赋给某个计算节点,则其他计算节点无法再使用该数值空间;若计算节点的数据库实例关闭或异常崩溃,序列值缓存中剩余未使用的预分配数值将被丢弃;S403,计算节点的序列值缓存中记录预分配数值区间、数值区间中尚未使用的值以及辅助判断状态的标记;状态标记为STATUS_READY,直接检查预分配数值区间是否有可用值;如果有可用值,则直接使用该值作为本次序列请求的返回值并对应修改数值区间中尚未使用的值;如果无可用值,则预分配一段新的数值区间。6.根据权利要求1所述的分布式数据库中针对序列的处理方法,其特征在于,所述S500中对本地序列进行缓存并发访问控制处理包括:S501,计算节点的序列对象缓存使用读写锁实现缓存对象的保护并提供并发访问控制;当创建、删除序列对象时,获取写锁并对缓存内的条目进行增删;SQL语句parse阶段查询、获取序列值、...

【专利技术属性】
技术研发人员:娄帅卢浩
申请(专利权)人:北京万里开源软件有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1