CN110019231B - 一种并行数据库动态关联的方法及节点 - Google Patents
一种并行数据库动态关联的方法及节点 Download PDFInfo
- Publication number
- CN110019231B CN110019231B CN201711432067.2A CN201711432067A CN110019231B CN 110019231 B CN110019231 B CN 110019231B CN 201711432067 A CN201711432067 A CN 201711432067A CN 110019231 B CN110019231 B CN 110019231B
- Authority
- CN
- China
- Prior art keywords
- node
- association
- tuple
- key
- identifier
- 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.)
- Active
Links
Images
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/2453—Query optimisation
- G06F16/24532—Query optimisation of parallel queries
-
- 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
-
- 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/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2471—Distributed queries
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Fuzzy Systems (AREA)
- Mathematical Physics (AREA)
- Probability & Statistics with Applications (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例提供一种并行数据库动态关联的方法及节点。所述方法包括接收由管理节点发送的关联指令;若判定需要对第一表进行重分布,则依次提取出第一表分片中的第一元组,根据分布函数得到第一分布值;若第一分布值与第一节点分布值不同,则将第一元组发送给第二节点,以使第二节点,根据第一关联键和第二关联健将接收到的第一元组与存储的第二表分片进行关联操作,以得到关联元组,然后所述第二节点将得到的关联元组发送给所述管理节点,本发明实施例通过在判定需要对所述第一表进行重分布后,在每个节点都对自身的第一表分片中的第一元组依次进行重分布,并将第一元组和第二表分片进行关联操作,进而不容易造成节点故障,且关联效率提高。
Description
技术领域
本发明实施例涉及数据存储技术领域,尤其涉及一种并行数据库动态关联的方法及节点。
背景技术
现在的分布式数据库普遍采用多节点数据库并行工作模式,如大规模处理系统(Massively Parallel Processing,MPP)架构等,将海量数据通过一定的算法分散到不同的节点,使每一个数据库节点中的数据量不至于太大,在执行复杂的查询时有助于缩短执行查询时需要的时间,通过并行处理来提高整体查询性能。目前数据库中的大部分事实表数据根据定义的分布键散列后均匀分布在数据库的不同节点中。由于数据库中涵盖的事实表种类繁多,因此各个表作为分布键的列定义也不尽相同。如通常我们使用手机号码作为大部分表的分布键的定义,但是在有些情况下也可能会使用身份证做一些表的分布键定义。在分布式数据库环境下的连接方法中,涉及关联的几个表的分布键(Hash key)和关联键(Join key)如果相同,则查询统计时,相关表的数据只会在同节点内部进行链接,是效率最高的方式。在一些较为简单的查询场景下,参与到查询中的表可以按照相同的字段定义分布键,在执行查询操作时优化器会优先考虑同分布键的关联连接方法,连接操作以本地方式在数据所在的数据库节点中执行,在节点内完成连接后只需把连接后的结果发送到其他汇总节点,这是数据库分区间连接效率最高的方式。然而在现实的生产环境下,运行的大部分查询业务都比较复杂,执行连接操作的表定义的分布键很可能不同,而且相关联的等式连接谓词列可能不是分布键定义中的列,这样的情况下数据库优化器无法选择使用节点内的关联连接方式,而极有可能选择另外一种效率较低的交叉关联的连接方式,每个节点的数据都会被重新分布传送到其他的节点,然后重新进行关联。对于运营商的实际应用,根据应用的具体要求,有时MPP不能保证数据的Hash分布键与关联键一致,这时在MPP内部就要发生动态Hash重分布,从而导致MPP内部在执行关联运算时的性能下降。MPP通过列式存储,和基于列式数据的压缩,减少在IO时或者数据重分布时的数据吞吐,比较基于行式的数据存储具有相当大的优势,但当需要进行Hash重分布的数据量较大时,这种通过动态Hash重分布的关联运算执行代价仍较大。
为解决上述问题,如现在经分系统使用的分区数据库中,当多个大表进行关联的时候,如果表的分布键不同,现有技述需要使用表队列在各个分区间分发传递数据,在执行的过程中会用到系统临时表空间存放表队列数据。当根据访问计划生成表队列的新分布键数据存在数据倾斜现象时,数据会集中到某个节点上,导致该节点上的临时表空间用尽,查询失败事务回滚。由于访问计划选择的分布键是group by等语句中的列,通常不是原始表中的分布键,因此存在数据倾斜现象的概率比较高,使得系统发生临时表空间用尽导致查询失败的情况经常出现,对正常生产运行造成了严重影响。
可见现有技术中采用临时表空间的方式在进行大表关联时容易造成节点故障,且关联效率低下等问题。
发明内容
本发明实施例提供一种并行数据库动态关联的方法及节点,用以解决现有技术中容易造成节点故障,且关联效率低下等问题。
第一方面,本发明实施例提供了一种并行数据库动态关联的方法,包括:
第一节点接收由管理节点发送的关联指令,其中所述关联指令至少包括第一表的第一标识和第一关联键,以及第二表的第二标识和第二关联键;
若所述第一关联键与预存所述第一表的第一分布键不同,则判定需要对所述第一表进行重分布,所述第一节点根据第一标识找到存储的第一表分片,所述第一表分片为所述第一表中所有第一元组的一个子集,依次提取出所述第一表分片中的第一元组,每个第一元组至少包含与所述第一关联键相对应的第一键值,并根据预设的分布函数得到与所述第一键值相对应的第一分布值;
若所述第一分布值与预存的第一节点分布值不同,则所述第一节点将所述第一元组发送给与所述第一分布值相对应的第二节点,以使所述第二节点在接收到所述第一元组后,根据所述第一关联键和第二关联健将接收到的第一元组与所述第二节点存储的第二表分片进行关联操作,以得到关联元组,其中所述第二表分片与所述第二标识相对应,为所述第二表的一个子集,然后所述第二节点将得到的关联元组发送给所述管理节点。
第二方面,本发明实施例提供了一种用于并行数据库动态关联的节点,包括:
接收模块,用于接收由管理节点发送的关联指令,其中所述关联指令至少包括第一表的第一标识和第一关联键,以及第二表的第二标识和第二关联键;
重分布模块,用于若所述第一关联键与预存所述第一表的第一分布键不同,则判定需要对所述第一表进行重分布,根据第一标识找到存储的第一表分片,所述第一表分片为所述第一表中所有第一元组的一个子集,依次提取出所述第一表分片中的第一元组,每个第一元组至少包含与所述第一关联键相对应的第一键值,并根据预设的分布函数得到与所述第一键值相对应的第一分布值;
发送模块,用于若所述第一分布值与预存的第一节点分布值不同,则将所述第一元组发送给与所述第一分布值相对应的第二节点,以使所述第二节点在接收到所述第一元组后,根据所述第一关联键和第二关联健将接收到的第一元组与所述第二节点存储的第二表分片进行关联操作,以得到关联元组,其中所述第二表分片与所述第二标识相对应,为所述第二表的一个子集,然后所述第二节点将得到的关联元组发送给所述管理节点。
第三方面,本发明实施例还提供了一种电子设备,包括:
处理器、存储器、通信接口和总线;其中,
所述处理器、存储器、通信接口通过所述总线完成相互间的通信;
所述通信接口用于该电子设备的通信设备之间的信息传输;
所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如下方法:
第一节点接收由管理节点发送的关联指令,其中所述关联指令至少包括第一表的第一标识和第一关联键,以及第二表的第二标识和第二关联键;
若所述第一关联键与预存所述第一表的第一分布键不同,则判定需要对所述第一表进行重分布,所述第一节点根据第一标识找到存储的第一表分片,所述第一表分片为所述第一表中所有第一元组的一个子集,依次提取出所述第一表分片中的第一元组,每个第一元组至少包含与所述第一关联键相对应的第一键值,并根据预设的分布函数得到与所述第一键值相对应的第一分布值;
若所述第一分布值与预存的第一节点分布值不同,则所述第一节点将所述第一元组发送给与所述第一分布值相对应的第二节点,以使所述第二节点在接收到所述第一元组后,根据所述第一关联键和第二关联健将接收到的第一元组与所述第二节点存储的第二表分片进行关联操作,以得到关联元组,其中所述第二表分片与所述第二标识相对应,为所述第二表的一个子集,然后所述第二节点将得到的关联元组发送给所述管理节点。
第四方面,本发明实施例还提供了一种存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如下方法:
第一节点接收由管理节点发送的关联指令,其中所述关联指令至少包括第一表的第一标识和第一关联键,以及第二表的第二标识和第二关联键;
若所述第一关联键与预存所述第一表的第一分布键不同,则判定需要对所述第一表进行重分布,所述第一节点根据第一标识找到存储的第一表分片,所述第一表分片为所述第一表中所有第一元组的一个子集,依次提取出所述第一表分片中的第一元组,每个第一元组至少包含与所述第一关联键相对应的第一键值,并根据预设的分布函数得到与所述第一键值相对应的第一分布值;
若所述第一分布值与预存的第一节点分布值不同,则所述第一节点将所述第一元组发送给与所述第一分布值相对应的第二节点,以使所述第二节点在接收到所述第一元组后,根据所述第一关联键和第二关联健将接收到的第一元组与所述第二节点存储的第二表分片进行关联操作,以得到关联元组,其中所述第二表分片与所述第二标识相对应,为所述第二表的一个子集,然后所述第二节点将得到的关联元组发送给所述管理节点。
本发明实施例提供的并行数据库动态关联的方法及节点,通过在判定需要对所述第一表进行重分布后,在每个节点都对自身的第一表分片中的第一元组依次进行重分布,并发送给相对应的其它节点,再同时对接收到的第一元组和第二表分片进行关联操作,进而不容易造成节点故障,且关联效率提高。
附图说明
图1为本发明实施例的并行数据库动态关联的方法流程图;
图2为本发明实施例的另一并行数据库动态关联的方法流程图;
图3为本发明实施例的用于并行数据库动态关联的节点结构示意图;
图4为本发明实施例的另一用于并行数据库动态关联的节点结构示意图;
图5为本发明实施例的电子设备结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例所采用的数据库为并行数据库,包括一个管理节点和节点集群,其中所述节点集群由多个用于并行处理的节点组成包括第一节点,其中所述管理节点用于向所有节点发送相关指令,例如关联指令等,以使节点执行相关的操作,例如关联操作。所述并行数据库预设分布函数,例如hash函数,根据分布函数给每个节点分配一个唯一对应的节点分布值。所述并行数据库保存有多个二维数据表,每个数据表的一行称为元组,一列称为键,每个数据表包含有一个分布键,然后根据分布函数对数据表中分布键所指列中的键值通过运算得到分布值,例如将hash函数作来分布函数就可以得到hash值,并将数据表中与该分布值相对应的元组组成一个数据表分片保存到节点分布值与所述分布值相同的节点中。当然具体的保存方式由所述并行数据库设计方案决定,例如可以以每个节点为主节点分别设置预设数量的副节点,并由副节点保存主节点全部或者部分的数据。在下面的实施例中都以第一节点对第一表和第二表进行关联为例进行举例说明,其中第一节点相对应的节点分布值为第一节点分布值,所述第一节点保存有第一表中的第一表分片和第二表中的第二表分片,所述第一表由第一元组组成,所述第二表由第二元组组成,且所述第一表和第二表分别根据第一分布键和第二分布键在所述节点集群中进行分布。
图1为本发明实施例的并行数据库动态关联的方法流程图,如图1所示,所述方法包括:
步骤S01、第一节点接收由管理节点发送的关联指令,其中所述关联指令至少包括第一表的第一标识和第一关联键,以及第二表的第二标识和第二关联键。
当用户想要从并行数据库中查询某个数据时,用户会先通过终端连入数据库,并由终端向管理节点发送一个查询语句,例如要求查询包含有数据A和数据B的信息。所述管理节点通过优化器对查询语句进行解析,例如通过解析得到数据A位于第一表,而数据B位于第二表,则判定需要将所述第一表和第二表先进行关联,为此,所述管理节点会向所有的节点,包括所述第一节点,发送关联指令,所述关联指令至少包括第一表的第一标识和第一关联键,以及第二表的第二标识和第二关联键,例如:
Join Operation=R(a)UN S(b)=select R.c,S.d From R,S where R.a=R.b,
其中所述Join Operation表示关联指令,所述R为第一表,所述S为第二表,所述a为第一表的第一关联键,所述b为第二表的第二关联键,所述UN表示关联,所述c为第一表的第一分布键,所述d为第二表的第二分布键,所述第一关联键和第二关联键为第一表和第二表进行关联时相互连接的列,即通过比较第一表中第一关联键的键值与第二表中第二关联键的键值,并将具有相同值的元组相互连接。例如:
第一表如下:
员工号 | 性别 | 工资等级 |
10 | 男 | 1 |
11 | 女 | 2 |
12 | 女 | 1 |
13 | 男 | 2 |
第二表如下:
工资级别 | 工资 |
1 | 1000 |
2 | 1200 |
3 | 1400 |
4 | 2000 |
第一关联键为工资等级,第二关联键为工资级别,则第一表和第二表关联后得到的结果为:
员工号 | 性别 | 工资等级 | 工资级别 | 工资 |
10 | 男 | 1 | 1 | 1000 |
11 | 女 | 2 | 2 | 1200 |
12 | 女 | 1 | 1 | 1000 |
13 | 男 | 2 | 2 | 1200 |
在选择第一关联键和第二关联键时往往使用的是具有相同实际含义的键,例如上表中所述工资等级和工资级别其实具有相同的含义,但可能会因为保存时来源不同,或者其它原因,使得两个键的名称产生了区别。当然在实际的使用过程中,也会出现需要对多于两个表进行关联的场景,但为了表述方便在下面的实施例中都只以第一表与第二表的关联为例进行举例说明。
步骤S02、若所述第一关联键与预存所述第一表的第一分布键不同,则判定需要对所述第一表进行重分布,所述第一节点根据第一标识找到存储的第一表分片,所述第一表分片为所述第一表中所有第一元组的一个子集,依次提取出所述第一表分片中的第一元组,每个第一元组至少包含与所述第一关联键相对应的第一键值,并根据预设的分布函数得到与所述第一键值相对应的第一分布值。
在所述第一节点接收到所述管理节点发送的关联指令后,通过对所述关联指令的解析可以得到所述第一关联键a和第二关联键b,分别比较所述第一关联键a与存储的第一表的第一分布键c,以及第二关联键b和存储的第二表的第二分布键d。若两者均相同,即a=c&b=d,则判定所述第一表和所述第二表均无需进行重分布,只需要在本地对与所述第一标识相对应的第一表分片和所述第二标识相对应的第二表分片进行关联,然后将关联的结果发送给所述管理节点。而若所述第一关联键a与第一分布键c不同,即a≠c,则判定所述第一表需要进行重分布,即让第一表以第一关联键a作为新的第一分布键来重新分配每个节点保存的第一表分片的内容;同样若所述第二关联键b与第二分布键d不同,即b≠d,则判定所述第二表也需要进行重分布,即让第二表以第二关联键b作为新的第二分布键来重新分配每个节点保存的第二表分片的内容。为了表述方便,在下面的实施例中都只以判定第一表需要进行重分布,而第二表不需要进行重分布为例进行举例说明,即a≠c&b=d。
当然,上述判定过程也可以由所述管理节点来进行,然后将判断的结果包含在关联指令中发送给所有的节点,此时,所述第一节点接到所述关联指令后就可以直接开始对所述第一表进行重分布,而无需再进行判定过程。
所述第一节点先根据接收到的第一标识在表空间找到存储的第一表分片,然后依次提取出所述第一表分片中的第一元组,将根据每个元组中与第一关联键相对应的第一键值,通过预设的分布函数得到与所述第一键值相对应的第一分布值。
步骤S03、若所述第一分布值与预存的第一节点分布值不同,则所述第一节点将所述第一元组发送给与所述第一分布值相对应的第二节点,以使所述第二节点在接收到所述第一元组后,根据所述第一关联键和第二关联健将接收到的第一元组与所述第二节点存储的第二表分片进行关联操作,以得到关联元组,其中所述第二表分片与所述第二标识相对应,为所述第二表的一个子集,然后所述第二节点将得到的关联元组发送给所述管理节点。
将所述第一元组得到的第一分布值与所述第一节点预存的第一节点分布值进行比较,若相同,则可以判定该元组无需被分配到其它节点,所述第一节点先根据第二标识在表空间找到存储的第二表分片,然后所述第一节点在所述第二表分片中找到与所述第一元组相对应的第二元组,即所述第一元组在第一关联键的第一健值与第二元组在第二关联键的第二键值相同,然后将所述第一元组与第二元组进行连接以得到关联元组。上述关联操作可以由传统的SQL执行引擎处理,将所述第一元组与第二表分片通过嵌套循环的方式进行关联运算,具体的关联过程可以由SQL执行引擎的处理方式决定。为了表述方便在下面的实施例中都只以SQL执行引擎来处理关联操作为例进行举例说明。
而若所述第一分布值与第一节点分布值不同,则判定该第一元组需要被重新分配到其它节点,所述第一节点会先查询与所述第一分布值相对应的第二节点,然后将所述第一元组发送给所述第二节点,例如有N1、N2和N3共三个节点,且它们的节点分布值分别为n1、n2和n3,而所述第一分布值为n2,则将该第一元组发送给N2。
所述第二节点在接收到其它节点发送的第一元组后,同样会根据所述第一关联键和第二关联键将接收到的第一元组与自身存储的第二表分片在自身的SQL执行引擎中进行关联操作,以得到关联元组。然后所述第二节点会将得到的关联元组发送给所述管理节点。
在整个并行数据库中,每个节点都是等同的,它们接收到的关联指令是相同的,执行关联指令的过程也是等同的,即每个节点都会执行对上述第一节点所述的对于自身存储的第一表分片的重分布过程,也会从其它节点接收到与经过重分布后的第一元组,然后执行后续的关联操作。
所述第一节点也会接收由其它节点经过重分布过程后发送的与第一节点相对应的第一元组,然后根据所述第一关联键和第二关联键将接收到的第一元组与第一节点的第二表分片在SQL执行引擎中进行关联操作,以得到关联元组。
当所述第一节点判定与自身相关的关联操作已经完成时,例如,存储的第一表分片已经完成了所有第一元组的重分布工作,且已经对所有接收到的第一元组执行完了关联操作,则可以认定所述第一节点已经完成与自身相关的关联操作;或者也可以是接到来自于管理节点的结束指令时认定完成所有关联操作。此时,所述第一节点会将得到的所有关联元组发送给管理节点。
当然所述第一节点也可以在进行关联操作的同时,周期性的将已经得到的关联元组发送给所述管理节点。所述管理节点再会将从每个节点发送过来的关联元组进行组合以得到完整的第一表与第二表的关联表。进而可以在关联表中对所述用户通过终端发送的查询语句执行查询操作,例如在关联表中找出包含有数据A和数据B的关联元组,然后发送给所述终端来展示给用户。
本发明实施例通过在判定需要对所述第一表进行重分布后,在每个节点都对自身的第一表分片中的第一元组依次进行重分布,并发送给相对应的其它节点,再同时对接收到的第一元组和第二表分片进行关联操作,进而不容易造成节点故障,且关联效率提高。
图2为本发明实施例的另一并行数据库动态关联的方法流程图,进一步地,所述第一表分片中的所有元组被划分成至少一个待分布数据包,其中每个待分布数据包的数据包信息至少包括包序号,相应地,所述步骤S02-S03,具体为:
步骤S021、若所述第一关联键与预存所述第一表的第一分布键不同,则判定需要对所述第一表进行重分布,所述第一节点根据第一标识找到存储的第一表分片,所述第一表分片为所述第一表中所有第一元组的一个子集,依次提取出所述第一表分片中的待分布数据包,并根据预设的分布函数得到与所述待分布数据包中每个第一元组的第一键值相对应的第一分布值。
为了能够提高数据处理的效率,以及减少相互传输数据时产生的信令消耗,在进行重分布和关联操作时,可以以数据包而不是元组为单位来进行处理。具体每个数据包的大小,可以根据实际的需要来进行设计。
首先所述第一节点保存的第一表分片中划分成多个待分布数据包,且每个待分布数据包的数据包信息中至少包括有包序号,该包序号可以是全并行数据库唯一,或者也可以在第一节点是唯一的,将第一表分片中的所有第一元组均匀得分配到每个待分布数据包中。
在所述第一节点判定需要对所述第一表进行重分布后,会从所述第一表分片中依次提取出所述第一分片中的待分布数据包,当然,如果所述第一节点处理能力强大,可以利用更多的线程来同时处理多个待分布数据包,也可以一次性提取出一批待分布数据包。为了表述方便,在下面实施例中都只以每次只提取一个待分布数据包为例进行举例说明。
然后所述第一节点会对提取出来的待分布数据包中的第一元组的第一健值分别进行分布函数的计算以得到每个第一元组的第一分布值。
步骤S031、若所述第一分布值与存储的第一节点分布值不同,则所述第一节点根据每个第一元组的第一分布值,将所述待分布数据包中的第一元组分配到发送队列中相对应的待关联数据包中,其中所述待关联数据包的数据包信息至少包括所述包序号和接收节点标识,其中所述接收节点标识与保存的第一元组的第一分布值相对应。
将待分布数据包中的每个第一元组的第一分布值与第一节点分布值进行比较,若相同,则该第一元组和所述第二表分片将由SQL执行引擎进行关联操作,而若不相同,则需要将该第一元组存储到缓存中发送队列的相对应的待关联数据包中,所述待关联数据包的数据包信息继承了所述待分布数据包的数据包信息,至少包括有待分布数据包的包序号,还包括有接收节点标识和发送节点标识,其中所述接收节点标识与保存在该关联数据包中的第一元组的第一分布值相关,例如,接收节点标识为节点N2的节点标识,则保存在该关联数据包的第一元组的第一分布值均为n2,而所述发送节点标识则为所述第一节点的第一节点标识。至此所述数据包信息就可以唯一性得表示相对应的关联数据包。
当然为使信息更加完善所述关联数据包的数据包信息还可以包括:关系表名称、新分布值、旧分布值、数据块号等。这些数据包信息都可以根据实际的需要来进行调整。
步骤S032、所述第一节点将所述发送队列中的待关联数据包发送给与所述接收节点标识相对应的第二节点,以使所述第二节点将所述待关联数据包存入接收队列中,然后所述第二节点依次提取所述接收队列中的待关联数据包,根据所述第一关联键和第二关联键将所述关联数据包中的每个第一元组与所述第二节点的第二表分片进行关联操作,以得到所述关联元组,再将得到的关联元组发送给所述管理节点。
所述第一节点会定期提取所述发送队列中的待关联数据包,然后根据所述待关联数据包的数据包信息中的待接收节点标识,将所述待关联数据包发送给与所述接收节点标识相对应的第二节点。所述的定期可以是根据预设的时间阈值段,每间隔一个时间阈值段提取一次,每次可以同时将多个接收节点标识相同的待关联数据包同时发送,也可以是根据发送队列中的顺序依次发送每个待关联数据包。具体的发送模式可以根据实际的需要来进行设定,在此不作具体限定。
所述第二节点会将接收到的待关联数据包存入所述第二节点缓存的接收队列中。然后所述第二节点会根据接收顺序依次从所述接收队列中提取出待关联数据包,分别将其中的每个第一元组根据第一关联键和第二关联键与所述自身的第二表分片在自身的SQL执行引擎中进行关联操作,以得到一定数量的关联元组,然后再发送给所述管理节点。
与所述第二节点相同,所述第一节点的缓存中也包括有接收队列,用来存储由其它节点发送给所述第一节点的待关联数据包,然后存入该接收队列中。然后所述述第一节点再依次提取待关联数据包,分别将其中的每个第一元组根据第一关联键和第二关联键与自身的第二表分片在SQL执行引擎中进行关联操作,以得到相对应的关联元组。然后所述第一节点会将得到的关联元组都发送给所述管理节点。由管理节点对从各个节点收到的关联元组进行组合,再查询用户需要的结果。
本发明实施例通过在判定需要对所述第一表进行重分布后,在每个节点都对自身的第一表分片中的待分布数据包依次进行重分布为待关联数据包存入发送队列,并发送给相对应的其它节点,同时接收到的待关联数据存入接收队列,并将所述待关联数据包中的第一元组和第二表分片进行关联操作,进而不容易造成节点故障,且关联效率提高。
基于上述实施例,进一步地,所述第一节点为第三节点的副节点,相应地,所述方法还包括:
所述第一节点接收由所述管理节点发送的所述第三节点的第一表分片和第二表分片并存入副本空间;
所述第一节点接收由其它节点发送的与所述第三节点相对应的待关联数据包,并存入所述副本空间的副本接收队列中。
为了保证数据的完整性,防止在节点出现故障的情况下发生数据的丢失,并行数据库往往会以每个节点为主节点,将另一个节点作为副节点,然后所述副节点会在副本空间保存并同步主节点全部或者部分的数据。具体每个主节点相对应的副节点的数量,以及每个副节点在副本空间中保存并同步的主节点的数据内容可以根据实际并行数据库的要求而设定。
在本发明实施例只是其中的一个举例,将所述第一节点作为第三节点的副节点,所述第三节点与上述实施例中的第二节点相同,均只代表在所述并行数据库的节点集群中除所述第一节点外的任一节点。
在并行数据库接收到第一表和第二表时,会先将第一表和第二表根据分布函数划分成与每个节点相对应的第一表分片和第二表分片并发送给每个节点。所述第一节点会接收到由管理节点发送的所述第一节点的第一表分片和第二表分片,并进行储存到表空间。
另外,所述第一节点作为第三节点的副节点,还会接收到由管理节点发送的第三节点的第一表分片和第二表分片,并将所述第三节点的第一表分片和第二表分片存入副本空间中。由此所述第一节点的副本空间与所述第三节点表空间存储的内容是相同的。
在所述管理节点向每个节点发送所述关联指令之后,每个节点都会对自身的第一表分片进行重分布,并将与第三节点相对应的待关联数据包发送给所述第三节点,同样由于所述第一节点为所述第三节点的副节点,则所有发送给第三节点的与所述第三节点相对应的待关联数据包也会同步发送给所述第一节点,然后由所述第一节点将这些待关联数据包依次存入所述副本空间的副本接收队列中,这其中也包括由所述第一节点发送给第三节点的待关联数据包。
另外为了保证所述第一节点的副本空间与第三节点所保存数据的同步,还会接收到所述第三节点发送的同步信息,并根据同步信息得到第三节点当前存储的数据状态,包括:待分布数据包、发送队列中待关联数据包和完成关联操作后得到的关联元组等的状态。所述第一节点均会同步到副本空间中的待分布数据包、副本发送队列中待关联数据包和关联元组等。也就是要在所述第一节点的副本空间中尽可能得镜像出第三节点存储的数据状态。
本发明实施例通过给每个节点设置副节点,并在副节点中的副本空间中同步相对应节点的数据存储状态,从而避免了因为节点故障而造成的数据丢失,提高了数据的稳定性和可持续性。
基于上述实施例,进一步地,所述待关联数据包还包括关联日志;相应地,所述第一节点接收由其它节点发送的与所述第三节点相对应的待关联数据包,并存入副本空间的副本接收队列中;具体为:
所述第一节点接收由其它节点发送的与所述第三节点相对应的待关联数据包,存入所述副本接收队列中,并提取出所述关联日志存入所述副本空间的副本日志队列;相应地,所述方法还包括:
所述第一节点接收所述第三节点发送的新的关联日志,并更新所述副本日志队列中相对应的关联日志,其中所述新的关联日志由所述第三节点在接收到其它节点发送的待关联数据包并存入所述接收队列后,提取出所述关联日志加入接收标识并存入日志队列后,将新的关联日志发送给所述第一节点,或者由所述第三节点判定已经完成所述待关联数据包中所有第一元组与所述第二表分片的关联操作,并将所述关联日志中的接收标识改为关联标识后,将新的关联日志发送给所述第一节点。
如上所述,所述第一节点可以通过接收所述第三节点发送过来的同步信息,使所述第一节点的副本空间与所述第三节点保持一致,为了能够保证同步信息能够快速传达,且尽量不占用传输资源,需要尽量减少同步信息的大小,例如可以采用日志的形式将第三节点中数据的状态发送给第一节点即可。
在本发明实施例中仅以所述关联数据包的同步过程为例进行举例说明。在所述关联数据包中加入关联日志,其中所述关联日志可以包括有可以唯一对应该待关联数据包的发送节点标识、接收节点标识和包序号等信息。
所述第一节点会接收到基它节点发送的与所述第三节点相对应的待关联数据包,并将这些待关联数据包存入副本空间的副本接收队列中,并提取出该待关联数据包的关联日志并存入副本空间的副本日志队列中。
所述第三节点在对自身接收队列中的所述待关联数据包进行处理的过程中会对与待关联数据包的关联日志进行更新,并将更新的关联日志发送所述第一节点。首先所述第三节点在接收到由其它节点发送的与所述第三节点相地应的待关联数据包时会将所述待关联数据包存入自身的接收队列中,并提取出该待关联数据包中的关联日志,在该关联日志中记录接收标识,并存入日志队列,然后将新的关联日专发送给所述第一节点。另外所述第三节点还会在判定完成所述待关联数据包中所有第一元组与自身的第二表分片的关联操作后,将所述待关联数据包的关联日志中接收标识改为关联标识,然后再次将新的关联日志发送给所述第一节点。
所述第一节点在接收到所述第三节点发送的新的关联日志后就会在副本日志队列中找到相对应的关联日志并进行更新,即在该关联日志中记录下接收标识或者关联标识,并回复接收成功消息。
另外,由上述实施例可知,并行数据库为每个节点都设置了一个副节点,即所述第一节点在作为第三节点的副节点的同时,也有一个其它节点作为第一节点的副节点。
所述第一节点也会存在日志队列,并且在对所述接收队列中的待关联数据包进行关联操作的过程中,更新所述日志队列中与所述待关联数据包相对应的关联日志,然后将更新后的关联日志发送给所述第一节点的副节点。
另外,在所述第一节点判定所述副节点已经将关联标识更新到相对应的关联日志后,还可以将日志队列中相对应的关联日志的关联标识更改为关联完成标识。
本发明实施例通过在待关联数据包中加入关联日志,从而通过同步该关联日志来使所述副节点同步相关内容,进而避免了因为节点故障而造成的数据丢失,提高了数据的稳定性和可持续性。
基于上述实施例,进一步地,所述方法还包括:
所述第一节点接收由所述管理节点发送的接管指令;
在所述副本日志队列中找出没有关联标识的所有关联日志,再在所述副本接收队列中找到相对应的待关联数据包,然后依次对找到的待关联数据包中所有第一元组与所述副本空间中的第二表分片执行关联操作。
如果并行数据库没有给节点设置副节点,则由于每个节点保存有第一表和第二表的一部分,且分别各自执行关联操作,此时如果有一个节点出现有故障,该故障可能是通信故障,也有可以是节点本身出现的无法运行的状态,就会造成数据的丢失和关联结果的不完整。如果该故障节点只是短时离线,那故障节点还可以通过向管理节点和其它节点报告当前的状态以及关联操作的进度,从故障发生前的断点处继续执行后续的工作,而如果故障节点没有及时恢复,那与该故障节点相关的关联操作都需要重头开始,并试图重启或者替换掉该故障节点。
而若并行数据库为每个节点都设置了相应的副节点,则在并行数据库中若有任一节点发生故障,所述管理节点就可以让相对应副节点来继续接管故障节点的工作来保证整个并行数据库的正常动转。
例如当所述第三节点发生故障时,所述第一节点就会接收到所述管理节点发送的接管指令,以指示所述第一节点继续完成所述第三节点未完成的工作。由于所述第一节点一直通过同步信息来镜像所述第三节点,所以可以通过副本空间中的数据状态来接管第三节点未完成的工作。
本发明实施例中仅是其中的一个举例说明,在接收到所述接管指令后,所述第一节点会从所述副本日志队列中找出没有关联标识的所有关联日志,然后在所述副本空间的接收队列中找到与这些关联日志相对应的待关联数据包,再按接收到的顺序依次提取找到的待关联数据包,并对其中所有第一元组与所述副本空间中的第二表分片在SQL执行引擎中执行关联操作。
其实为了方便起见,所述第一节点在接到所述第三节点的新的关联日志时,在发觉所述关联日志记录为关联标识后,就可以将与该关联日志相对应的待关联数据包从副本接收队列中删除。从而在接到接管指令后,直接根据副本接收队列中当前保存的待关联数据包来继续第三节点的工作。
相应地,由于第一节点的副本空间完全镜像了所述第三节点,所以,所述第一节点也可以根据所述副本空间中的待分布数据包、副本发送队列中的待关联数据包和得到的关联元组,继续执行所述第三节点还没有完成的其它工作。
此时的第一节点相当于是第一节点和第三节点的合体,同时处理两个节点的工作。显然所述第一节点的工作负载会加大,如果在所有的工作完成前,所述第三节点又从故障中恢复,则所述第一节点依然可以通过与第三节点的同步信息,将第三节点的工作交还给第三节点。
本发明实施例在第三节点出现故障时,所述第一节点可以通过与第三节点的同步信息包括并联日志等,接管所述第三节还没有完成的工作,从而能够动态得对故障节点的任务进行调整,且提高关联效率。
基于上述实施例,进一步地,所述方法还包括:
所述第一节点接收由所述管理节点发送的副本切分指令,所述副本切分指令至少包括切分方式;
所述第一节点根据所述切分方式和所述副本日志队列中的关联日志,从所述副本接收队列中提取出需要由所述第一节点处理的待关联数据包存入切分队列中,并对所述切分队列中的待关联数据包中所有第一元组与所述副本空间中的第二表分片执行关联操作。
由于每个节点都对所述第一表分片进行了重分布,所以有可能会出现经过重分布后的严重倾斜现象,也就是各个节点重分布后的不均衡,例如,共了三个节点N1、N2和N3执行关联操作,在重分布前,每个节点所存储的第一表片段大小一样,都包含有10个第一元组,但经过重分布后可知与节点N1相关的第一元组为5个,与节点N2相关的第一元组为5个,而与节点N3相关的第一元组为20个,由此可知节点N3的关联工作量为其它两个节点的四倍,造成了严重倾斜现象。此时为了能够增加整个并行数据库的关联效率,需要采用负载均衡策略,也就是通过将节点N3的部分工作交由他的副节点来执行以减轻节点N3的工作压力。
如上所述,由于所述第一节点为第三节的副节点,所以当所述第三节点出现如上述节点N3的严重倾斜现象时,所述管理节点会向所述第一节点发送一个副本切分指令,所述副本切分指令至少包括切分方式,也就是指明将第三节点的哪些工作交由第一节点来完成。例如,该切分方式可以是接管所述副本接收队列中一半或者全部待关联数据包的工作。
所述第一节点会根据副本日志队列中保存的关联日志和接收到的切分方式,将副本接收队列中还没有完成关联操作的待关联数据包根据切分方式提取出需要由所述第一节点处理的待关联数据包存入副本空间的切分队列中,然后再对所述切分队列中的每个待关联数据包中所有第一元组与所述副本空间中的第二表分片在SQL执行引擎进行关联操作。
同时所述第三节点也会收到与所述副本切分指令相对应的指令,在接收队列中将被第一节点接管的待关联数据包剔除出去。
当然所述副本切分指令也可以是所述第三节点根据预先的设定,在发觉自身的工作压力超过一个阈值后,主动向所述第一节点发送需要第一节点协助处理部分工作内容,例如,可以将需要由第一节点协助处理的副本接收队列中的待关联数据包的关联日志发送给所述第一节点。
在具体的执行过程中所述管理节点会不断得监控每个节点的工作情况,然后不断得调整各个节点间的平衡,以最终确保全部的工作能够高效得完成。
本发明实施例通过管理节点监控各个节点的工作情况并加以调整每个节点的工作压力,从而提高关联效率,并最终确保全部的工作能够高效完成。
与现有技术中基于临时表空间的动态关联进行比较,现有技术中会将动态关联执行步骤分成两步,一个步骤对需要重分布的第一表进行节点间重分布,在各个节点上生成临时表空间,之后通过类似静态关联的方式执行关系间关联。由于重分布的数据作为临时表文件需要落地到磁盘,所以执行过程中要在重分布的接收节点上发生输入输出IO,这会增加执行中的IO代价,这种方式下的计算代价:
Cost_total=(1)Cost(重分布前数据本地读IO+重分布计算)+(2)Cost(重分布的传输IO)+(3)Cost(重分布后数据本地写IO)+(4)Cost(重分布后数据本地读IO+本地上数据关联运算)。
这其中,在(3)的代价项中,临时表空间数据会在磁盘上落地时产生IO,并且在(4)的步骤时重新对这部分落地数据进行磁盘读操作,而这些IO所产生代价正成为了动态关联执行时的重要瓶颈,而对于(1)(2)步骤,通过并行数据库下的IO并行、列式存储、数据压缩和分布式关联执行计划的优化,可以达到较高的效率,例如:1)并行数据库可通过智能过滤减少本地IO读,2)通过优化执行计划减少重分布时的数据结果集,从而减少网络传输IO的代价。
而本发明实施的技术方案,基于并行流水方式的动态关联执行。这种方式的特点是控制上更加复杂,但各种执行步骤间的并行度更高,执行过程中发生的磁盘IO代价更小。执行过程中,它没有现有技术下的中间临时文件的本地落地磁盘过程,而是通过流水方式直接传输到重分布数据的接收端节点,并和接收端节点上关联数据直接进行关联。
这种方式下动态关联的执行代价:
Cost total=(1)Cost(重分布前数据本地读IO+重分布计算)+(2)Cost(重分布传输IO)+(3)Cost(重分布后数据与接收节点本地关系数据的关联处理)。
我们可以看到这种方式下在第(3)项中的执行代价比较第一方式下的第(3),(4)项的执行代价应有所减少(减少程度取决于,重分布后数据与接收节点本地关系数据的关联处理代价与第一方式下临时数据本地读写的比例)。重分布后的数据不需要在接收节点上做磁盘落地读写,所以执行代价上得到了减轻。
图3为本发明实施例的用于并行数据库动态关联的节点结构示意图,如图3所示,所述节点至少包括:接收模块10、重分布模块11和发送模块12其中:
所述接收模块10用于接收由管理节点发送的关联指令,其中所述关联指令至少包括第一表的第一标识和第一关联键,以及第二表的第二标识和第二关联键;拟重分布模块11用于若所述第一关联键与预存所述第一表的第一分布键不同,则判定需要对所述第一表进行重分布,根据第一标识找到存储的第一表分片,所述第一表分片为所述第一表中所有第一元组的一个子集,依次提取出所述第一表分片中的第一元组,每个第一元组至少包含与所述第一关联键相对应的第一键值,并根据预设的分布函数得到与所述第一键值相对应的第一分布值;所述发送模块12用于若所述第一分布值与预存的第一节点分布值不同,则将所述第一元组发送给与所述第一分布值相对应的第二节点,以使所述第二节点在接收到所述第一元组后,根据所述第一关联键和第二关联健将接收到的第一元组与所述第二节点存储的第二表分片进行关联操作,以得到关联元组,其中所述第二表分片与所述第二标识相对应,为所述第二表的一个子集,然后所述第二节点将得到的关联元组发送给所述管理节点。具体地:
当用户想要从并行数据库中查询某个数据时,用户会先通过终端连入数据库,并由终端向管理节点发送一个查询语句,例如要求查询包含有数据A和数据B的信息。所述管理节点通过优化器对查询语句进行解析,例如通过解析得到数据A位于第一表,而数据B位于第二表,则判定需要将所述第一表和第二表先进行关联,为此,所述管理节点会向接收模块10发送关联指令,所述关联指令至少包括第一表的第一标识和第一关联键,以及第二表的第二标识和第二关联键。
在所述接收模块10在接收到所述管理节点发送的关联指令后,将得到的第一标识、第一关联键、第二标识和第二关联键发送给所述重分布模块11。所述重分布模块11会分别比较所述第一关联键与存储的第一分布键,以及第二关联键和存储的第二分布键。若判定第一表需要进行重分布,而第二表不需要进行重分布。
所述重分布模块11会先根据接收到的第一标识在表空间找到存储的第一表分片,然后依次提取出所述第一表分片中的第一元组,将根据每个元组中与第一关联键相对应的第一键值,通过预设的分布函数得到与所述第一键值相对应的第一分布值。
所述重分布模块11将所述第一元组得到的第一分布值与预存的第一节点分布值进行比较,若相同,则可以判定该元组无需被分配到其它节点,则将所第一元组发送所述关联模块。所述关联模块会先根据第二标识在表空间找到存储的第二表分片,然后由SQL执行引擎处理,将所述第一元组与第二表分片进行关联操作。
而若所述第一分布值与第一节点分布值不同,则所述重分布模块11判定该第一元组需要被重新分配到其它节点,则会将该第一元组发送给所述发送模块12。所述发送模块12会先查询与所述第一分布值相对应的第二节点,然后将所述第一元组发送给该第二节点。
所述第二节点在接收到其它节点发送的第一元组后,同样会根据所述第一关联键和第二关联键将接收到的第一元组与自身存储的第二表分片在自身的SQL执行引擎中进行关联操作,以得到关联元组。然后所述第二节点会将得到的关联元组发送给所述管理节点。
与所述第二节点相同,所述接收模块10也会接收由其它节点经过重分布过程后发送的第一元组并发送给所述关联模块。然后所述关联模块会根据所述第一关联键和第二关联键将接收到的第一元组与存储的第二表分片在SQL执行引擎中进行关联操作,以得到关联元组,并发送给所述发送模块12。
当所述发送模块12判定与自身相关的关联操作已经完成时,会将得到的所有关联元组发送给管理节点。当然所述发送模块12也可以在进行关联操作的同时,周期性的将已经得到的关联元组发送给所述管理节点。
所述管理节点再会将从每个节点的发送模块12发送过来的关联元组进行组合以得到完整的第一表与第二表的关联表。进而可以在关联表中对所述用户通过终端发送的查询语句执行查询操作,例如在关联表中找出包含有数据A和数据B的关联元组,然后发送给所述终端来展示给用户。
本发明实施例提供的装置用于执行上述方法,其功能具体参考上述方法实施例,其具体方法流程在此处不再赘述。
本发明实施例通过在判定需要对所述第一表进行重分布后,在每个节点都对自身的第一表分片中的第一元组依次进行重分布,并发送给相对应的其它节点,再同时对接收到的第一元组和第二表分片进行关联操作,进而不容易造成节点故障,且关联效率提高。
图4为本发明实施例的另一用于并行数据库动态关联的节点结构示意图,进一地步地,所述第一表分片中的所有元组被划分成至少一个待分布数据包,其中每个待分布数据包的数据包信息至少包括包序号,如图4所示,所述节点至少包括:所述接收模块10、所述重分布模块11,所述发送模块12和存储模块13,其中,
所述重分布模块11具体用于若判定需要对所述第一表进行重分布,则根据第一标识找到存储的第一表分片,所述第一表分片为所述第一表中所有第一元组的一个子集,依次提取出所述第一表分片中的待分布数据包,并根据预设的分布函数得到与所述待分布数据包中每个第一元组的第一键值相对应的第一分布值;相应地,所述节点还包括:所述存储模块13用于若所述第一分布值与存储的第一节点分布值不同,则根据每个第一元组的第一分布值,将所述待分布数据包中的第一元组分配到发送队列中相对应的待关联数据包中,其中所述待关联数据包的数据包信息至少包括所述包序号和接收节点标识,其中所述接收节点标识与保存的第一元组的第一分布值相对应;所述发送模块12具体用于所述将所述发送队列中的待关联数据包发送给与所述接收节点标识相对应的第二节点,以使所述第二节点将所述待关联数据包存入接收队列中,然后所述第二节点依次提取所述接收队列中的待关联数据包,根据所述第一关联键和第二关联键将所述关联数据包中的每个第一元组与所述第二节点的第二表分片进行关联操作,以得到所述关联元组,再将得到的关联元组发送给所述管理节点。具体地:
为了能够提高数据处理的效率,以及减少相互传输数据时产生的信令消耗,在进行重分布和关联操作时,可以以数据包而不是元组为单位来进行处理。具体每个数据包的大小,可以根据实际的需要来进行设计。
首先所述第一表分片被划分成多个待分布数据包,且每个待分布数据包的数据包信息中至少包括有包序号,将第一表分片中的所有第一元组均匀得分配到每个待分布数据包中。
在所述重分布模块11判定需要对所述第一表进行重分布后,会从所述第一表分片中依次提取出所述第一分片中的待分布数据包。然后所述重分布模块11对提取出来的待分布数据包中的第一元组的第一健值分别进行分布函数的计算以得到每个第一元组的第一分布值。
所述重分布模块11将待分布数据包中的每个第一元组的第一分布值与第一节点分布值进行比较,若相同,则发送给所述关联模块,由所述关联模块使该第一元组和所述第二表分片由SQL执行引擎进行关联操作;而若不相同,则发送给所述存储模块13,将该第一元组存储到存储模块13中发送队列的相对应的待关联数据包中,所述待关联数据包的数据包信息继承了所述待分布数据包的数据包信息,至少包括有待分布数据包的包序号,还包括有接收节点标识和发送节点标识,其中所述接收节点标识与保存在该关联数据包中的第一元组的第一分布值相关。
当然为使信息更加完善所述关联数据包的数据包信息还可以包括:关系表名称、新分布值、旧分布值、数据块号等。这些数据包信息都可以根据实际的需要来进行调整。
所述发送模块12会定期提取所述存储模块13所述发送队列中的待关联数据包,然后根据所述待关联数据包的数据包信息中的待接收节点标识,将所述待关联数据包发送给与所述接收节点标识相对应的第二节点。
所述第二节点会将接收到的待关联数据包存入所述第二节点缓存的接收队列中。然后所述第二节点会根据接收顺序依次从所述接收队列中提取出待关联数据包,分别将其中的每个第一元组根据第一关联键和第二关联键与所述自身的第二表分片在自身的SQL执行引擎中进行关联操作,以得到一定数量的关联元组,然后再发送给所述管理节点。
与所述第二节点相同,存储模块13也会有接收队列,而所述接收模块10也会接收到由其它节点发送的所述接收节点标识为第一节点标识的待关联数据包,并发送给存储模块13,将接收到的待关联数据包存入所述存储模块13的接收队列中。
然后所述关联模块会根据接收顺序依次从所述接收队列中提取出其中的待关联数据包,分别将其中的每个第一元组根据第一关联键和第二关联键与所述第二表分片在SQL执行引擎中进行关联操作,以得到一定数量的关联元组。
本发明实施例提供的装置用于执行上述方法,其功能具体参考上述方法实施例,其具体方法流程在此处不再赘述。
本发明实施例通过在判定需要对所述第一表进行重分布后,在每个节点都对自身的第一表分片中的待分布数据包依次进行重分布为待关联数据包存入发送队列,并发送给相对应的其它节点,同时接收到的待关联数据存入接收队列,并将所述待关联数据包中的第一元组和第二表分片进行关联操作,进而不容易造成节点故障,且关联效率提高。
图5为本发明实施例的电子设备结构示意图。如图5所示,所述电子设备,包括:处理器(processor)601、存储器(memory)602和总线603;
其中,所述处理器601和所述存储器602通过所述总线603完成相互间的通信;
所述处理器601用于调用所述存储器602中的程序指令,以执行上述各方法实施例所提供的方法,例如包括:第一节点接收由管理节点发送的关联指令,其中所述关联指令至少包括第一表的第一标识和第一关联键,以及第二表的第二标识和第二关联键;若所述第一关联键与预存所述第一表的第一分布键不同,则判定需要对所述第一表进行重分布,所述第一节点根据第一标识找到存储的第一表分片,所述第一表分片为所述第一表中所有第一元组的一个子集,依次提取出所述第一表分片中的第一元组,每个第一元组至少包含与所述第一关联键相对应的第一键值,并根据预设的分布函数得到与所述第一键值相对应的第一分布值;若所述第一分布值与预存的第一节点分布值不同,则所述第一节点将所述第一元组发送给与所述第一分布值相对应的第二节点,以使所述第二节点在接收到所述第一元组后,根据所述第一关联键和第二关联健将接收到的第一元组与所述第二节点存储的第二表分片进行关联操作,以得到关联元组,其中所述第二表分片与所述第二标识相对应,为所述第二表的一个子集,然后所述第二节点将得到的关联元组发送给所述管理节点。
进一步地,本发明实施例公开一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的方法,例如包括:第一节点接收由管理节点发送的关联指令,其中所述关联指令至少包括第一表的第一标识和第一关联键,以及第二表的第二标识和第二关联键;若所述第一关联键与预存所述第一表的第一分布键不同,则判定需要对所述第一表进行重分布,所述第一节点根据第一标识找到存储的第一表分片,所述第一表分片为所述第一表中所有第一元组的一个子集,依次提取出所述第一表分片中的第一元组,每个第一元组至少包含与所述第一关联键相对应的第一键值,并根据预设的分布函数得到与所述第一键值相对应的第一分布值;若所述第一分布值与预存的第一节点分布值不同,则所述第一节点将所述第一元组发送给与所述第一分布值相对应的第二节点,以使所述第二节点在接收到所述第一元组后,根据所述第一关联键和第二关联健将接收到的第一元组与所述第二节点存储的第二表分片进行关联操作,以得到关联元组,其中所述第二表分片与所述第二标识相对应,为所述第二表的一个子集,然后所述第二节点将得到的关联元组发送给所述管理节点。
进一步地,本发明实施例提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行上述各方法实施例所提供的方法,例如包括:第一节点接收由管理节点发送的关联指令,其中所述关联指令至少包括第一表的第一标识和第一关联键,以及第二表的第二标识和第二关联键;若所述第一关联键与预存所述第一表的第一分布键不同,则判定需要对所述第一表进行重分布,所述第一节点根据第一标识找到存储的第一表分片,所述第一表分片为所述第一表中所有第一元组的一个子集,依次提取出所述第一表分片中的第一元组,每个第一元组至少包含与所述第一关联键相对应的第一键值,并根据预设的分布函数得到与所述第一键值相对应的第一分布值;若所述第一分布值与预存的第一节点分布值不同,则所述第一节点将所述第一元组发送给与所述第一分布值相对应的第二节点,以使所述第二节点在接收到所述第一元组后,根据所述第一关联键和第二关联健将接收到的第一元组与所述第二节点存储的第二表分片进行关联操作,以得到关联元组,其中所述第二表分片与所述第二标识相对应,为所述第二表的一个子集,然后所述第二节点将得到的关联元组发送给所述管理节点。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所描述的电子设备等实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (8)
1.一种并行数据库动态关联的方法,其特征在于,包括:
第一节点接收由管理节点发送的关联指令,其中所述关联指令至少包括第一表的第一标识和第一关联键,以及第二表的第二标识和第二关联键;
若所述第一关联键与预存所述第一表的第一分布键不同,则判定需要对所述第一表进行重分布,所述第一节点根据第一标识找到存储的第一表分片,所述第一表分片为所述第一表中所有第一元组的一个子集,依次提取出所述第一表分片中的第一元组,每个第一元组至少包含与所述第一关联键相对应的第一键值,并根据预设的分布函数得到与所述第一键值相对应的第一分布值;
若所述第一分布值与预存的第一节点分布值不同,则所述第一节点将所述第一元组发送给与所述第一分布值相对应的第二节点,以使所述第二节点在接收到所述第一元组后,根据所述第一关联键和第二关联健将接收到的第一元组与所述第二节点存储的第二表分片进行关联操作,以得到关联元组,其中所述第二表分片与所述第二标识相对应,为所述第二表的一个子集,然后所述第二节点将得到的关联元组发送给所述管理节点;
其中,所述第一表分片中的所有元组被划分成至少一个待分布数据包,其中每个待分布数据包的数据包信息至少包括包序号,相应地,所述依次提取出所述第一表分片中的第一元组,每个第一元组至少包含与所述第一关联键相对应的第一键值,并根据预设的分布函数得到与所述第一键值相对应的第一分布值;若所述第一分布值与预存的第一节点分布值不同,则所述第一节点将所述第一元组发送给与所述第一分布值相对应的第二节点,以使所述第二节点在接收到所述第一元组后,根据所述第一关联键和第二关联健将接收到的第一元组与所述第二节点存储的第二表分片进行关联操作,以得到关联元组,其中所述第二表分片与所述第二标识相对应,为所述第二表的一个子集,然后所述第二节点将得到的关联元组发送给所述管理节点,具体为:
依次提取出所述第一表分片中的待分布数据包,并根据预设的分布函数得到与所述待分布数据包中每个第一元组的第一键值相对应的第一分布值;
若所述第一分布值与存储的第一节点分布值不同,则所述第一节点根据每个第一元组的第一分布值,将所述待分布数据包中的第一元组分配到发送队列中相对应的待关联数据包中,其中所述待关联数据包的数据包信息至少包括所述包序号和接收节点标识,其中所述接收节点标识与保存的第一元组的第一分布值相对应;
所述第一节点将所述发送队列中的待关联数据包发送给与所述接收节点标识相对应的第二节点,以使所述第二节点将所述待关联数据包存入接收队列中,然后所述第二节点依次提取所述接收队列中的待关联数据包,根据所述第一关联键和第二关联键将所述关联数据包中的每个第一元组与所述第二节点的第二表分片进行关联操作,以得到所述关联元组,再将得到的关联元组发送给所述管理节点。
2.根据权利要求1所述的方法,其特征在于,所述第一节点为第三节点的副节点,相应地,所述方法还包括:
所述第一节点接收由所述管理节点发送的所述第三节点的第一表分片和第二表分片并存入副本空间;
所述第一节点接收由其它节点发送的与所述第三节点相对应的待关联数据包,并存入所述副本空间的副本接收队列中。
3.根据权利要求2所述的方法,其特征在于,所述待关联数据包还包括关联日志;相应地,所述第一节点接收由其它节点发送的与所述第三节点相对应的待关联数据包,并存入副本空间的副本接收队列中;具体为:
所述第一节点接收由其它节点发送的与所述第三节点相对应的待关联数据包,存入所述副本接收队列中,并提取出所述关联日志存入所述副本空间的副本日志队列;相应地,所述方法还包括:
所述第一节点接收所述第三节点发送的新的关联日志,并更新所述副本日志队列中相对应的关联日志,其中所述新的关联日志由所述第三节点在接收到其它节点发送的待关联数据包并存入所述接收队列后,提取出所述关联日志加入接收标识并存入日志队列后,将新的关联日志发送给所述第一节点,或者由所述第三节点判定已经完成所述待关联数据包中所有第一元组与所述第二表分片的关联操作,并将所述关联日志中的接收标识改为关联标识后,将新的关联日志发送给所述第一节点。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括
所述第一节点接收由所述管理节点发送的接管指令;
在所述副本日志队列中找出没有关联标识的所有关联日志,再在所述副本接收队列中找到相对应的待关联数据包,然后依次对找到的待关联数据包中所有第一元组与所述副本空间中的第二表分片执行关联操作。
5.根据权利要求3或4中任一所述的方法,其特征在于,所述方法还包括:
所述第一节点接收由所述管理节点发送的副本切分指令,所述副本切分指令至少包括切分方式;
所述第一节点根据所述切分方式和所述副本日志队列中的关联日志,从所述副本接收队列中提取出需要由所述第一节点处理的待关联数据包存入切分队列中,并对所述切分队列中的待关联数据包中所有第一元组与所述副本空间中的第二表分片执行关联操作。
6.一种用于并行数据库动态关联的节点,其特征在于,包括:
接收模块,用于接收由管理节点发送的关联指令,其中所述关联指令至少包括第一表的第一标识和第一关联键,以及第二表的第二标识和第二关联键;
重分布模块,用于若所述第一关联键与预存所述第一表的第一分布键不同,则判定需要对所述第一表进行重分布,根据第一标识找到存储的第一表分片,所述第一表分片为所述第一表中所有第一元组的一个子集,依次提取出所述第一表分片中的第一元组,每个第一元组至少包含与所述第一关联键相对应的第一键值,并根据预设的分布函数得到与所述第一键值相对应的第一分布值;
发送模块,用于若所述第一分布值与预存的第一节点分布值不同,则将所述第一元组发送给与所述第一分布值相对应的第二节点,以使所述第二节点在接收到所述第一元组后,根据所述第一关联键和第二关联健将接收到的第一元组与所述第二节点存储的第二表分片进行关联操作,以得到关联元组,其中所述第二表分片与所述第二标识相对应,为所述第二表的一个子集,然后所述第二节点将得到的关联元组发送给所述管理节点;
其中,所述第一表分片中的所有元组被划分成至少一个待分布数据包,其中每个待分布数据包的数据包信息至少包括包序号,相应地:
所述重分布模块,具体用于若判定需要对所述第一表进行重分布,则根据第一标识找到存储的第一表分片,所述第一表分片为所述第一表中所有第一元组的一个子集,依次提取出所述第一表分片中的待分布数据包,并根据预设的分布函数得到与所述待分布数据包中每个第一元组的第一键值相对应的第一分布值;相应地,所述节点还包括:
存储模块,用于若所述第一分布值与存储的第一节点分布值不同,则根据每个第一元组的第一分布值,将所述待分布数据包中的第一元组分配到发送队列中相对应的待关联数据包中,其中所述待关联数据包的数据包信息至少包括所述包序号和接收节点标识,其中所述接收节点标识与保存的第一元组的第一分布值相对应;
所述发送模块,具体用于将所述发送队列中的待关联数据包发送给与所述接收节点标识相对应的第二节点,以使所述第二节点将所述待关联数据包存入接收队列中,然后所述第二节点依次提取所述接收队列中的待关联数据包,根据所述第一关联键和第二关联键将所述关联数据包中的每个第一元组与所述第二节点的第二表分片进行关联操作,以得到所述关联元组,再将得到的关联元组发送给所述管理节点。
7.一种电子设备,其特征在于,包括存储器和处理器,所述处理器和所述存储器通过总线完成相互间的通信;所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如权利要求1至5任一所述的方法。
8.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1至5任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711432067.2A CN110019231B (zh) | 2017-12-26 | 2017-12-26 | 一种并行数据库动态关联的方法及节点 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711432067.2A CN110019231B (zh) | 2017-12-26 | 2017-12-26 | 一种并行数据库动态关联的方法及节点 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110019231A CN110019231A (zh) | 2019-07-16 |
CN110019231B true CN110019231B (zh) | 2021-06-04 |
Family
ID=67186985
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711432067.2A Active CN110019231B (zh) | 2017-12-26 | 2017-12-26 | 一种并行数据库动态关联的方法及节点 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110019231B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113032446A (zh) * | 2019-12-24 | 2021-06-25 | 阿里巴巴集团控股有限公司 | 一种分布式查询系统的数据处理方法和装置 |
CN111984630A (zh) * | 2020-09-01 | 2020-11-24 | 深圳壹账通智能科技有限公司 | 日志关联方法、装置和计算机设备 |
US11922026B2 (en) | 2022-02-16 | 2024-03-05 | T-Mobile Usa, Inc. | Preventing data loss in a filesystem by creating duplicates of data in parallel, such as charging data in a wireless telecommunications network |
CN117076465B (zh) * | 2023-10-16 | 2024-04-05 | 支付宝(杭州)信息技术有限公司 | 一种数据关联查询方法及相关设备 |
CN117435594B (zh) * | 2023-12-18 | 2024-04-16 | 天津南大通用数据技术股份有限公司 | 一种分布式数据库分布键的优选方法 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103891244A (zh) * | 2012-09-04 | 2014-06-25 | 华为技术有限公司 | 一种进行数据存储和检索的方法及装置 |
CN104111958A (zh) * | 2013-04-22 | 2014-10-22 | 中国移动通信集团山东有限公司 | 一种数据查询方法及装置 |
CN105335479A (zh) * | 2015-10-12 | 2016-02-17 | 国家计算机网络与信息安全管理中心 | 一种基于sql的文本数据统计实现方法 |
CN105824868A (zh) * | 2015-12-24 | 2016-08-03 | 广东亿迅科技有限公司 | 一种分布式数据库数据处理方法和分布式数据库系统 |
CN106611064A (zh) * | 2017-01-03 | 2017-05-03 | 北京华胜信泰数据技术有限公司 | 分布式关系数据库的数据处理方法和装置 |
CN106815258A (zh) * | 2015-11-27 | 2017-06-09 | 华为技术有限公司 | 一种数据存储方法和协调节点 |
CN107305554A (zh) * | 2016-04-20 | 2017-10-31 | 泰康保险集团股份有限公司 | 数据查询处理方法及装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9465840B2 (en) * | 2014-03-14 | 2016-10-11 | International Business Machines Corporation | Dynamically indentifying and preventing skewed partitions in a shared-nothing database |
US10108666B2 (en) * | 2015-03-10 | 2018-10-23 | Oracle International Corporation | Adaptive handling of skew for distributed joins in a cluster |
-
2017
- 2017-12-26 CN CN201711432067.2A patent/CN110019231B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103891244A (zh) * | 2012-09-04 | 2014-06-25 | 华为技术有限公司 | 一种进行数据存储和检索的方法及装置 |
CN104111958A (zh) * | 2013-04-22 | 2014-10-22 | 中国移动通信集团山东有限公司 | 一种数据查询方法及装置 |
CN105335479A (zh) * | 2015-10-12 | 2016-02-17 | 国家计算机网络与信息安全管理中心 | 一种基于sql的文本数据统计实现方法 |
CN106815258A (zh) * | 2015-11-27 | 2017-06-09 | 华为技术有限公司 | 一种数据存储方法和协调节点 |
CN105824868A (zh) * | 2015-12-24 | 2016-08-03 | 广东亿迅科技有限公司 | 一种分布式数据库数据处理方法和分布式数据库系统 |
CN107305554A (zh) * | 2016-04-20 | 2017-10-31 | 泰康保险集团股份有限公司 | 数据查询处理方法及装置 |
CN106611064A (zh) * | 2017-01-03 | 2017-05-03 | 北京华胜信泰数据技术有限公司 | 分布式关系数据库的数据处理方法和装置 |
Non-Patent Citations (1)
Title |
---|
机群下基于Greenplum数据库查询能耗估算及提高连接能效策略;于天成;《中国优秀硕士学位论文全文数据库 信息科技辑》;20160215(第02(2016)期);第I138-1087页 * |
Also Published As
Publication number | Publication date |
---|---|
CN110019231A (zh) | 2019-07-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110019231B (zh) | 一种并行数据库动态关联的方法及节点 | |
US11436224B2 (en) | Parallel processing database system with a shared metadata store | |
US10275184B2 (en) | Framework for volatile memory query execution in a multi node cluster | |
US10002148B2 (en) | Memory-aware joins based in a database cluster | |
US9959332B2 (en) | System and method for massively parallel processor database | |
US20180039671A1 (en) | Method and apparatus for querying data in cross-shard databases | |
US20110251997A1 (en) | Logical replication in clustered database system with adaptive cloning | |
CN110147407B (zh) | 一种数据处理方法、装置及数据库管理服务器 | |
CN105517644B (zh) | 一种数据分区方法和设备 | |
US8510280B2 (en) | System, method, and computer-readable medium for dynamic detection and management of data skew in parallel join operations | |
US10831737B2 (en) | Method and device for partitioning association table in distributed database | |
US20180293257A1 (en) | Method for accessing distributed database and distributed data service apparatus | |
EP3373158B1 (en) | Data storage method and coordinator node | |
CN110633378A (zh) | 一种支持超大规模关系网络的图数据库构建方法 | |
US9710532B2 (en) | Method for avoiding conflicts in database cluster | |
CN113742343A (zh) | 基于大量业务数据场景的数据拆分方法、装置和存储介质 | |
CN112650812A (zh) | 一种数据分片存储方法、装置、计算机设备和存储介质 | |
CN114398371A (zh) | 数据库集群系统多副本分片方法、装置、设备及存储介质 | |
US10284649B2 (en) | Distributed processing system | |
CN112492022A (zh) | 提高数据库可用性的集群、方法、系统及存储介质 | |
US20170017680A1 (en) | Method for handling writes in database clusters with temporarily disjoint nodes | |
CN108090056B (zh) | 数据查询方法、装置及系统 | |
CN109634975B (zh) | 数据同步方法及装置、电子设备及计算机可读存储介质 | |
US7774311B2 (en) | Method and apparatus of distributing data in partioned databases operating on a shared-nothing architecture | |
JP2013025425A (ja) | 分散データ管理システム、分散データ管理方法、および分散データ管理プログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |