CN107807938A - 一种数据表的处理方法及装置 - Google Patents
一种数据表的处理方法及装置 Download PDFInfo
- Publication number
- CN107807938A CN107807938A CN201610815123.XA CN201610815123A CN107807938A CN 107807938 A CN107807938 A CN 107807938A CN 201610815123 A CN201610815123 A CN 201610815123A CN 107807938 A CN107807938 A CN 107807938A
- Authority
- CN
- China
- Prior art keywords
- subregion
- data
- tables
- computer
- tuples
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24553—Query execution of query operations
- G06F16/24558—Binary matching operations
- G06F16/2456—Join operations
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例提供一种数据表的处理方法及装置,涉及计算机技术领域,能够提高归并连接的效率。该处理方法包括:根据需要分区的数据表的数据量和计算机允许该数据表使用的最大内存容量,确定该数据表的预分区数m,m>0;根据该数据表的分区键的键值统计信息,确定该分区键的键值对应的n个区间,每个区间对应该数据表中的至少一个元组,分区键的键值统计信息用于表示该数据表中分区键的键值的分布规律,n为正整数,m≤n;根据数据表的预分区数m,确定数据表的实际分区数k,k为m向上取整后的值,k为n的约数;将该数据表中n个区间对应的元组写入k个分区,以将该数据表分为K个分区,每个分区包括n/k个区间对应的元组。
Description
技术领域
本发明实施例涉及计算机技术领域,尤其涉及一种数据表的处理方法及装置。
背景技术
数据表连接是数据库系统中的常用技术。数据表连接是指按照连接条件,将不同的数据表合并为一个数据表的过程。目前常用的数据表连接技术包括嵌套循环连接(nestloop join)、哈希连接(hash join)和归并连接(merge join)。
以归并连接为例,假设需要对数据量较大的两个数据表(例如每个数据表的数据量远大于计算机允许该数据表使用的最大内存容量,并且两个数据表分别为数据表A和数据表B)进行归并连接,那么通常需要对这两个数据表进行分区,然后再以每个分区为单位进行归并连接。具体的,首先确定对这两个数据表进行分区的分区数;然后再按照该分区数,将数据表A中的所有元组(数据表中的每一行称为一个元组)按照连接条件中的连接列的哈希值进行分区和排序,并按照该分区数,将数据表B中的所有元组也按照连接条件中的连接列的哈希值进行分区和排序,即对数据表A和数据表B进行分区和排序后,数据表A和数据表B的分区数是相同的;最后再分别将数据表A和数据表B中的各个依次分区读到计算机的内存中,并按照连接列进行归并连接。其中,连接列是指对两个数据表进行归并连接时,两个数据表中进行比较的列。
然而,上述归并连接方法中,由于对两个数据表进行分区的分区数相同,且是按照连接列的哈希值对数据表进行分区的,因此可能会导致某个数据表中的某个分区的元组数比较大,而当这些元组的数据量大于计算机允许该分区使用的最大内存容量时,可能会使得该分区无法被读入内存而导致需要对该分区继续进行进一步分区,如此可能会导致在归并连接中对数据表进行多次分区,从而降低了归并连接的效率。
发明内容
本申请提供一种数据表的处理方法及装置,能够提高归并连接的效率。
为达到上述目的,本申请采用如下技术方案:
第一方面,提供一种数据表的处理方法,该处理方法可以应用于计算机,该处理方法包括:根据需要分区的数据表的数据量和计算机允许该数据表使用的最大内存容量,确定该数据表的预分区数m;并根据该数据表的分区键的键值统计信息(该分区键的键值统计信息用于表示该数据表中该分区键的键值的分布规律),确定该分区键的键值对应的n个区间(n个区间中的每个区间对应该数据表中的至少一个元组);且根据该数据表的预分区数m,确定该数据表的实际分区数k,以及将该数据表中n个区间对应的元组写入k个分区,以将该数据表分为k个分区,k个分区中每个分区包括n/k个区间对应的元组。其中,m>0,m≤n,n为正整数,k为m向上取整后的值,且k为n的约数。
本申请中,一方面,由于数据表的预分区数是根据需要分区的数据表的数据量和计算机允许该数据表使用的最大内存容量确定的,因此可以使得分区后的数据表中的每个分区的元组均能被成功读入内存;另一方面,由于数据表的分区键的键值统计信息可以表示数据表中该分区键的键值的分布规律,因此根据该分区键的键值统计信息,确定该分区键的键值对应的n个区间后,再根据数据表的预分区数和该n个区间,确定数据表的实际分区数,然后再将数据表中每n/k个区间对应的元组写入k个分区中对应的分区,即将数据表中n个区间对应的元组写入k个分区,从而以将数据表分为K个分区,能够尽量保证分区键的键值相同的元组都集中在一个分区中。如此,采用本申请提供的数据表的处理方法对至少两个数据表进行分区后,由于该至少两个数据表中每个数据表的每个分区的元组均能被成功读入内存,并且分区键的键值相同的元组尽量都集中在一个分区中,因此能够提高归并连接的效率。
进一步地,采用本申请提供的数据表的处理方法对需要进行归并连接的至少两个数据表进行分区后,由于分区键的键值相同的元组尽量都集中在一个分区中,因此还可以降低对该至少两个数据表进行归并连接的复杂度。
在第一方面的第一种可选的实现方式中,上述根据需要分区的数据表的数据量和计算机允许该数据表使用的最大内存容量,确定该数据表的预分区数m的方法可以包括:根据该数据表的数据量、计算机允许该数据表使用的最大内存容量和公式,确定该数据表的预分区数m。其中,该公式为:m=a*b/c,a表示该数据表的每一列的字节数之和,b表示该数据表的元组数,a*b表示该数据表的数据量,c表示计算机内存容量的1/t,t=1或2。
实际应用中,如果需要分区的数据表的每一列长度固定,则上述a可以通过将该数据表的每一列长度直接相加获得。如果需要分区的数据表的每一列长度不固定,则上述a可以通过将对数据表进行抽样的每一列的最大长度值直接相加获得。如果需要分区的数据表的每一列长度不固定,则上述a还可以通过将对数据表进行抽样的每一列的平均长度值直接相加获得。
上述每一列的字节数之和中还可以包括元组头的字节数。其中,元组头通常用于指示该元组占多少磁盘空间等。
本申请采用上述公式确定需要分区的数据表的预分区数m,由于该公式中考虑了该数据表的数据量和计算机允许该数据表使用的最大内存容量,因此能够保证分区后的数据表中的每个分区的元组均能被成功读入内存。
在第一方面的第二种可选的实现方式中,上述将该数据表中n个区间对应的元组写入k个分区的方法可以包括:对k个分区中的每个分区,根据待写入该分区的n/k个区间对应的分区键的键值的取值范围,将该取值范围对应的所有元组写入该分区。
在第一方面的第三种可选的实现方式中,上述将该数据表中n个区间对应的元组写入k个分区的方法可以包括:在计算机的磁盘中创建作为k个分区的k个文件;并将该数据表中n个区间对应的元组写入该k个文件,以将该数据表分为k个分区。
本申请中,通过上述两种方式可以将数据表中n个区间对应的元组写入k个分区,从而实现将该数据表分为k个分区,即完成对数据表的分区。
第二方面,提供一种数据表的处理方法,该处理方法应用于计算机,该计算机采用如上述第一方面或其任意一种可选的实现方式所示的处理方法对第一数据表和第二数据表进行分区,该处理方法包括:将第一数据表分为w个分区;将所述第二数据表分为x个分区;并获取包括连接列和连接条件的归并连接指令(用于按照该连接列,将第一数据表和第二数据表中满足该连接条件的元组归并为一个数据表),该连接列与对第一数据表和第二数据表进行分区的分区键相同;以及对上述w个分区和x个分区执行该归并连接指令。其中,w为正整数,x为正整数。
本申请中,实际应用中,一种可能的实现方式是:本申请可以先对第一数据表和第二数据表按照分区键分区;然后再获取到需要对第一数据表和第二数据表进行归并连接的归并连接指令(包括连接列和连接条件);最后再对分区后的第一数据表和第二数据表执行该归并连接指令,即根据该归并连接指令,对分区后的第一数据表和第二数据表进行归并连接。其中,对分区后的第一数据表和第二数据表进行归并连接的连接列与对第一数据表和第二数据表进行分区的分区键相同。
另一种可能的实现方式是:本申请可以先获取到需要对第一数据表和第二数据表进行归并连接的归并连接指令(包括连接列和连接条件);然后再按照该归并连接指令中的连接列,对第一数据表和第二数据表进行分区;最后再对分区后的第一数据表和第二数据表执行该归并连接指令,即根据该归并连接指令对分区后的第一数据表和第二数据表进行归并连接。
在第二方面的第一种可选的实现方式中,上述对w个分区和x个分区执行归并连接指令的方法包括:将w个分区中第y1个分区的所有元组读入计算机的内存,并在该内存中按照连接列对第y1个分区的所有元组进行排序;将x个分区中第y2个分区的所有元组读入计算机的内存,并在该内存中按照该连接列对第y2个分区的所有元组进行排序;且对第y1个分区的所有元组和第y2个分区的所有元组执行该归并连接指令;以及在第y1个分区中的第一数值(为第y1个分区中连接列的最大值)等于第y2个分区中的第二数值(为第y2个分区中连接列的最大值)的情况下,将w个分区中第y1+1个分区的所有元组和x个分区中第y2+1个分区的所有元组读入计算机的内存;在第y1个分区中的第一数值大于第y2个分区中的第二数值的情况下,将x个分区中第y2+1个分区的所有元组读入计算机的内存;在第y1个分区中的第一数值小于第y2个分区中的第二数值的情况下,将w个分区中第y1+1个分区的所有元组读入计算机的内存。其中,y1为正整数,y1<w;y2为正整数,y2<x。
采用本申请提供的数据表的处理方法,由于可以以每个分区为单元对两个需要进行归并连接的数据表进行归并连接,并且可以在一个分区的所有元组处理完,而另一个分区的元组没有处理完的时候,继续将处理完的分区的下一个分区的所有元组读入内存并与没有处理完的分区的元组进行归并连接。与现有技术中在一个分区的所有元组处理完,而另一个分区的元组没有处理完的时候,会重新读入两个新的分区的所有元组继续进行归并连接相比,能够提高归并连接的准确率,并且采用本申请的方法进行归并连接时更加彻底和全面。
对于第二方面、第二方面的技术效果、第二方面的其他可选实现方式以及第二方面的其他可选实现方式的技术效果的描述具体可以参见上述对第一方面或其任意一种可选的实现方式的相关描述,此处不再赘述。
第三方面,提供一种计算机,该计算机包括确定模块和写入模块。其中,确定模块用于根据需要分区的数据表的数据量和计算机允许该数据表使用的最大内存容量,确定该数据表的预分区数m;并根据该数据表的分区键的键值统计信息(分区键的键值统计信息用于表示该数据表中该分区键的键值的分布规律),确定该分区键的键值对应的n个区间(n个区间中的每个区间对应该数据表中的至少一个元组);以及根据该数据表的预分区数m,确定该数据表的实际分区数k,其中,m>0,m≤n,n为正整数,k为m向上取整后的值,且k为n的约数。写入模块用于将确定模块确定的该数据表中n个区间对应的元组写入确定模块确定的k个分区,以将该数据表分为k个分区(k个分区中每个分区包括n/k个区间对应的元组)。
需要说明的是,本申请提供的计算机包括但不限于上述第三方面中的确定模块和写入模块,并且上述第三方面中的确定模块和写入模块具有的功能包括但不限于上述描述的功能。该计算机可以包括用于执行上述第一方面或其任意一种可选的实现方式所述的数据表的处理方法的单元/模块,这些单元/模块是为了执行上述第一方面或其任意一种可选的实现方式所述的数据表的处理方法,而对物理机进行的逻辑上的划分。
上述第三方面的技术效果的描述具体可参见上述对第一方面或其任意一种可选的实现方式的技术效果的相关描述,此处不再赘述。
第四方面,提供一种计算机,该计算机包括分区模块、获取模块和执行模块,分区模块采用如第一方面或其任意一种可选的实现方式所述的处理方法对第一数据表和第二数据表进行分区。其中,分区模块用于将第一数据表分为w个分区;并将第二数据表分为x个分区;获取模块用于获取包括连接列和连接条件的归并连接指令(用于按照该连接列,将第一数据表和第二数据表中满足该连接条件的元组归并为一个数据表),该连接列与对第一数据表和第二数据表进行分区的分区键相同;执行模块用于对分区模块分区后的w个分区和x个分区执行获取模块获取的归并连接指令。中,w为正整数,x为正整数。
需要说明的是,本申请提供的计算机包括但不限于上述第四方面中的分区模块、获取模块和执行模块,并且上述第四方面中的分区模块、获取模块和执行模块具有的功能包括但不限于上述描述的功能。该计算机可以包括用于执行上述第二方面或其任意一种可选的实现方式所述的数据表的处理方法的单元/模块,这些单元/模块是为了执行上述第二方面或其任意一种可选的实现方式所述的数据表的处理方法,而对物理机进行的逻辑上的划分。
上述第四方面的技术效果的描述具体可参见上述对第二方面或其任意一种可选的实现方式的技术效果的相关描述,此处不再赘述。
第五方面,提供一种计算机,该计算机包括处理器、接口电路、存储器和系统总线。存储器用于存储计算机执行指令,处理器、接口电路和存储器通过系统总线相互连接,当计算机运行时,处理器执行存储器存储的计算机执行指令,以使计算机执行如上述第一方面或其任意一项可选的实现方式所述的数据表的处理方法。
第六方面,提供一种计算机可读存储介质,该计算机可读存储介质包括计算机执行指令,当计算机运行时,计算机的处理器执行该计算机执行指令,以使计算机执行如上述第一方面或其任意一项可选的实现方式所述的数据表的处理方法。
上述第五方面和第六方面的技术效果的描述具体可参见上述对第一方面或其任意一种可选的实现方式的技术效果的相关描述,此处不再赘述。
第七方面,提供一种计算机,该计算机包括处理器、接口电路、存储器和系统总线。存储器用于存储计算机执行指令,处理器、接口电路和存储器通过系统总线相互连接,当计算机运行时,处理器执行存储器存储的计算机执行指令,以使计算机执行如上述第二方面或其任意一项可选的实现方式所述的数据表的处理方法。
第八方面,提供一种计算机可读存储介质,该计算机可读存储介质包括计算机执行指令,当计算机运行时,计算机的处理器执行该计算机执行指令,以使计算机执行如上述第二方面或其任意一项可选的实现方式所述的数据表的处理方法。
上述第七方面和第八方面的技术效果的描述具体可参见上述对第二方面或其任意一种可选的实现方式的技术效果的相关描述,此处不再赘述。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例。
图1为本发明实施例提供的数据库系统的架构示意图;
图2为本发明实施例提供的计算机的硬件结构示意图;
图3为本发明实施例提供的一种数据表的处理方法的示意图;
图4为本发明实施例提供的一种键值(学生学号)分布信息的示意图;
图5为本发明实施例提供的另一种数据表的处理方法的示意图;
图6为本发明实施例提供的计算机的结构示意图一;
图7为本发明实施例提供的计算机的结构示意图二;
图8为本发明实施例提供的计算机的结构示意图三。
具体实施方式
本文中字符“/”,一般表示前后关联对象是一种“或者”的关系。例如,A/B可以理解为A或者B。
本发明的说明书和权利要求书中的术语“第一”和“第二”等是用于区别不同的对象,而不是用于描述对象的特定顺序。例如,第一数据表和第二数据表等是用于区别不同的数据表,而不是用于描述数据表的特征顺序。
在本发明的描述中,除非另有说明,“多个”的含义是指两个或两个以上。例如,多个数据表是指两个或两个以上数据表。
此外,本发明的描述中所提到的术语“包括”和“具有”以及它们的任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括其他没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、接口、技术之类的具体细节,以便透切理解本发明。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本发明。在其它情况中,省略对众所周知的装置、电路以及方法的详细说明,以免不必要的细节妨碍本发明的描述。
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行详细地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。
首先,为了更加清楚地理解本发明实施例的各种实现方式,下面首先对本发明实施例中涉及的技术术语和相关名词进行示例性的解释。
归并连接:指按照多个数据表中每个数据表的连接列,将多个数据表中满足连接条件的元组归并(也可以理解为合并)为一个数据表,多个数据表中的每个数据表均包括连接列。以两个数据表(分别为第一数据表和第二数据表)为例,将第一数据表和第二数据表归并连接是指按照第一数据表和第二数据表的连接列,将第一数据表和第二数据表中满足连接条件的元组归并为一个数据表。
连接列:指对多个数据表进行归并连接时,多个数据表中被比较的列。
连接条件:指多个数据表中每个数据表的连接列之间满足的条件。以两个数据表(分别为第一数据表和第二数据表)为例,连接条件指第一数据表的连接列和第二数据表的连接列之间满足的条件,例如第一数据表的连接列的数值和第二数据表的连接列的数值相等,或者第一数据表的连接列的数值大于第二数据表的连接列的数值等。
分区:指按照分区键,将数据表中满足不同条件的行或者列划分为不同区域的过程。需要说明的是,该划分过程通常并不会丢弃数据表中除划分所使用的分区键所在的行或者列之外的其他行或者列。例如,假设数据表有5列,如果按照第3列的表头(即分区键)分区,那么分区后的数据表(或者每个分区)仍然包括5列,即对数据表分区后,每个分区中都包含数据表中原来包含的所有列。可以理解,按照某一列的表头对数据表分区,只是将数据表的所有行划分为不同的分区,而数据表中的所有列在每个分区中都存在。相应的,按照某一行的表头对数据表分区,只是将数据表的所有列划分为不同的分区,而数据表中的所有行在每个分区中都存在。
分区键:指对数据表进行分区的一个或多个列的表头,或者对数据表进行分区的一个或多个行的表头。为了便于表述,本发明实施例中以分区键是对数据表进行分区的一个列的表头为例进行描述,应理解,在分区键是对数据表进行分区的多个列、一个行或多个行的表头的情况下,本发明实施例所述的方案同样可以执行,具体方式不再赘述。
应理解,在分区键对应列的表头的情况下,归并连接指令中包括的是连接列,相应的,在分区键对应行的表头的情况下,归并连接指令中的连接列也可以适应性地被称为连接行,本发明实施例所述的方案同样可以执行,为了便于表述,本发明实施例以分区键为列的表头为例进行叙述,应理解,在分区键对应行的表头的情况下,本发明实施例所述的方案同样可以执行,具体方式不再赘述。
键值:指数据表里面与分区键对应的列中,每一行和该列交叉点的数值。
元组:指数据表中的行,数据表中的每一行称为一个元组。
通常,在需要对两个数据表进行归并连接时,如果两个数据表中每个数据表的数据量均远远大于计算机允许该数据表使用的最大内存容量,则在对两个数据表进行归并连接时首先需要对这两个数据表分别进行分区,然后再对分区后的数据表进行归并连接。由于在对该两个数据表进行分区时通常是按照连接列的哈希值分区的,因此可能会导致某个数据表中的某个分区的元组数比较大,而当这些元组的数据量大于计算机允许该分区使用的最大内存容量时,可能会使得该分区无法被读入内存而导致需要对该分区继续进行进一步分区,如此可能会导致在归并连接中对数据表进行多次分区,从而降低了归并连接的效率。
为了解决上述问题,本发明实施例提供一种数据表的处理方法(即为对数据表进行分区),具体为:根据需要分区的数据表的数据量和计算机允许该数据表使用的最大内存容量,确定对该数据表进行分区的预分区数m;并根据对该数据表进行分区的分区键的键值分布信息,确定该数据表对应n个区间,n个区间中的每个区间对应该数据表中的至少一个元组,分区键的键值分布信息用于表示该数据表中该分区键的键值的分布情况;且确定将n个区间中每n/k个区间对应的元组作为该数据表的k个分区中的一个分区,其中,k为对该数据表进行分区的实际分区数,k为m向上取整后的值;以及将每n/k个区间对应的元组写入k个分区中对应的分区,以将该数据表分为K个分区。
通过本发明实施例提供的数据表的处理方法,一方面,由于对数据表进行分区的预分区数是根据需要分区的数据表的数据量和计算机允许该数据表使用的最大内存容量确定的,因此可以使得分区后的数据表中的每个分区的元组均能被成功读入内存;另一方面,由于对数据表进行分区的分区键的键值分布信息可以表示该分区键的键值的分布情况,因此根据该分区键的键值分布信息,确定数据表对应n个区间后,再确定将n个区间中每n/k个区间对应的元组作为数据表的k个分区中的一个分区,并将每n/k个区间对应的元组写入k个分区中对应的分区,即将数据表分为K个分区,能够尽量保证分区键的键值相同的元组都集中在一个分区中。如此,采用本发明实施例提供的数据表的处理方法对至少两个数据表进行分区后,由于该至少两个数据表中每个数据表的每个分区的元组均能被成功读入内存,并且分区键的键值相同的元组尽量都集中在一个分区中,因此能够提高归并连接的效率。
本发明实施例提供的数据表的处理方法应用于计算机,该计算机上运行有数据库系统。图1为本发明实施例提供的一种数据库系统的架构示意图。如图1所示,该数据库系统包括中间件(或者称为用户接口)10、结构化查询语言(structured query language,SQL)解析器11、数据查询处理模块12、存储引擎13、数据库管理指令处理模块14以及集群管理模块15等。其中,数据查询处理模块12包括优化器120和执行器121。SQL解析器11与中间件10、数据查询处理模块12以及数据库管理指令处理模块14连接,存储引擎13与数据查询处理模块12和数据库管理指令处理模块14连接。
其中,中间件10,用于用户输入对数据库系统操作的操作指令(例如用户输入的SQL查询语句等),例如用户通过中间件输入对数据库系统中的数据表进行归并连接(mergejoin)的归并连接指令等。
SQL解析11,用于对用户通过中间件10输入的操作指令进行词法分析、语法分析以及语义分析。
数据查询处理模12,用于执行SQL解析器11分析后的操作指令并返回执行结果。具体的,数据查询处理模12中的优化器120用于根据SQL解析器11分析后的操作指令生成执行该操作指令的最优计划;数据查询处理模12中的执行器121用于根据优化器120生成的最优计划执行该操作指令并返回执行结果,执行器121在执行该操作指令的过程中与存储引擎13进行交互,以读取该存储引擎13中存储的数据。示例性的,假设用户输入的是对数据表1和数据表2进行查询的SQL查询语句,那么优化器120生成的最优计划可以为对数据表1和数据表2进行归并连接的归并连接指令,从而执行器121对数据表1和数据表2执行该归并连接指令后输出的结果即为用户所需的对数据表1和数据表2进行查询的结果。
存储引擎13,用于存储数据,并在与执行器121交互过程中将其存储的数据提供给执行器121。
数据库管理指令处理模块14,用于执行SQL解析器11分析后的用户通过中间件10输入的对数据库的管理指令(例如创建数据表、修改数据表或删除数据表等),对数据库系统进行管理,并在对数据库系统进行管理的过程中与存储引擎13交互。
集群管理模块15,用于监控数据库系统的资源的使用情况,并根据数据库系统的资源的使用情况管理数据库系统的资源、执行容灾恢复、事务管理以及故障切换等操作。
本发明实施例提供的数据表的处理方法,可以应用于对如图1所示的数据库系统中的数据表进行处理的场景中。例如,假设本发明实施例提供的数据表的处理方法为对至少两个数据表进行归并连接(即用户通过中间件10向数据库系统输入对至少两个数据表进行查询的SQL查询语句),则上述数据查询处理模12中的优化器120首先根据用户输入的SQL查询语句,确定对数据表进行查询的最优计划,例如该最优计划为对至少两个数据表进行归并连接(该最优计划包括归并连接指令),然后该数据查询处理模12中的执行器121可以根据该最优计划对该至少两个数据表进行归并连接,例如执行器121可以通过对该至少两个数据表执行归并连接指令完成对该至少两个数据表的归并连接,并在执行完该归并连接指令之后返回对至少两个数据表进行归并连接的结果,即用户所需的对该至少两个数据表进行查询的结果。
下面对本发明实施例提供的数据表的处理方法进行详细地说明。本发明实施例提供的数据表的处理方法的执行主体可以为数据表的处理装置,该数据表的处理装置可以为计算机,也可以为计算机上能够实现本发明实施例提供的数据表的处理方法的功能模块,还可以为计算机上运行的数据库系统中的功能模块(例如上述如图1所示的执行器)等。为了便于描述本发明实施例的技术方案,下述各个方法实施例均以数据表的处理方法的执行主体为计算机为例进行示例性的说明。
如图2所示,为本发明实施例提供的一种计算机的硬件结构示意图。在图2中,该计算机包括:中央处理器(central processing unit,CPU)20、输入输出(input output,IO)接口21、存储器22、系统总线23、输入单元24、显示单元25以及电源26等部件。CPU 20、IO接口21、存储器22、输入单元24、显示单元25以及电源26等之间均连接到系统总线23。
CPU 20是计算机的控制中心,利用各种接口和线路连接整个计算机的各个部分,通过运行或执行存储在存储器22内的软件程序和/或模块,以及调用存储在存储器22内的数据,执行计算机的各种功能和处理数据,从而对计算机进行整体监控。可选的,CPU 20可以包括一个或多个处理核,即CPU 20可以为单核处理器,也可以为多核处理器。可选的,CPU20可集成应用处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等。
IO接口21,用于连接CPU 20和输入单元24;以及连接CPU 20和输出设备,输出设备包括上述显示单元25等。
可以理解,CPU 20可以通过IO接口21接收用户通过输入单元24输入的数据;并将输出数据输入到输出设备,由输出设备呈现给用户。
存储器22可用于存储软件程序和/或软件模块,CPU 20通过运行存储在存储器22中的软件程序和/或软件模块,从而执行计算机的各种功能应用以及数据处理。存储器22可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能(比如声音播放功能、图像播放功能等)所需的驱动程序等;存储数据区可存储根据计算机的使用所创建的数据(比如音频数据、图像数据等)等。此外,存储器22可以包括易失性存储器(英文:volatile memory),例如随机存取存储器(英文:random-access memory,缩写:RAM);所述存储器22也可以包括非易失性存储器(英文:non-volatile memory),例如只读存储器(英文:read-only memory,缩写:ROM),快闪存储器(英文:flash memory),硬盘(英文:hard disk drive,缩写:HDD)或固态硬盘(英文:solid-state drive,缩写:SSD);所述存储器22还可以包括上述种类的存储器的组合。
系统总线23可以包括数据总线、电源总线、控制总线和信号状态总线等。本实施例中为了清楚说明,在图2中将各种总线都示意为系统总线23。
输入单元24可用于接收用户输入的数字或字符信息,以及产生与计算机的用户设置以及功能控制有关的键信号输入。具体地,输入单元24可包括触摸屏240以及其他输入设备241。触摸屏240,也称为触控面板,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触摸屏240上或在触摸屏240附近的操作),并根据预先设定的程式驱动相应的连接装置。可选的,触摸屏240可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给CPU 20,并能接收CPU 20发来的命令并执行该命令。此外,可以采用电容式、红外线以及表面声波等多种类型实现触摸屏240。其他输入设备241可以包括但不限于物理键盘、鼠标等中的一种或多种。
显示单元25可用于显示由用户输入的信息或提供给用户的信息以及计算机的各种界面。显示单元25可包括显示面板250。可选的,可以采用液晶显示器(liquid crystaldisplay,LCD)、有机发光二极管(organic light-emitting diode,OLED)等形式来配置显示面板250。
电源26可以通过电源管理系统与CPU 20逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。
尽管未示出,计算机还可以包括无线保真(wireless fidelity,WiFi)模块、蓝牙模块等,在此不再赘述。
基于上述数据库系统的架构示意图和计算机的硬件结构示意图,本发明实施例提供一种数据表的处理方法,该处理方法应用于计算机,该计算机上运行有数据库系统,如图3所示,该处理方法可以包括S101-S104:
S101、计算机根据需要分区的数据表的数据量和计算机允许该数据表使用的内存容量,确定该数据表的预分区数m。
其中,m>0,即m为正整数。
本发明实施例中,在需要对两个数据表进行查询(例如归并连接,归并连接为查询的一种)时,如果两个数据表中每个数据表的数据量均远远大于计算机允许该数据表使用的最大内存容量,则通常在对数据表进行归并连接之前,首先需要对数据表进行分区。本发明实施例以对至少两个数据表进行归并连接为例,在对至少两个数据表进行归并连接之前,为了加快归并连接速度,首先需要对该至少两个数据表中的每个数据表进行分区。为了保证对数据表进行分区后,每个分区中的元组均能被成功读入内存,可以根据需要分区的数据表的数据量和计算机允许该数据表使用的最大内存容量对该数据表进行分区。具体的,计算机可以先确定该数据表的预分区数(即对该数据表进行分区的预分区数),然后再根据该预分区数和该数据表的分区键(即对该数据表进行分区的分区键)的键值统计信息,确定该数据表的实际分区数(即对该数据表进行分区的实际分区数),并按照该实际分区数对该数据表进行分区。
可选的,本发明实施例中,上述S101具体可以通过S101a实现:
S101a、计算机根据需要分区的数据表的数据量、计算机允许该数据表使用的最大内存容量和公式,确定该数据表的预分区数m。
其中,上述公式可以为:m=a*b/c,a表示需要分区的数据表的每一列的字节数之和,b表示该数据表的元组数,a*b表示该数据表的数据量,c表示计算机内存容量的1/t,t=1或2。
可选的,本发明实施例中,如果需要分区的数据表的每一列长度固定(例如,数据表中的学生学号一列,由于每个学生的学号都是按照相同的原则编排的,因此每个学生的学号的长度均相等),则上述a可以通过将该数据表的每一列长度直接相加获得。如果需要分区的数据表的每一列长度不固定(例如,数据表的姓名一列,由于每个学生的姓名不一样,因此每个学生的姓名的长度也不一样),则上述a可以通过将对数据表进行抽样的每一列的最大长度值直接相加获得。如果需要分区的数据表的每一列长度不固定,则上述a还可以通过将对数据表进行抽样的每一列的平均长度值直接相加获得。
可选的,本发明实施例中,当需要分区的数据表的每个元组包括元组头(例如元组头用于指示该元组占多少磁盘空间等)时,上述a可以通过将每一列的字节数之和与元组头的字节数相加获得。
当然,本发明实施例中,为了描述方便,上述每一列的字节数之和中还可以包括元组头的字节数。具体的,可以根据实际使用需求确定,本发明实施例不作限定。
可选的,本发明实施例中,在数据库系统中,如果只需要对某个数据表进行分区,然后将每个分区的所有元组读入内存中进行排序,而无需将该数据表与其他数据表进行归并连接,那么上述t可以为1;例如,假设对数据表1进行分区,然后将每个分区的所有元组读入内存中进行排序,那么上述t可以为1。如果需要对至少两个数据表进行归并连接,由于在数据表归并连接中,每次只能对两个数据表进行归并连接,因此采用上述方法对该两个数据表中的每个数据表进行分区时,上述t可以为2(这是因为对该两个数据表进行归并连接时,需要将该两个数据表中每个数据表的一个分区的所有元组同时读入内存);例如,假设需要对数据表1和数据表2两个数据表进行归并连接,那么上述t可以为2。
可选的,本发明实施例中,在其他应用场景中,t还可能为其他任意满足使用需求的数值。例如采用本发明实施例提供的数据表的处理方法对10个数据表分别进行分区后,如果需要将该10个数据表中每个数据表的一个分区同时读入内存,那么上述t可以为10。
举例来说,假设需要分区的数据表为数据表1,数据表1的每一列的字节数之和为256字节,数据表1的元组数为5000个,计算机允许数据表1使用的最大内存容量为1GB,即1048576字节,t为2,则上述a=256,b=5000,c=524288,那么计算机确定的数据表1的预分区数m=a*b/c=256*5000/524288=2.44140625。
本发明实施例采用上述公式确定需要分区的数据表的预分区数m,由于该公式中考虑了该数据表的数据量和计算机允许该数据表使用的最大内存容量,因此能够保证分区后的数据表中的每个分区的元组均能被成功读入内存。
S102、计算机根据该数据表的分区键的键值统计信息,确定该分区键的键值对应的n个区间。
该数据表的分区键的键值对应的n个区间中的每个区间分别对应该数据表中的至少一个元组。该分区键的键值统计信息用于表示该数据表中该分区键的键值的分布规律,其中,n为正整数,m≤n。
示例性的,假设数据表包括11个元组(即11行),且从数据表的第一个元组(即第一行)开始,数据表的分区键的键值分别为:03,02,03,06,01,06,03,01,03,06,03,那么该分区键的键值统计信息可以为:01在数据表中有2个,02在数据表中有1个,03在数据表中有5个,06在数据表中有3个。例如,该分区键的键值统计信息还可以表示为:{01,2}、{02,1}、{03,5}和{06,3}。
本发明实施例中,在对该数据表进行处理(例如分区)之前,可以先生成对该数据表进行分区的分区键的键值统计信息,该分区键的键值统计信息用于表示该数据表中该分区键的键值的分布规律。该分区键的键值统计信息可以采用直方图表示,直方图可以为等高直方图(即直方图中的每个方格的高度均相同,每个方格的宽度可能不同)或者等宽直方图(即直方图中的每个方格的宽度均相同,每个方格的高度可能不同),具体的,本发明不作限定。
下面以表1(例如学生借书表)和图4为例,对本发明实施例提供的分区键和分区键的键值统计信息再进行进一步地示例性的说明。
表1
借书编号 | 借书书名 | 学生学号 |
1 | 《乱世佳人》 | 3 |
2 | 《基督山伯爵》 | 5 |
3 | 《红楼梦》 | 2 |
4 | 《三国演义》 | 1 |
5 | 《西游记》 | 6 |
6 | 《钢铁是怎样炼成的》 | 4 |
7 | 《平凡的世界》 | 7 |
8 | 《水浒传》 | 6 |
9 | 《红楼梦》 | 8 |
10 | 《哲学》 | 5 |
11 | 《意林》 | 9 |
12 | 《钢铁是怎样炼成的》 | 5 |
13 | 《平凡的世界》 | 3 |
14 | 《大学英语》 | 6 |
15 | 《高等数学》 | 4 |
假设上述表1为需要分区的数据表1,对数据表1进行分区的分区键为学生学号,则图4为数据表1中的学生学号的统计信息,学生学号的统计信息可以用于表示学生学号在数据表1中的分布规律。
如图4所示,为以等高直方图表示的学生学号的统计信息。从图4中可以看出,数据表1对应9个区间。这9个区间用于表示数据表1中学生学号的分布规律,例如学生学号从小到大排列且每个学生学号的数量有多少个等。示例性的,假设这9个区间分别称为区间1、区间2、……、区间9,区间1用于表示数据表1中学生学号1的数量为1个,区间2用于表示数据表1中学生学号2的数量为1个,区间3用于表示数据表1中学生学号3的数量为2个,区间4用于表示数据表1中学生学号4的数量为2个,区间5用于表示数据表1中学生学号5的数量为3个,区间6用于表示数据表1中学生学号6的数量为3个,区间7用于表示数据表1中学生学号7的数量为1个,区间8用于表示数据表1中学生学号8的数量为1个,区间9用于表示数据表1中学生学号9的数量为1个。
如图4所示的9个区间中的每个区间均对应数据表1中的至少一个元组,示例性的,假设这9个区间分别称为区间1、区间2、……、区间9,区间1对应数据表1中学生学号为1的元组,区间2对应数据表1中学生学号为2的元组,区间3对应数据表1中学生学号为3的元组,区间4对应数据表1中学生学号为4的元组,区间5对应数据表1中学生学号为5的元组,区间6对应数据表1中学生学号为6的元组,区间7对应数据表1中学生学号为7的元组,区间8对应数据表1中学生学号为8的元组,区间9对应数据表1中学生学号为9的元组。
需要说明的是,本发明实施例中,上述图4以等高直方图为例对分区键的键值统计信息进行示例性的说明,实际应用中,分区键的键值统计信息还可以采用等宽直方图等其他类型的直方图,或者采用其他类型的示意图进行表示,本发明不作限定。
S103、计算机根据该数据表的预分区数m,确定该数据表的实际分区数k。
其中,k为m向上取整后的值,且k为n的约数。
本发明实施例中,计算机确定需要分区的数据表的预分区数m之后,计算机可以根据该预分区数m,确定该数据表的实际分区数k。具体的,k为m向上取整后的值,且k为n的约数。
示例性的,假设上述S101a中计算机确定的m=2.44140625,上述S102中计算机确定需要分区的数据表的分区键的键值对应9个区间,则m向上取整后、且为9的约数的值为3,即计算机可以确定k=3。也就是说,本发明实施例中,m向上取整后的值,即k需要为n的约数,即n/k为正整数。
S104、计算机将该数据表中n个区间对应的元组写入k个分区,以将该数据表分为K个分区。
其中,k个分区中每个分区包括该数据表中,n/k个区间对应的元组。
计算机确定该数据表的实际分区数之后,计算机可以根据上述确定的该数据表的分区键的键值对应的n个区间,确定将n个区间中每n/k个区间对应的元组作为该数据表的k个分区中的一个分区。
以上述的例子来说,假设计算机确定k=3;且计算机根据数据表的分区键的键值分布信息,确定该分区键的键值对应9个区间,则计算机可以确定将9个区间中的每3个区间对应的元组作为该数据表的3个分区中的一个分区。例如,结合上述图4,计算机确定可以将9个区间中的第1个区间—第3个区间作为该数据表的3个分区中的第1个分区,将9个区间中的第4个区间—第6个区间作为该数据表的3个分区中的第2个分区,将9个区间中的第7个区间—第9个区间作为该数据表的3个分区中的第3个分区。
计算机确定需要将数据表中n个区间中每n/k个区间对应的元组作为数据表的k个分区中的一个分区之后,计算机可以通过将数据表中每n/k个区间对应的元组分别写入k个分区中对应的分区,以将数据表中n个区间对应的元组写入k个分区,从而完成将该数据表分为k个分区。
可选的,本发明实施例中,上述S104中,对k个分区中的每个分区,均可以通过S104a实现将待写入该分区的n/k个区间的元组写入该分区:
S104a、计算机根据待写入该分区的n/k个区间对应的分区键的键值的取值范围,将该取值范围对应的所有元组写入该分区。
示例性的,本发明实施例中,上述待写入该分区的n/k个区间对应的分区键的键值的取值范围可以用该n/k个区间对应的分区键的键值的最小值和最大值来表示。例如该n/k个区间对应的分区键的键值的最小值为1,该n/k个区间对应的分区键的键值的最大值为7,那么该n/k个区间对应的分区键的键值的取值范围可以表示为{1,7}。
结合上述图4,以n/k个区间对应的分区键的键值的取值范围是该n/k个区间对应的分区键的键值的最小值和最大值为例,计算机可以根据9个区间中的第1个区间—第3个区间的最小值(图4中为1)和最大值(图4中为3),将数据表中第1个区间—第3个区间对应的所有元组(即数据表中学生学号为1至3的所有元组)写入该数据表的3个分区中的第1个分区;根据9个区间中的第4个区间—第6个区间的最小值(图4中为4)和最大值(图4中为6),将数据表中第4个区间—第5个区间对应的所有元组(即数据表中学生学号为4至6的所有元组)写入该数据表的3个分区中的第2个分区;根据9个区间中的第7个区间—第9个区间的最小值(图4中为7)和最大值(图4中为9),将数据表中第7个区间—第9个区间对应的所有元组(即数据表中学生学号为7至9的所有元组)写入该数据表的3个分区中的第3个分区。通过该过程,对于数据表的k个分区中的每个分区,计算机可以根据待写入该分区的n/k个区间对应的分区键的键值的取值范围,将该取值范围对应的所有元组写入该分区,从而完成将数据表中n个区间对应的元组写入k个分区。
可选的,本发明实施例中,上述S104具体可以通过S104b-S104c实现:
S104b、计算机在计算机的磁盘中创建k个文件,该k个文件为k个分区。
S104c、计算机将该数据表中n个区间对应的元组写入k个文件。
本发明实施例提供的数据表的处理方法中,计算机可以通过在计算机的磁盘中创建k个文件,然后再将上述n个区间对应的元组写入k个文件,以完成对该数据表的分区,即将该数据表在计算机的磁盘中存储为k个文件(该k个文件即为该数据表的k个分区)。
本发明实施例提供的数据表的处理方法中,如果按照上述S101-S104(包括上述S101a、S104a-S104c)所示的方法对数据表进行分区后,该分区的数据量仍然大于计算机允许该分区使用的最大内存容量时,还可以继续采用上述S101-S104(包括上述S101a、S104a-S104c)所示的方法对该分区继续进行分区,即进一步将该分区分为多个分区,以使该多个分区中的每个分区的数据量均小于或等于计算机允许该分区使用的最大内存容量。
本发明实施例提供的数据表的处理方法,一方面,由于数据表的预分区数是根据需要分区的数据表的数据量和计算机允许该数据表使用的最大内存容量确定的,因此可以使得分区后的数据表中的每个分区的元组均能被成功读入内存;另一方面,由于数据表的分区键的键值统计信息可以表示数据表中该分区键的键值的分布规律,因此根据该分区键的键值统计信息,确定该分区键的键值对应的n个区间后,再根据数据表的预分区数和该n个区间,确定数据表的实际分区数,然后再将数据表中每n/k个区间对应的元组写入k个分区中对应的分区,即将数据表中n个区间对应的元组写入k个分区,从而以将数据表分为K个分区,能够尽量保证分区键的键值相同的元组都集中在一个分区中。如此,采用本发明实施例提供的数据表的处理方法对至少两个数据表进行分区后,由于该至少两个数据表中每个数据表的每个分区的元组均能被成功读入内存,并且分区键的键值相同的元组尽量都集中在一个分区中,因此能够提高归并连接的效率。
进一步地,采用本发明实施例提供的数据表的处理方法对需要进行归并连接的至少两个数据表进行分区后,由于分区键的键值相同的元组尽量都集中在一个分区中,因此还可以降低对该至少两个数据表进行归并连接的复杂度。
本发明实施例还提供一种数据表的处理方法,该处理方法应用于计算机,该计算机上运行有数据库系统,如图5所示,该处理方法可以包括S201-S204:
S201、计算机将第一数据表分为w个分区。
S202、计算机将第二数据表分为x个分区。
其中,第一数据表和第二数据表为需要进行归并连接的数据表。w为正整数,x为正整数。
需要说明的是,本发明实施例中,上述第一数据表和第二数据表可以为分别为一个数据表,或者上述第一数据表和第二数据表中可以有至少一个包括多个数据表,具体的,本发明不作限定。
本发明实施例以第一数据表和第二数据表分别为一个数据表为例,对本发明实施例提供的数据表的处理方法(即对数据表进行归并连接的方法)进行示例性的说明。即本发明实施例以对第一数据表和第二数据表两个数据表进行归并连接为例进行示例性的说明。实际应用中,进行归并连接的数据表也可以有多个,具体的,由于一次只能对两个数据表进行归并连接,因此对多个数据表进行归并连接的方法与本发明实施例描述的对两个数据表进行归并连接的方法类似,本发明实施例不再赘述。
本发明实施例中,计算机可以采用上述方法实施例中S101-S104(包括上述S101a、S104a-S104c)所述的数据表的处理方法对需要进行归并连接的两个数据表(即上述第一数据表和第二数据表)进行分区。具体的,计算机对第一数据表和第二数据表进行分区的方法可以参见上述方法实施例中对S101-S104(包括上述S101a、S104a-S104c)的相关描述,此处不再赘述。
S203、计算机获取归并连接指令。
其中,归并连接指令中包括连接列和连接条件,该连接列与对第一数据表和第二数据表进行分区的分区键相同。该归并连接指令用于按照该连接列,将分区后的第一数据表和第二数据表中满足连接条件的元组归并为一个数据表。
本发明实施例中,计算机可以根据用户输入的对第一数据表和第二数据表进行查询的SQL查询语句,获取归并连接指令。具体的,计算机根据用户输入的SQL查询语句,获取归并连接指令的方法可以参见上述对如图1所示的数据库系统中数据查询处理模块12中的优化器120和执行器121的相关描述,此处不再赘述。
需要说明的是,本发明实施例不限定S201-S202和S203的执行顺序。即本发明实施例可以先执行S201-S202,后执行S203;也可以先执行S203,后执行S201-S202。具体的,可以根据实际应用场景确定,本发明实施例不作限定。
实际应用中,一种可能的实现方式是:本发明实施例可以先对第一数据表和第二数据表按照分区键分区;然后再获取到需要对第一数据表和第二数据表进行归并连接的归并连接指令(包括连接列和连接条件);最后再对分区后的第一数据表和第二数据表执行该归并连接指令,即根据该归并连接指令,对分区后的第一数据表和第二数据表进行归并连接。其中,对分区后的第一数据表和第二数据表进行归并连接的连接列与对第一数据表和第二数据表进行分区的分区键相同。
另一种可能的实现方式是:本发明实施例可以先获取到需要对第一数据表和第二数据表进行归并连接的归并连接指令(包括连接列和连接条件);然后再按照该归并连接指令中的连接列,对第一数据表和第二数据表进行分区;最后再对分区后的第一数据表和第二数据表执行该归并连接指令,即根据该归并连接指令对分区后的第一数据表和第二数据表进行归并连接。
S204、计算机对w个分区和x个分区执行该归并连接指令。
计算机对w个分区和x个分区执行该归并连接指令可以理解为:计算机对w个分区和x个分区进行归并连接。
计算机对第一数据表的w个分区和第二数据表的x个分区进行归并连接后,可以将分区后的第一数据表和第二数据表中满足连接条件的元组归并为一个数据表。
可选的,本发明实施例中,上述S204具体可以通过S204a-S204f实现:
S204a、计算机将w个分区中第y1个分区的所有元组读入计算机的内存,并在该内存中按照连接列对第y1个分区的所有元组进行排序。
其中,y1为正整数,y1<w。
S204b、计算机将x个分区中第y2个分区的所有元组读入计算机的内存,并在该内存中按照连接列对第y2个分区的所有元组进行排序。
其中,y2为正整数,y2<x。
本发明实施例中,按照上述S101-S104(包括上述S101a、S104a-S104c)所述的方法将第一数据表分为w个分区,并将第二数据表分为x个分区之后,w个分区中的每个分区的数据量小于或者等于计算机允许第一数据表使用的最大内存容量(即计算机允许本次对第一数据表和第二数据表进行归并连接时使用的最大内存容量的二分之一),x个分区中的每个分区的数据量也小于或者等于计算机允许第二数据表使用的最大内存容量(即计算机允许本次对第一数据表和第二数据表进行归并连接时使用的最大内存容量的二分之一),这样能够保证计算机可以将第一数据表的某个分区的所有元组和第二数据表的某个分区的所有元组同时读入内存进行归并连接,例如计算机可以将w个分区中的第y1个分区的所有元组和x个分区中的第y2个分区的所有元组同时读入内存,并对w个分区中的第y1个分区的所有元组和x个分区中的第y2个分区的所有元组进行归并连接。
本发明实施例中,由于在保存数据表各个分区的磁盘中对数据表的各个分区的所有元组进行排序的性能通常较差,不灵活,因此本发明实施例为了加快归并连接的速度,提高归并连接的效率,可以在计算机的内存中对数据表的各个分区的所有元组进行排序。
S204c、计算机对第y1个分区的所有元组和第y2个分区的所有元组执行归并连接指令。
计算机将第y1个分区的所有元组和第y2个分区的所有元组读入计算机的内存并排序之后,计算机可以对第y1个分区的所有元组和第y2个分区的所有元组执行归并连接指令。具体的,计算机可以首先对第y1个分区的第一个元组与第y2个分区的所有元组进行归并连接,然后再对第y1个分区的第二个元组与第y2个分区的所有元组进行归并连接,直至将第y1个分区的所有元组与第y2个分区的所有元组全部完成归并连接。
本发明实施例中,计算机对第y1个分区的每个元组与第y2个分区的所有元组进行归并连接的方法均相同,下面以计算机对第y1个分区的第一个元组与第y2个分区的所有元组进行归并连接为例进行示例性的说明。
计算机首先将第y1个分区的第一个元组的连接列的数值与第y2个分区的所有元组的连接列的数值依次进行对比,如果第y1个分区的第一个元组的连接列的数值与第y2个分区的某个元组的连接列的数值满足连接条件(例如可以为两个连接列的数值相同),则将第y1个分区的第一个元组与第y2个分区的该元组归并为一个元组,即对第y1个分区的第一个元组与第y2个分区的该元组完成了归并连接;继续将第y1个分区的第一个元组的连接列的数值与第y2个分区的该元组的后一个元组的连接列的数值进行对比,直至第y1个分区的第一个元组的连接列的数值与第y2个分区的某个元组的连接列的数值不满足连接条件为止(由于第y2个分区的所有元组在内存中是按照连接列的数值排序的,因此如果第y1个分区的第一个元组的连接列的数值与第y2个分区的某个元组的连接列的数值不满足连接条件,那么第y1个分区的第一个元组的连接列的数值与第y2个分区的该元组之后的其他元组的连接列的数值均不满足连接条件)。
本发明实施例中,对一个分区中的每个元组与另个一分区中的相应的元组进行归并连接的方法均和上述描述的对第y1个分区的第一个元组与第y2个分区的所有元组进行归并连接的方法类似,具体的可以参见上述对第y1个分区的第一个元组与第y2个分区的所有元组进行归并连接的相关描述,此处不再赘述。
S204d、在第y1个分区中的第一数值等于第y2个分区中的第二数值的情况下,计算机将w个分区中第y1+1个分区的所有元组和x个分区中第y2+1个分区的所有元组读入计算机的内存。
其中,上述第一数值为第y1个分区中连接列的最大值,上述第二数值为第y2个分区中连接列的最大值。在S204d中,第y1个分区中连接列的数值和第y2个分区中连接列的数值完全相同;例如,第y1个分区中连接列的数值包括1、2和3;第y2个分区中连接列的数值包括1、2和3。
本发明实施例中,如果第y1个分区中的第一数值和第y2个分区中的第二数值相等,则表示计算机可以同时完成对第y1个分区中的所有元组和第y2个分区中的所有元组的归并连接。
示例性的,假设第y1个分区中包括3类连接列的数值(分别称为SS1、SS2和SS3,且SS1<SS2<SS3,即SS3为3类连接列的数值中的最大值),第y2个分区中也包括3类连接列的数值(分别称为SS1、SS2和SS3,且SS1<SS2<SS3,即SS3为3类连接列的数值中的最大值),那么计算机可以依次将第y1个分区中的3类连接列的数值(即SS1、SS2和SS3)和第y2个分区中的3类连接列的数值(即SS1、SS2和SS3)分别进行对比并输出结果后,即可完成对第y1个分区中的所有元组和第y2个分区中的所有元组进行归并连接。
需要说明的是,由于连接列中,每个连接列的数值可能有一个,也可能有多个,因此为了表示每个连接列的数值既有一个的情况,又有多个的情况,本发明实施例均以“P类连接列的数值”(例如上述的3类连接列的数值和下述的2类连接列的数值等)进行示例性的描述。
S204e、在第y1个分区中的第一数值大于第y2个分区中的第二数值的情况下,计算机将x个分区中第y2+1个分区的所有元组读入计算机的内存。
上述S204e中第y1个分区中连接列的最大值大于第y2个分区中连接列的最大值。在S204e中,第y1个分区中连接列的数值和第y2个分区中连接列的数值部分相同;例如,第y1个分区中连接列的数值包括1、2和3;第y2个分区中连接列的数值包括1和2。
示例性的,假设第y1个分区中包括3类连接列的数值(分别为SS1、SS2和SS3,且SS1<SS2<SS3,即SS3为3类连接列的数值中的最大值),第y2个分区中包括2类连接列的数值(分别为SS1和SS2,且SS1<SS2,即SS2为2类连接列的数值中的最大值),那么计算机可以依次对第y1个分区中的2类连接列的数值(即SS1和SS2)和第y2个分区中的3类连接列的数值(即SS1、SS2和SS3)分别进行对比并输出结果后,第y1个分区中还剩余一类连接列的数值(即SS3)没有进行归并连接,此时计算机可以继续将x个分区中第y2+1个分区的所有元组读入计算机的内存,并且计算机在内存中对第y2+1个分区的所有元组进行排序后,再对第y1个分区中剩余的连接列的数值(即SS3)和第y2+1个分区中的所有连接列的数值进行对比并输出结果。然后计算机继续将w个分区中第y1+1个分区的所有元组读入计算机的内存,并且计算机在内存中对第y1+1个分区的所有元组进行排序后,再对第y1+1个分区中的所有连接列的数值和第y2+1个分区中剩余的连接列的数值进行对比并输出结果。
S204f、在第y1个分区中的第一数值小于第y2个分区中的第二数值的情况下,计算机将w个分区中第y1+1个分区的所有元组读入计算机的内存。
上述S204f中第y2个分区中连接列的最大值大于第y1个分区中连接列的最大值。在S204f中,第y1个分区中连接列的数值和第y2个分区中连接列的数值部分相同;例如,第y1个分区中连接列的数值包括1和2;第y2个分区中连接列的数值包括1、2和3。
示例性的,假设第y1个分区中包括2类连接列的数值(分别为SS1和SS2,且SS1<SS2,即SS2为2类连接列的数值中的最大值),第y2个分区中包括3类连接列的数值(分别为SS1、SS2和SS3,且SS1<SS2<SS3,即SS3为3类连接列的数值中的最大值),那么计算机可以依次对第y1个分区中的2类连接列的数值(即SS1和SS2)和第y2个分区中的3类连接列的数值(即SS1、SS2和SS3)分别进行对比并输出结果后,第y2个分区中还剩余一类连接列的数值(即SS3)没有进行归并连接,此时计算机可以继续将w个分区中第y1+1个分区的所有元组读入计算机的内存,并且计算机在内存中对第y1+1个分区的所有元组进行排序后,再对第y1+1个分区中的所有连接列的数值和第y2个分区中剩余的连接列的数值(即SS3)进行对比并输出结果。然后计算机继续将x个分区中第y2+1个分区的所有元组读入计算机的内存,并且计算机在内存中对第y2+1个分区的所有元组进行排序后,再对第y2+1个分区中的所有连接列的数值和第y1+1个分区中剩余的连接列的数值进行对比并输出结果。
为了更加清楚的理解本发明的技术方案,下面分别以对表1(即第一数据表)和表2(即第二数据表)进行归并连接为例进行示例性的说明。
表2
学生学号 | 学生姓名 |
1 | 张xx |
2 | 李xx |
3 | 王xx |
4 | 陈xx |
5 | 黄xx |
6 | 李yy |
7 | 黄yy |
8 | 文xx |
9 | 张yy |
假设计算机获取到的对第一数据表和第二数据表进行归并连接的归并连接指令中的连接列为“学生学号”这一列,且归并连接指令中的连接条件为“学生学号相同”,则计算机通过对第一数据表和第二数据表执行该归并连接指令,可以将第一数据表和第二数据表中连接列满足连接条件的元组归并为一个数据表。
具体的,计算机可以通过以下几步完成对第一数据表和第二数据表进行归并连接。
第一步:计算机按照上述S101-S104(包括上述S101a、S104a-S104c)所述的方法对第一数据表和第二数据表进行分区(为了描述方便,本发明实施例中仍然将第一数据表的各个分区表示在一个表中;并且将第二数据表的各个分区也表示在一个表中;以及在两个表中分别增加一列用于示意分区数量),分别得到表3(对第一数据表分区后的数据表)和表4(对第二数据表分区后的数据表)。
表3
表4
第二步:假设计算机从表3和表4的第一个分区开始对表3和表4进行归并连接。本发明实施例以将第二数据表归并连接到第一数据表为例:
首先,计算机将表3中第一个分区的所有元组和表4中第一个分区的所有元组分别读入计算机的内存,并按照连接列对表3中第一个分区的所有元组和表4中第一个分区的所有元组分别进行排序,以得到表5(按照连接列对表3中第一个分区的所有元组排序后的表)和表6(按照连接列对表4中第一个分区的所有元组排序后的表)。
表5
表6
其次,计算机读取表5的第一个元组,该第一个元组表示为“4,《三国演义》,1”,计算机将该第一个元组中的学生学号“1”依次与表6中的学生学号进行对比,当计算机在表6中找到学生学号“1”后,计算机可以将表5的第一个元组和表6中学生学号为“1”的元组归并(此处归并也可以理解为合并,归并可以为保留第一数据表和第二数据表中的两个连接列和其他列,也可以为保留第一数据表和第二数据表中的一个连接列和其他列等),以完成对表5的第一个元组和表6中学生学号为“1”的元组的归并连接;计算机继续读取表5的第二个元组,该第二个元组表示为“3,《红楼梦》,2”,计算机将该第二个元组中的学生学号“2”依次与表6中学生学号为“1”之后的学生学号进行对比(由于表5和表6都是按照学生学号从小到大排序的,因此计算机可以确定学生学号为“1”之前的学生学号一定不满足连接条件,所以计算机可以直接将上述第二个元组中的学生学号“2”依次与表6中学生学号为“1”之后的学生学号进行对比),当计算机在表6中找到学生学号“2”后,计算机可以将表5的第二个元祖和表6中学生学号为“2”的元组归并,以完成对表5的第二个元组和表6中学生学号为“2”的元组的归并连接;计算机继续读取表5的第三个元组,该第三个元组表示为“1,《乱世佳人》,3”,计算机将该第三个元组中的学生学号“3”依次与表6中学生学号为“2”之后的学生学号进行对比,当计算机在表6中找到学生学号“3”后,计算机可以将表5的第三个元祖和表6中学生学号为“3”的元组归并,以完成对表5的第三个元组和表6中学生学号为“3”的元组的归并连接;计算机继续读取表5的第四个元组,该第四个元组表示为“13,《平凡的世界》,3”,计算机将该第四个元组中的学生学号“3”依次与表6中学生学号为“2”之后的学生学号进行对比,当计算机在表6中找到学生学号“3”后,计算机可以将表5的第四个元祖和表6中学生学号为“3”的元组归并,以完成对表5的第四个元组和表6中学生学号为“3”的元组的归并连接。
最后,计算机输出对表5和表6进行归并连接的结果。假设本发明实施例中计算机合并第一数据表和第二数据表时,保留第一数据表和第二数据表中的一个连接列和其他列,那么表7为计算机对表5和表6进行归并连接后输出的结果。
表7
需要说明的是,本发明实施例中,上述表5和表6仅以表3和表4中的第一个分区为例对本发明实施例提供的数据表的处理方法进行示例性的说明。具体的,对于表3和表4中的其他分区,均可以参见上述对表3和表4中的第一个分区进行处理的相关描述,此处不再赘述。
进一步地,由于表5中连接列的最大值(即学生学号为“3”)和表6中连接列的最大值(即学生学号为“3”)相等,因此计算机可以同时完成对表5的所有元组和表6的所有元组的归并连接。
一种可能的情况下,假设表5中连接列的最大值大于表6中连接列的最大值,那么计算机在将表6的所有元组均与表5的相应元组进行归并连接后,表5还剩余一些元组,此时计算机可以继续将表4中的第二个分区的所有元组读入计算机的内存并按照连接列排序后,再按照对表5和表6进行归并连接的方法继续对表4中的第二个分区的所有元组和表5中剩余的元组进行归并连接。
另一种可能的情况下,假设表5中连接列的最大值小于表6中连接列的最大值,那么计算机在将表5的所有元组均与表6的相应元组进行归并连接后,表6还剩余一些元组,此时计算机可以继续将表3中的第二个分区的所有元组读入计算机的内存并按照连接列排序后,再按照对表5和表6进行归并连接的方法继续对表3中的第二个分区的所有元组和表6中剩余的元组进行归并连接。
本发明实施例为了描述本发明技术方案的实现,上述是以计算机对表3和表4中的第一个分区完成归并连接后就输出结果为例进行说明的。而实际应用中,计算机可能对表3和表4中的所有分区均完成归并连接后才输出结果(即对第一数据表和第二数据表进行归并连接的结果),本发明对此不作限定。
本发明实施例提供的数据表的处理方法,一方面,由于数据表的预分区数是根据需要分区的数据表的数据量和计算机允许该数据表使用的最大内存容量确定的,因此可以使得分区后的数据表中的每个分区的元组均能被成功读入内存;另一方面,由于数据表的分区键的键值统计信息可以表示数据表中该分区键的键值的分布规律,因此根据该分区键的键值统计信息,确定该分区键的键值对应的n个区间后,再根据数据表的预分区数和该n个区间,确定数据表的实际分区数,然后再将数据表中每n/k个区间对应的元组写入k个分区中对应的分区,即将数据表中n个区间对应的元组写入k个分区,从而以将数据表分为K个分区,能够尽量保证分区键的键值相同的元组都集中在一个分区中。如此,采用本发明实施例提供的数据表的处理方法对至少两个数据表进行分区后,由于该至少两个数据表中每个数据表的每个分区的元组均能被成功读入内存,并且分区键的键值相同的元组尽量都集中在一个分区中,因此能够提高归并连接的效率。
进一步地,采用本发明实施例提供的数据表的处理方法对需要进行归并连接的至少两个数据表进行分区后,由于分区键的键值相同的元组尽量都集中在一个分区中,因此还可以降低对该至少两个数据表进行归并连接的复杂度。
进一步地,采用本发明实施例提供的数据表的处理方法,由于可以以每个分区为单元对两个需要进行归并连接的数据表进行归并连接,并且可以在一个分区的所有元组处理完,而另一个分区的元组没有处理完的时候,继续将处理完的分区的下一个分区的所有元组读入内存并与没有处理完的分区的元组进行归并连接。与现有技术中在一个分区的所有元组处理完,而另一个分区的元组没有处理完的时候,会重新读入两个新的分区的所有元组继续进行归并连接相比,能够提高归并连接的准确率,并且采用本发明实施例的方法进行归并连接时更加彻底和全面。
上述主要从计算机的角度对本发明实施例提供的方案进行了介绍。可以理解的是,计算机为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,本发明能够以硬件和计算机软件的结合形式来实现。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
本发明实施例可以根据上述方法示例对计算机进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本发明实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
本发明实施例提供一种计算机,在采用对应各个功能划分各个功能模块的情况下,图6示出了该计算机的一种可能的结构示意图,该计算机包括:确定模块30和写入模块31。确定模块30用于支持计算机执行上述方法实施例中的S101-S103(包括S101a);写入模块31用于支持计算机执行上述方法实施例中的S104(包括S104a-S104c)。其中,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。
本发明实施例提供另一种计算机,在采用对应各个功能划分各个功能模块的情况下,图7示出了该计算机的一种可能的结构示意图,该计算机包括:分区模块40、获取模块41和执行模块42。分区模块40用于支持计算机执行上述方法实施例中的S201-S202;获取模块41用于支持计算机执行上述方法实施例中的S203;执行模块42用于支持计算机执行上述方法实施例中的S204(包括S204a-S204f)。其中,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。
本发明实施例中,结合图6和图7,图7中的分区模块40具体可以通过图6中的确定模块30和写入模块31实现。即本发明实施例中,结合上述方法实施例,分区模块40执行的方法与确定模块30和写入模块31共同执行的方法相同。
可选的,本发明实施例中,上述如图6和如图7所示的计算机的各个功能模块均可以采用集成的单元实现。在采用集成的单元实现的情况下,图8示出了如图6和如图7所示的计算机的另一种可能的结构示意图。该计算机包括:处理模块50和通信模块51。处理模块50用于对计算机的动作进行控制管理,例如,处理模块50用于支持计算机执行上述方法实施例中的S101-S104(包括S101a和S104a-S104c),或者支持计算机执行上述方法实施例中的S201-S204(包括S204a-S204f),和/或用于本文所描述的技术的其它过程。通信模块51用于支持计算机与其他设备的通信,例如与计算机集群中其他计算机之间的通信。如图8所示,该计算机还可以包括存储模块52,用于存储计算机的程序代码和数据。
其中,处理模块50可以是处理器或控制器,例如可以是CPU,通用处理器,数字信号处理器(digital signal processor,DSP),专用集成电路(application-specificintegrated circuit,ASIC),现场可编程门阵列(field programmable gate array,FPGA)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本发明实施例公开内容所描述的各种示例性的逻辑方框,模块和电路。该处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等等。通信模块51可以是计算机上的接口电路等。存储模块52可以是计算机中的存储器等。该计算机还可以包括系统总线,其中,处理器、接口电路和存储器可以通过系统总线相互连接。系统总线可以是外设部件互连标准(peripheral component interconnect,PCI)总线或扩展工业标准结构(extended industry standard architecture,EISA)总线等。系统总线可以分为地址总线、数据总线、控制总线等。
示例性的,本发明实施例中,该处理器具体可以为上述如图2所示的计算机中的CPU 20;该接口电路具体可以包括上述如图2所示的计算机中的IO接口21、输入单元24和显示单元25;存储器具体可以为上述如图2所示的计算机中的存储器22。系统总线具体可以为上述如图2所示的计算机中的系统总线23。对于处理器、接口电路、存储器和系统总线的相关描述均可以参见上述实施例中对如图2所示的计算机的相关描述,此处不再赘述。
可选的,本发明实施例还提供一种计算机可读存储介质,该计算机可读存储介质包括计算机执行指令,当计算机运行时,计算机的处理器执行该计算机执行指令,以使计算机执行上述方法实施例中S101-S104(包括S101a和S104a-S104c),或者S201-S204(包括S204a-S204f)所示的数据表的处理方法。
本发明实施例提供的主机的其他描述以及主机的技术效果的描述具体可以参见上述方法实施例中的相关描述,此处不再赘述。
结合本发明公开内容所描述的方法或者算法的步骤可以硬件的方式来实现,也可以是由处理器执行软件指令的方式来实现。软件指令可以由相应的软件模块组成,软件模块可以被存放于随机存取存储器(random access memory,RAM)、闪存、只读存储器(readonly memory,ROM)、可擦除可编程只读存储器(erasable programmable ROM,EPROM)、电可擦可编程只读存储器(electrically EPROM,EEPROM)、寄存器、硬盘、移动硬盘、只读光盘(CD-ROM)或者本领域熟知的任何其它形式的存储介质中。一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于ASIC中。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:快闪存储器、移动硬盘、只读存储器、随机存取存储器、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (14)
1.一种数据表的处理方法,其特征在于,应用于计算机,所述处理方法包括:
根据需要分区的数据表的数据量和所述计算机允许所述数据表使用的最大内存容量,确定所述数据表的预分区数m,m>0;
根据所述数据表的分区键的键值统计信息,确定所述分区键的键值对应的n个区间,所述n个区间中的每个区间对应所述数据表中的至少一个元组,所述分区键的键值统计信息用于表示所述数据表中所述分区键的键值的分布规律,n为正整数,m≤n;
根据所述数据表的预分区数m,确定所述数据表的实际分区数k,其中,k为m向上取整后的值,且k为n的约数;
将所述数据表中n个区间对应的元组写入k个分区,以将所述数据表分为所述k个分区,所述k个分区中每个分区包括n/k个区间对应的元组。
2.根据权利要求1所述的处理方法,其特征在于,所述根据需要分区的数据表的数据量和所述计算机允许所述数据表使用的最大内存容量,确定所述数据表的预分区数m,包括:
根据所述数据表的数据量、所述计算机允许所述数据表使用的最大内存容量和公式,确定所述数据表的预分区数m;
所述公式为:m=a*b/c,a表示所述数据表的每一列的字节数之和,b表示所述数据表的元组数,a*b表示所述数据表的数据量,c表示所述计算机内存容量的1/t,t=1或2。
3.根据权利要求1或2所述的处理方法,其特征在于,所述将所述数据表中n个区间对应的元组写入k个分区,包括:
对所述k个分区中的每个分区,执行以下步骤:
根据待写入所述分区的n/k个区间对应的分区键的键值的取值范围,将所述取值范围对应的所有元组写入所述分区。
4.根据权利要求1至3任意一项所述的处理方法,其特征在于,所述将所述数据表中n个区间对应的元组写入k个分区,包括:
在所述计算机的磁盘中创建k个文件,所述k个文件为所述k个分区;
将所述数据表中n个区间对应的元组写入所述k个文件。
5.一种数据表的处理方法,其特征在于,应用于计算机,所述计算机采用如权利要求1至4任意一项所述的处理方法对第一数据表和第二数据表进行分区,所述处理方法包括:
将所述第一数据表分为w个分区,w为正整数;
将所述第二数据表分为x个分区,x为正整数;
获取归并连接指令,所述归并连接指令中包括连接列和连接条件,所述连接列与对所述第一数据表和所述第二数据表进行分区的分区键相同,所述归并连接指令用于按照所述连接列,将所述第一数据表和所述第二数据表中满足连接条件的元组归并为一个数据表;
对所述w个分区和所述x个分区执行所述归并连接指令。
6.根据权利要求5所述的处理方法,其特征在于,所述对所述w个分区和所述x个分区执行所述归并连接指令,包括:
将所述w个分区中第y1个分区的所有元组读入所述计算机的内存,并在所述内存中按照所述连接列对所述第y1个分区的所有元组进行排序,y1为正整数,y1<w;
将所述x个分区中第y2个分区的所有元组读入所述计算机的内存,并在所述内存中按照所述连接列对所述第y2个分区的所有元组进行排序,y2为正整数,y2<x;
对所述第y1个分区的所有元组和所述第y2个分区的所有元组执行所述归并连接指令;
在所述第y1个分区中的第一数值等于所述第y2个分区中的第二数值的情况下,将所述w个分区中第y1+1个分区的所有元组和所述x个分区中第y2+1个分区的所有元组读入所述计算机的内存,所述第一数值为所述第y1个分区中连接列的最大值,所述第二数值为所述第y2个分区中连接列的最大值;
在所述第y1个分区中的第一数值大于所述第y2个分区中的第二数值的情况下,将所述x个分区中第y2+1个分区的所有元组读入所述计算机的内存;
在所述第y1个分区中的第一数值小于所述第y2个分区中的第二数值的情况下,将所述w个分区中第y1+1个分区的所有元组读入所述计算机的内存。
7.一种计算机,其特征在于,所述计算机包括:
确定模块,用于根据需要分区的数据表的数据量和所述计算机允许所述数据表使用的最大内存容量,确定所述数据表的预分区数m;并根据所述数据表的分区键的键值统计信息,确定所述分区键的键值对应的n个区间,所述n个区间中的每个区间对应所述数据表中的至少一个元组,所述分区键的键值统计信息用于表示所述数据表中所述分区键的键值的分布规律;以及根据所述数据表的预分区数m,确定所述数据表的实际分区数k,其中,m>0,m≤n,n为正整数,k为m向上取整后的值,且k为n的约数;
写入模块,用于将所述确定模块确定的所述数据表中n个区间对应的元组写入所述确定模块确定的k个分区,以将所述数据表分为所述k个分区,所述k个分区中每个分区包括n/k个区间对应的元组。
8.根据权利要求7所述的计算机,其特征在于,
所述确定模块,具体用于根据所述数据表的数据量、所述计算机允许所述数据表使用的最大内存容量和公式,确定所述数据表的预分区数m;
所述公式为:m=a*b/c,a表示所述数据表的每一列的字节数之和,b表示所述数据表的元组数,a*b表示所述数据表的数据量,c表示所述计算机内存容量的1/t,t=1或2。
9.根据权利要求7或8所述的计算机,其特征在于,
所述写入模块,具体用于对所述k个分区中的每个分区,根据待写入所述分区的n/k个区间对应的分区键的键值的取值范围,将所述取值范围对应的所有元组写入所述分区。
10.根据权利要求7至9任意一项所述的计算机,其特征在于,
所述写入模块,具体用于在所述计算机的磁盘中创建k个文件,所述k个文件为所述k个分区;并将所述数据表中n个区间对应的元组写入所述k个文件,以将所述数据表分为所述k个分区。
11.一种计算机,其特征在于,包括分区模块、获取模块和执行模块,所述分区模块采用如权利要求1至4任意一项所述的处理方法对第一数据表和第二数据表进行分区;
所述分区模块,用于将所述第一数据表分为w个分区;并将所述第二数据表分为x个分区;其中,w为正整数,x为正整数;
所述获取模块,用于获取归并连接指令,所述归并连接指令中包括连接列和连接条件,所述连接列与对所述第一数据表和所述第二数据表进行分区的分区键相同,所述归并连接指令用于按照所述连接列,将所述第一数据表和所述第二数据表中满足连接条件的元组归并为一个数据表;
所述执行模块,用于对所述分区模块分区后的所述w个分区和所述x个分区执行所述获取模块获取的所述归并连接指令。
12.根据权利要求11所述的计算机,其特征在于,
所述执行模块,具体用于将所述w个分区中第y1个分区的所有元组读入所述计算机的内存,并在所述内存中按照所述连接列对所述第y1个分区的所有元组进行排序;将所述x个分区中第y2个分区的所有元组读入所述计算机的内存,并在所述内存中按照所述连接列对所述第y2个分区的所有元组进行排序;且对所述第y1个分区的所有元组和所述第y2个分区的所有元组执行所述归并连接指令;以及在所述第y1个分区中的第一数值等于所述第y2个分区中的第二数值的情况下,将所述w个分区中第y1+1个分区的所有元组和所述x个分区中第y2+1个分区的所有元组读入所述计算机的内存;在所述第y1个分区中的第一数值大于所述第y2个分区中的第二数值的情况下,将所述x个分区中第y2+1个分区的所有元组读入所述计算机的内存;在所述第y1个分区中的第一数值小于所述第y2个分区中的第二数值的情况下,将所述w个分区中第y1+1个分区的所有元组读入所述计算机的内存;其中,y1为正整数,y1<w,y2为正整数,y2<x,所述第一数值为所述第y1个分区中连接列的最大值,所述第二数值为所述第y2个分区中连接列的最大值。
13.一种计算机,其特征在于,包括处理器、接口电路、存储器和系统总线;
所述存储器用于存储计算机执行指令,所述处理器、所述接口电路和所述存储器通过所述系统总线相互连接,当所述计算机运行时,所述处理器执行所述存储器存储的所述计算机执行指令,以使所述计算机执行如权利要求1至4任意一项所述的数据表的处理方法。
14.一种计算机,其特征在于,包括处理器、接口电路、存储器和系统总线;
所述存储器用于存储计算机执行指令,所述处理器、所述接口电路和所述存储器通过所述系统总线相互连接,当所述计算机运行时,所述处理器执行所述存储器存储的所述计算机执行指令,以使所述计算机执行如权利要求5或6所述的数据表的处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610815123.XA CN107807938A (zh) | 2016-09-09 | 2016-09-09 | 一种数据表的处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610815123.XA CN107807938A (zh) | 2016-09-09 | 2016-09-09 | 一种数据表的处理方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107807938A true CN107807938A (zh) | 2018-03-16 |
Family
ID=61569755
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610815123.XA Pending CN107807938A (zh) | 2016-09-09 | 2016-09-09 | 一种数据表的处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107807938A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108549666A (zh) * | 2018-03-22 | 2018-09-18 | 上海达梦数据库有限公司 | 一种数据表的排序方法、装置、设备及存储介质 |
CN108959510A (zh) * | 2018-06-27 | 2018-12-07 | 阿里巴巴集团控股有限公司 | 一种分布式数据库的分区级连接方法和装置 |
-
2016
- 2016-09-09 CN CN201610815123.XA patent/CN107807938A/zh active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108549666A (zh) * | 2018-03-22 | 2018-09-18 | 上海达梦数据库有限公司 | 一种数据表的排序方法、装置、设备及存储介质 |
CN108959510A (zh) * | 2018-06-27 | 2018-12-07 | 阿里巴巴集团控股有限公司 | 一种分布式数据库的分区级连接方法和装置 |
CN108959510B (zh) * | 2018-06-27 | 2022-04-19 | 北京奥星贝斯科技有限公司 | 一种分布式数据库的分区级连接方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Wang et al. | Leveraging transitive relations for crowdsourced joins | |
CN103620601B (zh) | 在映射缩减过程中汇合表 | |
Shao et al. | Managing and mining large graphs: systems and implementations | |
CN104063376A (zh) | 多维度分组运算方法及系统 | |
CN103440288A (zh) | 一种大数据存储方法及装置 | |
CN104090901A (zh) | 一种对数据进行处理的方法、装置及服务器 | |
CN104112011A (zh) | 一种海量数据提取的方法及装置 | |
CN103455489A (zh) | 一种快速构建企业关键业绩指标的方法和系统 | |
CN103714086A (zh) | 用于生成非关系数据库的模式的方法和设备 | |
CN105630803A (zh) | 文档型数据库建立索引的方法和装置 | |
US20150269234A1 (en) | User Defined Functions Including Requests for Analytics by External Analytic Engines | |
WO2021189695A1 (zh) | 分布式的数据库动态扩容方法、装置、设备及存储介质 | |
CN102169491A (zh) | 一种多数据集中重复记录动态检测方法 | |
CN114297258A (zh) | 一种获取多列数据的综合排列数据的方法与设备 | |
CN102932416B (zh) | 一种信息流任务的中间数据存储方法、处理方法及装置 | |
CN112102011A (zh) | 基于人工智能的用户等级预测方法、装置、终端及介质 | |
CN104794130A (zh) | 一种表间关联查询方法和装置 | |
CN107807938A (zh) | 一种数据表的处理方法及装置 | |
CN105468703A (zh) | 一种原因追溯方法 | |
CN103365923A (zh) | 用于评估数据库的分区方案的方法和装置 | |
CN104598485B (zh) | 处理数据库表的方法和设备 | |
CN111930897A (zh) | 专利检索方法、装置、电子设备及计算机可读存储介质 | |
CN108920601A (zh) | 一种数据匹配方法及装置 | |
CN104050264A (zh) | 一种生成sql语句的方法和装置 | |
CN107657050A (zh) | 一种基于“用归并算法计算一对一join、一对多join”的对位分段并行方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20180316 |
|
WD01 | Invention patent application deemed withdrawn after publication |