数据库表的数据重整方法和装置、介质和计算机设备制造方法及图纸

技术编号:36804718 阅读:7 留言:0更新日期:2023-03-09 00:07
本公开实施例提供一种数据库表的数据重整方法和装置、介质和计算机设备,所述方法包括:响应于对源表的DDL操作,读取所述源表中的数据;所述DDL操作能够改变所述源表的存储结构;对读取的数据进行排序,将排序后的数据按数据块写入目标表所在的数据库节点的磁盘,并记录各个数据块在目标表所在的数据库节点的磁盘的存储地址;在各个数据块均写入完成之后,基于各个数据块的存储地址生成所述目标表的SSTable,所述目标表的SSTable包括所述各个数据块。数据块。数据块。

【技术实现步骤摘要】
数据库表的数据重整方法和装置、介质和计算机设备


[0001]本公开涉及数据库
,尤其涉及数据库表的数据重整方法和装置、介质和计算机设备。

技术介绍

[0002]在数据库中,常常需要对数据库表的存储格式进行更改。在更改存储格式时,需要对数据库表进行数据重整,即,按照新的存储格式将数据库表中的数据重写一遍。相关技术中一般使用普通事务插入的方式进行数据重整,这种方式开销较大。

技术实现思路

[0003]第一方面,本公开实施例提供一种数据库表的数据重整方法,所述方法包括:响应于对源表的DDL操作,读取所述源表中的数据;所述DDL操作能够改变所述源表的存储结构;对读取的数据进行排序,将排序后的数据按数据块写入目标表所在的数据库节点的磁盘,并记录各个数据块在目标表所在的数据库节点的磁盘的存储地址;在各个数据块均写入完成之后,基于各个数据块的存储地址生成所述目标表的SSTable,所述目标表的SSTable包括所述各个数据块。
[0004]在一些实施例中,所述源表和所述目标表分别为不同的命名空间中的数据库表,且所述源表所在的命名空间与所述目标表所在的命名空间相互隔离;所述方法还包括:在基于各个数据块的存储地址生成所述目标表的SSTable之后,将所述目标表移动到所述源表所在的命名空间。
[0005]在一些实施例中,每个命名空间包括一个标志位,标志位不同的命名空间相互隔离;所述将所述目标表移动到所述源表所在的命名空间,包括:将所述目标表的名称更改为所述源表的名称;以及将所述目标表所在的命名空间的标志位更改为与所述源表所在的命名空间的标志位相同的标志位。
[0006]在一些实施例中,所述目标表所在的命名空间中的表为不可见状态。
[0007]在一些实施例中,所述方法还包括:在将所述目标表移动到所述源表所在的命名空间之后,删除所述源表。
[0008]在一些实施例中,所述目标表包括多个目标表副本,所述多个目标表副本位于分布式数据库中的多个数据库节点上,所述多个数据库节点包括主节点和至少一个备份节点;所述将排序后的数据按数据块写入目标表所在的数据库节点的磁盘,包括:将排序后的数据按数据块写入所述主节点的目标表副本,并将写入所述主节点的目标表副本的数据块写入所述主节点的重做日志;将所述主节点的重做日志同步到各个备份节点的重做日志,以使各个备份节点基于本节点的重做日志将排序后的数据按数据块写入本节点的磁盘。
[0009]在一些实施例中,所述源表包括多个第一分区,不同的第一分区存储在分布式数据库中不同的第一数据库节点上;所述对读取的数据进行排序,包括:分别读取各个第一数据库节点中存储的第一分区的数据;对从各个第一数据库节点读取的第一分区的数据进行
排序。
[0010]在一些实施例中,所述目标表包括多个第二分区,不同的第二分区存储在分布式数据库中不同的第二数据库节点上;所述将排序后的数据按数据块写入目标表所在的数据库节点的磁盘,包括:基于排序后的数据所属的第二分区,将排序后的数据按数据块写入目标表在的第二数据库节点的磁盘。
[0011]在一些实施例中,所述源表包括第一目标项,所述第一目标项包括所述源表的约束信息和/或外键;所述方法还包括:基于所述目标表的SSTable批量读取所述目标表中对应于所述第一目标项的第二目标项;每次读取的第二目标项对应于所述目标表中至少一种类型的数据;基于读取的第二目标项对应的数据生成校验向量;一个校验向量中包括的各个元素为同一类型的数据;基于每种类型的数据对应的约束信息对读取的第二目标项中对应类型的数据的校验向量进行校验。
[0012]在一些实施例中,所述源表包括触发器;所述将所述目标表的名称更改为所述源表的名称,包括:为所述源表和所述目标表设置写锁,并在所述源表和所述目标表均设置成功之后将所述目标表的名称更改为所述源表的名称;所述方法还包括:在所述目标表中创建触发器;其中,在所述目标表中创建触发器的操作、为所述源表设置写锁的操作、将所述目标表的名称更改为所述源表的名称的操作,以及将所述目标表所在的命名空间的标志位更改为与所述源表所在的命名空间的标志位相同的标志位的操作包括在相同的事务中。
[0013]在一些实施例中,所述目标表包括多个目标表副本,所述多个目标表副本位于分布式数据库中的多个数据库节点上,所述多个数据库节点包括主节点和至少一个备份节点;所述方法还包括:创建所述主节点的目标表副本的索引;将所述目标表副本的索引写入所述主节点的重做日志;将所述主节点的重做日志同步到各个备用节点,以使所述各个备用节点基于本节点的重做日志创建本节点的目标表副本的索引。
[0014]在一些实施例中,各个数据块在目标表所在的数据库节点的磁盘的存储地址记录在所述目标表所在的数据库节点的内存中的数据存储结构中。
[0015]第二方面,本公开实施例提供一种数据库表的数据重整装置,所述装置包括:读取模块,用于响应于对源表的DDL操作,读取所述源表中的数据;所述DDL操作能够改变所述源表的存储结构;记录模块,用于对读取的数据进行排序,将排序后的数据按数据块写入目标表所在的数据库节点的磁盘,并记录各个数据块在目标表所在的数据库节点的磁盘的存储地址;生成模块,用于在各个数据块均写入完成之后,基于各个数据块的存储地址生成所述目标表的SSTable,所述目标表的SSTable包括所述各个数据块。
[0016]第三方面,本公开实施例提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现任一实施例所述的方法。
[0017]第四方面,本公开实施例提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现任一实施例所述的方法。
[0018]本公开实施例在源表的存储结构改变时,采用排序的方式对源表中的数据进行排序,并将排序后的数据按数据块写入目标表所在的数据库节点的磁盘,由于每个数据块在磁盘中的存储地址都被记录下来了,因此,在各个数据块都写入完成之后,能够直接基于各个数据块的存储地址生成目标表的SSTable,无需采用普通事务方式写将数据写入内存,再
将内存中的数据写入磁盘,从而节省了数据重整过程的开销,提高了数据重整效率。
[0019]应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,而非限制本公开。
附图说明
[0020]此处的附图被并入说明书中并构成本说明书的一部分,这些附图示出了符合本公开的实施例,并与说明书一起用于说明本公开的技术方案。
[0021]图1是本公开实施例的数据库表的数据重整方法的流程图。
[0022]图2是本公开实施例的数据库节点的数据存储结构的示意图。
[0023]图3是本公开另一实施例的数据库节点的数据存储结构的示意图。
[0024]图4是本公开实施例的分布式数据库的示意图。
[0025]图5是本公开实施例的数据库表的数据重整装置的框图。
[0026]图本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种数据库表的数据重整方法,所述方法包括:响应于对源表的DDL操作,读取所述源表中的数据;所述DDL操作能够改变所述源表的存储结构;对读取的数据进行排序,将排序后的数据按数据块写入目标表所在的数据库节点的磁盘,并记录各个数据块在目标表所在的数据库节点的磁盘的存储地址;在各个数据块均写入完成之后,基于各个数据块的存储地址生成所述目标表的SSTable,所述目标表的SSTable包括所述各个数据块。2.根据权利要求1所述的方法,所述源表和所述目标表分别为不同的命名空间中的数据库表,且所述源表所在的命名空间与所述目标表所在的命名空间相互隔离;所述方法还包括:在基于各个数据块的存储地址生成所述目标表的SSTable之后,将所述目标表移动到所述源表所在的命名空间。3.根据权利要求2所述的方法,每个命名空间包括一个标志位,标志位不同的命名空间相互隔离;所述将所述目标表移动到所述源表所在的命名空间,包括:将所述目标表的名称更改为所述源表的名称;以及将所述目标表所在的命名空间的标志位更改为与所述源表所在的命名空间的标志位相同的标志位。4.根据权利要求2所述的方法,所述目标表所在的命名空间中的表为不可见状态。5.根据权利要求2所述的方法,所述方法还包括:在将所述目标表移动到所述源表所在的命名空间之后,删除所述源表。6.根据权利要求1所述的方法,所述目标表包括多个目标表副本,所述多个目标表副本位于分布式数据库中的多个数据库节点上,所述多个数据库节点包括主节点和至少一个备份节点;所述将排序后的数据按数据块写入目标表所在的数据库节点的磁盘,包括:将排序后的数据按数据块写入所述主节点的目标表副本,并将写入所述主节点的目标表副本的数据块写入所述主节点的重做日志;将所述主节点的重做日志同步到各个备份节点的重做日志,以使各个备份节点基于本节点的重做日志将排序后的数据按数据块写入本节点的磁盘。7.根据权利要求1所述的方法,所述源表包括多个第一分区,不同的第一分区存储在分布式数据库中不同的第一数据库节点上;所述对读取的数据进行排序,包括:分别读取各个第一数据库节点中存储的第一分区的数据;对从各个第一数据库节点读取的第一分区的数据进行排序。8.根据权利要求7所述的方法,所述目标表包括多个第二分区,不同的第二分区存储在分布式数据库中不同的第二数据库节点上;所述将排序后的数据按数据块写入目标表所在的数据库节点的磁盘,包括:基于排序后的数据所属的第二分区,将排序后的数据按数据块写入目标表在的第二数据库节点的磁盘。9.根据权利...

【专利技术属性】
技术研发人员:谢振江赵裕众
申请(专利权)人:北京奥星贝斯科技有限公司
类型:发明
国别省市:

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

1