一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

数据表切分方法、装置、电子设备及存储介质与流程

2021-10-30 02:59:00 来源:中国专利 TAG:切分 地说 电子设备 数据表 装置


1.本发明涉及数据库技术领域,更具体地说,涉及一种数据表切分方法、装置、电子设备及存储介质。


背景技术:

2.数据表切分是将一个数据量很大的大数据表物理地分解为多个更小、更可管理的分区。
3.一般数据库都有分区的特性,例如oracle、mysql,每个分区都是一个独立的对象,可以独自处理,也可以作为一个更大对象的一部分进行处理。通常的数据表切分方式有列表、范围、哈希、以及它们的组合几种,但无论哪种均无法同时满足通用性、均等性、性能三个方面要求。


技术实现要素:

4.有鉴于此,为解决上述问题,本发明提供一种数据表切分方法、装置、电子设备及存储介质,技术方案如下:
5.本发明一方面提供一种数据表切分方法,所述方法包括:
6.获取目标数据表;
7.生成所述目标数据表对应的切分登记表,所述切分登记表中包含多个标识组,一个标识组对应一个分区、用于存储所述目标数据表在相应分区下每条记录唯一的标识,每个标识组所存储的标识数量相同;
8.响应针对目标分区的访问指令,根据所述目标分区对应的标识组所存储的标识,访问所述目标数据表在所述目标分区下的多条记录。
9.优选的,所述生成所述目标数据表对应的切分登记表,包括:
10.根据目标分区数量创建所述目标数据表的切分登记表,所述切分登记表中标识组的数量与所述目标分区数量相同,每个标识组具有相应的组号,所述组号为正整数、且最大组号与所述目标分区数量的大小相同;
11.利用所述目标分区数量计算每个标识组对应的记录条数,所述记录条数与所述标识数量的大小相同;
12.全表查询所述目标数据表,计算当前所查询的目标记录对应的目标组号,所述目标组号是所述目标记录所属的记录号除以所述记录条数并向上取整的结果;
13.将所述目标记录唯一的标识存储至具有所述目标组号的标识组中,以将所述目标记录切分至具有所述目标组号的标识组对应的分区下。
14.优选的,所述利用所述目标分区数量计算每个标识组对应的记录条数,包括:
15.统计所述目标数据表中记录的总条数;
16.计算所述总条数除以所述目标分区数量的结果,并判断计算结果是否为正整数;
17.若是,则将计算结果作为每个标识组对应的记录条数;
18.若否,则报错,以更新所述目标分区数量,并返回执行所述根据目标分区数量创建所述目标数据表的切分登记表,这一步骤。
19.优选的,所述生成所述目标数据表对应的切分登记表之前,所述方法还包括:
20.对所述目标数据表执行业务操作。
21.优选的,所述目标数据表为oracle数据库中的数据表,相应的,所述标识为rowid;
22.所述目标数据表为mysql数据库/sqlserver数据库中的数据表,所述标识为主键。
23.本发明另一方面提供一种数据表切分装置,所述装置包括:
24.获取模块,用于获取目标数据表;
25.生成模块,用于生成所述目标数据表对应的切分登记表,所述切分登记表中包含多个标识组,一个标识组对应一个分区、用于存储所述目标数据表在相应分区下每条记录唯一的标识,每个标识组所存储的标识数量相同;
26.响应模块,用于响应针对目标分区的访问指令,根据所述目标分区对应的标识组所存储的标识,访问所述目标数据表在所述目标分区下的多条记录。
27.优选的,所述生成模块,具体用于:
28.根据目标分区数量创建所述目标数据表的切分登记表,所述切分登记表中标识组的数量与所述目标分区数量相同,每个标识组具有相应的组号,所述组号为正整数、且最大组号与所述目标分区数量的大小相同;利用所述目标分区数量计算每个标识组对应的记录条数,所述记录条数与所述标识数量的大小相同;全表查询所述目标数据表,计算当前所查询的目标记录对应的目标组号,所述目标组号是所述目标记录所属的记录号除以所述记录条数并向上取整的结果;将所述目标记录唯一的标识存储至具有所述目标组号的标识组中,以将所述目标记录切分至具有所述目标组号的标识组对应的分区下。
29.优选的,所述装置还包括:
30.业务模块,用于对所述目标数据表执行业务操作。
31.本发明另一方面提供一种电子设备,所述电子设备包括:至少一个存储器和至少一个处理器;所述存储器存储有程序,所述处理器调用所述存储器存储的程序,所述程序用于实现所述的数据表切分方法。
32.本发明另一方面提供一种存储介质,所述存储介质中存储有计算机可执行指令,所述计算机可执行指令用于执行所述的数据表切分方法。
33.相较于现有技术,本发明实现的有益效果为:
34.本发明提供一种数据表切分方法、装置、电子设备及存储介质,能够生成目标数据表的切分登记表,由于该切分登记表中的一个标识组对应一个分区、用于记录目标数据表在该分区下每条记录唯一的标识,因此本发明不依赖目标数据表中任何业务字段也能实现切分,切分登记表与目标数据表的业务无耦合,这就满足了通用性;此外,切分登记表中每个标识组所记录的标识数量相同,即每个分区下的记录条数相同,这就可以实现均等分区,满足了均等性;另外,通过分区访问保证了查询使用性能。本发明能够同时满足数据表切分的通用性、均等性和性能三个方面的要求,在数据库中实现对大数据表的快速均匀切分,以便应用程序进行分区的并行处理。
附图说明
35.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
36.图1为本发明实施例提供的oracle数据库的结构示意图;
37.图2为本发明实施例提供的数据表切分方法的方法流程图;
38.图3为本发明实施例提供的数据表切分方法的部分方法流程图;
39.图4为本发明实施例提供的场景示意图;
40.图5为本发明实施例提供的数据表切分装置的结构示意图。
具体实施方式
41.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
42.为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
43.数据表切分方案需要重点考虑通用性、均等性、性能三个方面。然而以下常用的几种数据表切分方案均无法同时满足三个方面的要求:
44.方案一:对大数据表中具备唯一性业务字段进行特征分组,然后进行多次查询,每次筛选符合特征的记录。例如:对数值型客户号进行取余数处理,查询一次余数为1的,查询一次余数为2的,以此类推。该方案的缺点是必须重复多次全表查询,效率低下,且需要表中有满足特征的业务字段。
45.方案二:利用oracle数据库的分区技术,对某个字段进行hash分区,数据被分散到不同的分区中,每一个物理分区就是一个独立的分组。该方案的缺点是数据表事先已经进行了分区定义,且依赖的分区字段不能达到绝对的数据均匀。
46.方案三:oracle数据库中,利用数据表物理文件的数据存储特点划分。参见图1所示的oracle数据库的结构,一个数据表由若干个区extent组成,一个区由若干个数据块block组成(一个数据块则对应磁盘上的若干条记录),一个区中的数据块是连续的、但是区与区不一定是连续的。通过oracle系统提供的数据字典,可以推导出每个区的最小rowid值和最大rowid值,最终就可以以区为最小粒度将大数据表进行切分。该方案不依赖于某个业务字段,但是结果仍然不能达到绝对的均匀。
47.对此,本发明实施例提供一种数据表切分方法,该方法可以应用于不同类型的数据库中,比如oracle数据库、mysql数据库、或者sqlserver数据库等,该方法的方法流程图如图1所示,包括如下步骤:
48.s10,获取目标数据表。
49.本发明实施例中,目标数据表即在数据库中指定待处理的数据表,该数据表属于大数据表。
50.在其他实施例中,为满足业务需求,本发明实施例在执行步骤s20之前,还可以对目标数据表执行业务操作,比如,可以对目标数据表中的某个字段进行排序或者业务运算。
51.s20,生成目标数据表对应的切分登记表,切分登记表中包含多个标识组,一个标识组对应一个分区、用于存储目标数据表在相应分区下每条记录唯一的标识,每个标识组所存储的标识数量相同。
52.对于数据表来说,其中每个记录都具有唯一的标识。对于oracle数据库中的数据表来说,其标识为rowid,oracle数据库内部通常就是使用rowid来访问数据,rowid就表明了所属的一条记录在oracle数据库中的具体物理位置。而在其他数据库中,比如mysql数据库和sqlserver数据库,其中数据表中的每条记录的标识为主键,能够达到与rowid同样的效果。
53.由于数据表中每条记录都具有唯一的标识,借助这一特点,本发明对数据表进行逻辑上的均匀切分,能够实现高效的均匀分组和访问、且对于数据表和数据库底层的文件没有任何改动。具体的,本发明实施例对于目标数据表生成相应的切分登记表,该切分登记表中一个标识组对应目标数据表的一个分区、能够存储目标数据表在该分区下的每条记录的标识,每个标识组存储的标识数量相同、即目标数据表在每个分区下的记录条数相同。切分登记表扮演着索引目标数据表的角色,这种设计不仅具有通用性,而且不与业务数据发生耦合。
54.具体实现过程中,步骤s20“生成目标数据表对应的切分登记表”可以采用如下步骤,方法流程图如图3所示:
55.s201,根据目标分区数量创建目标数据表的切分登记表,切分登记表中标识组的数量与目标分区数量相同,每个标识组具有相应的组号,组号为正整数、且最大组号与目标分区数量的大小相同。
56.本发明实施例中,可以预先为目标数据表指定分区的数量,即目标分区数量。基于该目标分区数量创建内容为空的切分登记表,该切分登记表中包含“标识组的组号”和“记录唯一的标识”两个字段,以oracle数据库为例,其切分登记表中“标识组的组号”为数值类型、“记录唯一的标识”为rowid类型。
57.举例来说,目标分区数量为4,这就表示为目标数据表指定4个分区,相应的,切分登记表中标识组的数量也为4,4个标识组的组号分别为组号1、组号2、组号3和组号4,当然一个组号对应目标数据表中4个分区中的一个,则组号1对应分区1、组号2对应分区2、组号3对应分区3、组号4对应分区4。切分登记表事先按照组号分区,将组号与分区号一一对应,以分区查询分组数据提供最佳性能。
58.s202,利用目标分区数量计算每个标识组对应的记录条数,记录条数与标识数量的大小相同。
59.本发明实施例中,为实现均等分区,就要求目标数据表在每个分区下的记录的条数相同。由此,可以统计目标数据表中记录的总条数,进而将总条数除以目标分区数量的计算结果作为每个标识组对应的记录条数,当然,由于一条记录具有唯一的标识,因此记录条数与标识组所存储的标识数量相同。
60.在一些实施例中,为保证目标数据表中所有记录都可以完整被划分至分区内,本发明实施例对于总条数除以目标分区数量的计算结果进一步判定其是否为正整数,如果
是,则将其作为记录条数,反之,如果不是,则报错,以更新目标分区数量,对目标分区数量重新赋值,并返回重新执行步骤s201。
61.s203,全表查询目标数据表,计算当前所查询的目标记录对应的目标组号,目标组号是目标记录所属的记录号除以记录条数并向上取整的结果。
62.本发明实施例中,记录号是数据库为查询目标数据表返回的记录分配的顺序编号,查询第一条记录所分配的记录号是1、查询第二条记录所分配的记录号是2、查询第三条记录所分配的记录号是3,以此类推,目标数据表中记录的总条数与最大记录号大小相同。此外,通过连续查询目标数据表中的记录,将连续记录的标识分配组号,这就实现分区下的记录是连续的,从而达到连续访问读取的目的。
63.对于当前所查询的目标记录,根据其所属的记录号除以记录条数并向上取整得出其组号,即目标组号。
64.s204,将目标记录唯一的标识存储至具有目标组号的标识组中,以将目标记录切分至具有目标组号的标识组对应的分区下。
65.本发明实施例中,将目标组号和目标记录唯一的标识存入切分登记表中,即将目标记录唯一的标识存储至具有目标组号的标识组中,由此目标记录即可以被逻辑切分至具有目标组号的标识组对应的分区下。举例来说,目标组号为1,则将目标记录唯一的标识存储至组号1的标识组中、且该目标记录被划分至分区1。
66.s30,响应针对目标分区的访问指令,根据目标分区对应的标识组所存储的标识,访问目标数据表在目标分区下的多条记录。
67.参见图4所示的场景示意图,目标数据表为oracle数据库中的一个大数据表,其中有n条记录,每个分区下的记录的条数为3,n=3m。第一条、第二条和第三条记录被切分至分区1,第四条、第五条和第六条记录被切分至分区2、第七条、第八条和第九条记录被切分至分区3,
……
,第n

2条、第n

1条和第n条记录被切分至分区m。以分区1、分区2和分区3来说明:
68.第一条、第二条和第三条记录的rowid被存储至组号1的标识组,第四条、第五条和第六条记录的rowid被存储至组号2的标识组,第七条、第八条和第九条记录的rowid被存储至组号3的标识组。此时,响应针对目标分区的访问指令,以分区2作为目标分区为例,通过查询组号2的标识组所存储的rowid,能够确定并访问目标数据表在分区2下的三条记录,即第四条、第五条和第六条记录,具体可以通过sql语句联接目标数据表以获得第四条、第五条和第六条记录的数据。通过分区访问保证查询使用功能。当然,基于此,应用程序可以进行分区的并行处理。
69.具体来说,通过均匀切分大表数据将数据逻辑分区,可以为并行处理提供条件。在批处理过程中,针对总条数达到一百万的大数据表来说,单线程依次处理每条记录将变得无法接受,例如:每条记录花费0.1秒,共计需花费100000s,合计27.7小时。而采用本发明首先对大数据表进行均匀切分,然后同时开启10个线程同时处理,假设切分过程需要10分钟(实际情况可能更少),预计10个线程将在2.77小时后同时结束,则批处理总共只需花费2.93小时,效果已经非常明显。
70.本发明实施例提供的数据表切分方法,能够生成目标数据表的切分登记表,由于该切分登记表中的一个标识组对应一个分区、用于记录目标数据表在该分区下每条记录唯
一的标识,因此本发明不依赖目标数据表中任何业务字段也能实现切分,切分登记表与目标数据表的业务无耦合,这就满足了通用性;此外,切分登记表中每个标识组所记录的标识数量相同,即每个分区下的记录条数相同,这就可以实现均等分区,满足了均等性;另外,通过分区访问保证了查询使用性能。本发明能够同时满足数据表切分的通用性、均等性和性能三个方面的要求,在数据库中实现对大数据表的快速均匀切分,以便应用程序进行分区的并行处理。
71.基于上述实施例提供的数据表切分方法,本发明实施例则对应提供执行上述数据表切分方法的装置,该装置的结构示意图如图5所示,包括:
72.获取模块10,用于获取目标数据表;
73.生成模块20,用于生成目标数据表对应的切分登记表,切分登记表中包含多个标识组,一个标识组对应一个分区、用于存储目标数据表在相应分区下每条记录唯一的标识,每个标识组所存储的标识数量相同;
74.响应模块30,用于响应针对目标分区的访问指令,根据目标分区对应的标识组所存储的标识,访问目标数据表在目标分区下的多条记录。
75.可选的,生成模块20,具体用于:
76.根据目标分区数量创建目标数据表的切分登记表,切分登记表中标识组的数量与目标分区数量相同,每个标识组具有相应的组号,组号为正整数、且最大组号与目标分区数量的大小相同;利用目标分区数量计算每个标识组对应的记录条数,记录条数与标识数量的大小相同;全表查询目标数据表,计算当前所查询的目标记录对应的目标组号,目标组号是目标记录所属的记录号除以记录条数并向上取整的结果;将目标记录唯一的标识存储至具有目标组号的标识组中,以将目标记录切分至具有目标组号的标识组对应的分区下。
77.可选的,用于利用目标分区数量计算每个标识组对应的记录条数的生成模块20,具体用于:
78.统计目标数据表中记录的总条数;计算总条数除以目标分区数量的结果,并判断计算结果是否为正整数;若是,则将计算结果作为每个标识组对应的记录条数;若否,则报错,以更新目标分区数量,并返回执行根据目标分区数量创建目标数据表的切分登记表,这一步骤。
79.可选的,上述装置还包括:
80.业务模块,用于对目标数据表执行业务操作。
81.可选的,目标数据表为oracle数据库中的数据表,相应的,标识为rowid;
82.目标数据表为mysql数据库/sqlserver数据库中的数据表,标识为主键。
83.需要说明的是,本发明实施例中各模块的细化功能可以参见上述数据表切分方法实施例对应公开部分,在此不再赘述。
84.基于上述实施例提供的数据表切分方法,本发明实施例则对应提供一种电子设备,电子设备包括:至少一个存储器和至少一个处理器;存储器存储有程序,处理器调用存储器存储的程序,程序用于实现数据表切分方法。
85.基于上述实施例提供的数据表切分方法,本发明实施例则对应提供一种存储介质,存储介质中存储有计算机可执行指令,计算机可执行指令用于执行数据表切分方法。
86.以上对本发明所提供的一种数据表切分方法、装置、电子设备及存储介质进行了
详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
87.需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
88.还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备所固有的要素,或者是还包括为这些过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
89.对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献

  • 日榜
  • 周榜
  • 月榜