CN103377236A - 一种用于分布式数据库的连接查询方法及系统 - Google Patents
一种用于分布式数据库的连接查询方法及系统 Download PDFInfo
- Publication number
- CN103377236A CN103377236A CN2012101263490A CN201210126349A CN103377236A CN 103377236 A CN103377236 A CN 103377236A CN 2012101263490 A CN2012101263490 A CN 2012101263490A CN 201210126349 A CN201210126349 A CN 201210126349A CN 103377236 A CN103377236 A CN 103377236A
- Authority
- CN
- China
- Prior art keywords
- main controlled
- controlled node
- connection
- temporary file
- base table
- 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.)
- Granted
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种用于分布式数据库的连接查询方法及系统,所述方法包括:在主控节点获取连接计算命令时,其依据该连接计算命令生成多个连接计算子命令并分发到多个相应的非主控节点;非主控节点依据连接计算子命令进行表的连接计算,之后生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件并将其发送给主控节点;主控节点汇总所有结果,并发送给客户端。通过本发明,在发起查询命令时,能够有效地提高在整个系统中进行查询的准确性,能够极大的降低系统网络通信开销,有效提高系统的计算速度,从而保证分布式数据库系统查询的高可靠性。
Description
技术领域
本发明涉及数据库信息管理系统,具体而言,涉及一种用于分布式数据库的连接查询方法及系统。
背景技术
分布式数据库,其在逻辑上是一个统一的整体,而在物理上则是分别存储在不同的物理节点上的多个数据库。一个应用程序通过网络的连接,可以访问分布在不同地理位置的数据库。它的分布性特点表现在:逻辑数据库中的数据不是存储在同一场地的,更确切地讲,不是存储在同一计算机的存储设备上。这就是其与集中式数据库的主要区别。从用户的角度看,一个分布式数据库系统,其在逻辑上和集中式数据库系统一样,用户可以在任何一个场地执行全局应用。
由于分布式数据库具有数据独立性和位置透明性等特点,其中所述透明性意味着在特定位置的应用成俗能够访问所有相连的数据库中的数据,而不用知道数据的来源以及本地数据库与多个相连的远程数据库中的任何一个是否兼容,传统集中式数据库的关联查询方法已经不再适用。
分布式数据库在物理上是分别由不同的物理节点管理的,CPU资源相对来说较传统集中式数据库丰富,从而一定程度上可以合理利用CPU资源,将关联计算分发到各物理节点执行,效率将会远远高于主控节点独自计算;
然而,由于分布式数据库中的数据是存储在不同场地,各物理节点在进行关联计算的时候,为了保证计算结果的准确性,需要涉及各场地间的数据传输,因此在实际应用过程中需要考虑系统通信代价。
鉴于此,本发明提供了一种优化技术。
发明内容
有鉴于此,针对现有技术中各物理节点在进行关联计算之时,由于涉及多个物理节点之间的数据传输而导致的系统通信代价较大的问题,本发明的目的在于提供一种用于分布式数据库的连接查询方法及系统,本发明采用以下技术方案实现:
一种用于分布式数据库的连接查询方法,包括:
在主控节点获取连接计算命令时,其依据该连接计算命令生成多个连接计算子命令并分发到多个相应的非主控节点;
非主控节点依据连接计算子命令进行表的连接计算,之后生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件并将其发送给主控节点;
主控节点汇总所有结果,并发送给客户端。
优选地,在主控节点获取连接计算命令时,选择记录数多的表作为基表,并依据非基表的分布信息向相应的非主控节点发送生成临时文件的请求消息;主控节点进一步地依据基表的分布信息向相应的非主控节点发送依据所述连接计算命令而生成的连接计算子命令;
非主控节点依据所述生成临时文件的请求以及连接计算子命令进行表的连接计算,之后生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件并将其发送给主控节点;
主控节点汇总所有结果,并发送给客户端。
优选地,当所述连接计算命令为内连接计算命令时,所述方法具体包括:
主控节点选择记录数少的表作为外层循环,并选择记录数多的表作为基表;
主控节点依据非基表的分布信息,向相应的非主控节点发送生成临时文件的请求消息;
主控节点依据基表的分布信息,向相应的非主控节点发送内连接计算子命令;同时执行本主控节点的内连接计算并生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件;
非主控节点依据内连接计算子命令进行表的内连接计算,之后生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件并将其发送给主控节点;
主控节点汇总从非主控节点获取的临时文件以及本地的临时文件,并将汇总结果发送给客户端。
优选地,非主控节点依据内连接计算子命令进行表的连接计算并生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件的步骤包括:
非主控节点选择记录数少的表作为外层循环;
非主控节点选择记录数多的表作为基表;
非主控节点依据内连接计算子命令进行表的内连接计算并生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件。
优选地,主控节点汇总从非主控节点获取的临时文件以及本地的临时文件并将汇总结果发送给客户端之后,还包括:
主控节点根据非基表的分布信息,向相应非主控节点发送删除临时文件请求消息;
非主控节点响应所述请求并删除存储于本地的临时文件。
优选地,当所述连接计算命令为左外连接、右外连接或全连接计算命令时,所述方法具体包括:
主控节点选择记录数多的表作为基表;
主控节点依据非基表的分布信息,向相应的非主控节点发送生成临时文件的请求消息;
主控节点依据基表的分布信息,向相应的非主控节点发送左外连接、右外连接或全连接计算子命令;并依据基表的选择情况判断是否进行二次连接操作:
当进行二次连接操作时,主控节点首先进行内连接计算并生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件,之后进行左外连接、右外连接或全连接计算;
非主控节点依据获取的生成临时文件的请求消息,选择记录数多的表作为基表,并进行内连接计算并生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件,之后进行左外连接、右外连接或全连接计算,并将计算结果发送至主控节点;
主控节点汇总所有节点的计算结果之后发送给客户端;
或,
当不进行二次连接操作时,主控节点对表进行相应的左外连接、右外连接或全连接计算;
非主控节点依据获取的生成临时文件的请求消息,选择记录数多的表作为基表,并对表进行左外连接、右外连接或全连接计算,并将计算结果发送至主控节点;
主控节点汇总所有节点的计算结果之后发送给客户端。
一种用于分布式数据库的连接查询系统,包括:
主控节点,用于获取连接计算命令时,依据该连接计算命令生成多个连接计算子命令并分发到多个相应的非主控节点;以及进一步用于汇总所有结果,并发送给客户端;
非主控节点,用于依据连接计算子命令进行表的连接计算,之后生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件并将其发送给主控节点。
优选地,在主控节点获取连接计算命令时,选择记录数多的表作为基表,并依据非基表的分布信息向相应的非主控节点发送生成临时文件的请求消息;主控节点进一步地依据基表的分布信息向相应的非主控节点发送依据所述连接计算命令而生成的连接计算子命令;所述非主控节点则依据所述生成临时文件的请求以及连接计算子命令进行表的连接计算,之后生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件并将其发送给主控节点;主控节点汇总所有结果,并发送给客户端。
优选地,当所述连接计算命令为内连接计算命令时,其中,
主控节点选择记录数少的表作为外层循环,并选择记录数多的表作为基表;
主控节点依据非基表的分布信息,向相应的非主控节点发送生成临时文件的请求消息;
主控节点依据基表的分布信息,向相应的非主控节点发送内连接计算子命令;同时执行本主控节点的内连接计算并生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件;
非主控节点依据内连接计算子命令进行表的内连接计算,之后生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件并将其发送给主控节点;
主控节点汇总从非主控节点获取的临时文件以及本地的临时文件,并将汇总结果发送给客户端。
优选地,非主控节点依据内连接计算子命令进行表的连接计算并生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件的步骤包括:
非主控节点选择记录数少的表作为外层循环;
非主控节点选择记录数多的表作为基表;
非主控节点依据内连接计算子命令进行表的内连接计算并生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件。
优选地,所述主控节点还用于根据非基表的分布信息,向相应非主控节点发送删除临时文件请求消息;以及非主控节点响应所述请求并删除存储于本地的临时文件。
优选地,当所述连接计算命令为左外连接、右外连接或全连接计算命令时,其中,
主控节点选择记录数多的表作为基表;
主控节点依据非基表的分布信息,向相应的非主控节点发送生成临时文件的请求消息;
主控节点依据基表的分布信息,向相应的非主控节点发送左外连接、右外连接或全连接计算子命令;并依据基表的选择情况判断是否进行二次连接操作:
当进行二次连接操作时,主控节点首先进行内连接计算并生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件,之后进行左外连接、右外连接或全连接计算;
非主控节点依据获取的生成临时文件的请求消息,选择记录数多的表作为基表,并进行内连接计算并生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件,之后进行左外连接、右外连接或全连接计算,并将计算结果发送至主控节点;
主控节点汇总所有节点的计算结果之后发送给客户端;
或,
当不进行二次连接操作时,主控节点对表进行相应的左外连接、右外连接或全连接计算;
非主控节点依据获取的生成临时文件的请求消息,选择记录数多的表作为基表,并对表进行左外连接、右外连接或全连接计算,并将计算结果发送至主控节点;
主控节点汇总所有节点的计算结果之后发送给客户端。
通过本发明,在发起查询命令时,能够有效地提高在整个系统中进行查询的准确性,能够极大的降低系统网络通信开销,有效提高系统的计算速度,从而保证分布式数据库系统查询的高可靠性。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是本发明实施例提供的是嵌套循环连接算法示意图;
图2是本发明实施例提供的内连接查询示意图。
图3是本发明实施例提供的左外连接查询示意图。
具体实施方式
为了使本发明所要解决的技术问题、技术方案及有益效果更加清楚、明白,以下结合附图和实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
针对现有技术提供的分布式数据库的查询方法,本发明做了如下两处优化:
1)把其他场地的数据存储成具有B树结构的临时文件,并且压缩后通过FTP协议推送(PUT)到其他需要的场地上去;
2)利用连接字段作为识别键KEY,在临时文件上创建索引,以便关联计算的时候,可以通过KEY直接在临时文件中定位记录,提高计算速度。
本发明实施例提供了一种用于分布式数据库的连接查询方法,其包括如下具体步骤:
S101、在主控节点获取连接计算命令时,其依据该连接计算命令生成多个连接计算子命令并分发到多个相应的非主控节点;
S102、非主控节点依据连接计算子命令进行表的连接计算,之后生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件并将其发送给主控节点;
S103、主控节点汇总所有结果,并发送给客户端。
优选实施方式下,所述用于分布式数据库的连接查询方法具体包括:
S1001、在主控节点获取连接计算命令时,选择记录数多的表作为基表,并依据非基表的分布信息向相应的非主控节点发送生成临时文件的请求消息;主控节点进一步地依据基表的分布信息向相应的非主控节点发送依据所述连接计算命令而生成的连接计算子命令;
S1002、非主控节点依据所述生成临时文件的请求以及连接计算子命令进行表的连接计算,之后生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件并将其发送给主控节点;
S1003、主控节点汇总所有结果,并发送给客户端。
优选实施方式下,当所述连接计算命令为内连接计算命令时,所述方法具体包括:
S201、主控节点选择记录数少的表作为外层循环,并选择记录数多的表作为基表;
S202、主控节点依据非基表的分布信息,向相应的非主控节点发送生成临时文件的请求消息;
S203、主控节点依据基表的分布信息,向相应的非主控节点发送内连接计算子命令;同时执行本主控节点的内连接计算并生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件;
S204、非主控节点依据内连接计算子命令进行表的内连接计算,之后生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件并将其发送给主控节点;
S205、主控节点汇总从非主控节点获取的临时文件以及本地的临时文件,并将汇总结果发送给客户端。
在所述步骤S201中,选择外层循环的意义在于:
以A表和B表内联为例(A INNER JOIN B ON A.a=B.b),如果A表有m条记录,B表有n条,根据嵌套循环连接算法,用不到索引的情况下,将计算m*n次,如果用到索引的情况下,将计算m*1次,很明显用到索引的情况下,m的大小直接影响查询的性能,所以步骤S201选择记录少的表作为外层循环是很有意义的。
在所述步骤S201中,选择基表的意义:
分布式数据库的数据是分布在所有节点上的,例如A表和B表,在主控节点上只有A1和B1,在非主控节点上只有A2和B2;此外,本方案的一个优化操作就是将连接(JOIN)计算分发到每个节点执行,所以各节点在作连接(JOIN)计算操作的时候,只允许有一个表数据不全,其他参加JOIN的表的数据必须是完整的(即包含所有其他节点的数据,例如:主控节点在作连接(JOIN)计算的时候,必须是A1、A2与B1关联或是A1与B1、B2关联,PEC2类似),只有这样,关联的结果才会准确,这就涉及到节点间的数据传输,为了降低系统通信开销和节省硬盘空间,基表的选择就很有必要。
优选实施方式下,非主控节点依据内连接计算子命令进行表的连接计算并生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件的步骤包括:
S2041、非主控节点选择记录数少的表作为外层循环;
S2042、非主控节点选择记录数多的表作为基表;
S2043、非主控节点依据内连接计算子命令进行表的内连接计算并生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件。
优选实施方式下,主控节点汇总从非主控节点获取的临时文件以及本地的临时文件并将汇总结果发送给客户端之后,还包括:
S206、主控节点根据非基表的分布信息,向相应非主控节点发送删除临时文件请求消息;
S207、非主控节点响应所述请求并删除存储于本地的临时文件。
优选实施方式下,当所述连接计算命令为左外连接、右外连接或全连接计算命令时,所述方法具体包括:
S301、主控节点选择记录数多的表作为基表;
S301、主控节点依据非基表的分布信息,向相应的非主控节点发送生成临时文件的请求消息;
S303、主控节点依据基表的分布信息,向相应的非主控节点发送左外连接、右外连接或全连接计算子命令;并依据基表的选择情况判断是否进行二次连接操作:
S304、当进行二次连接操作时,主控节点首先进行内连接计算并生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件,之后进行左外连接、右外连接或全连接计算;
S305、非主控节点依据获取的生成临时文件的请求消息,选择记录数多的表作为基表,并进行内连接计算并生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件,之后进行左外连接、右外连接或全连接计算,并将计算结果发送至主控节点;
S306、主控节点汇总所有节点的计算结果之后发送给客户端;
或,
S307、当不进行二次连接操作时,主控节点对表进行相应的左外连接、右外连接或全连接计算;
S308、非主控节点依据获取的生成临时文件的请求消息,选择记录数多的表作为基表,并对表进行左外连接、右外连接或全连接计算,并将计算结果发送至主控节点;
S309、主控节点汇总所有节点的计算结果之后发送给客户端。
在所述步骤S303中,选择是否需要二次连接(JOIN)的必要性:
以A表和B表左外连接为例(A LEFT JOIN B ON A.a=B.b),根据左外连接的定义,A表中的每条记录必须和B表中的所有记录都匹配一次,所以就要求,各节点在作左外连接(LEFT JOIN)的时候,B表数据必须是完整的,如果A表是大表的话,把A表选为基表,把B表数据生成临时文件,符合降低系统通信开销及节省硬盘空间的要求,这种情况就不需要二次连接(JOIN);如果B表是大表的话,还是把B表数据生成临时文件,显然不符合上述第二点选择基表的要求,这种情况下,进行二次连接(JOIN)就非常有必要的,。
二次JOIN的含义:假设主控节点,第一次连接(JOIN)是内连接操作:主控节点以A1、A2与B1作内连接(INNER JOIN),把结果存成临时文件R1,非主控节点以A1、A2与B2作内连接(INNER JOIN),把结果存成临时文件R2,并且把R2通过FTP协议推送到主控节点上;第二次连接(JOIN)是左外连接操作:主控节点以数据A1、A2与R1、R2作左外连接(LEFTJOIN),将结果输出。
二次JOIN的意义在于,可以通过各节点第一次的内连接操作,有效的把B表数据过滤一遍,只将满足条件的记录存成临时文件,这样可以缩小临时文件的大小,即R1+R2<=A1+A2,因此,二次连接(JOIN)能够大大节省系统资源。
下面将以一具体实施例的形式讲述本发明的发明精神,如下:
连接查询分为内连接、左外连接、右外连接和全连接,本实施例只讨论内连接和左外连接两种情况,右外连接和全连接与左外连接类似,本文对此不详述,另外,本实施例基于嵌套循环连接算法进行讨论,为了叙述方便,现作以下假设:
1、假设分布式数据库系统有2个场地,分别称之为节点PEC1和节点PEC2,如果分布式数据库系统具有多个场地的话,以此类推;
2、假设是2个分布式表作JOIN(连接),分别为A表和B表,2个表在PEC1、PEC2上的数据分别为A1、B1、A2和B2,如果是多表的话,以此类推;
3、执行SQL语句的场地为主控节点,其他场地为非主控节点;
如图1所示,嵌套循环连接(Nested Loop Join)由两个FOR循环构成。假设要连接的两个关系为A和B,连接条件为P,则嵌套循环连接就选择其中一个作为外层循环,另一个作为内层循环,从而找出所有匹配的元组。其算法如下:
本实施例的重要特点在于:
1、连接(JOIN)计算分布到所有节点,非主控节点把JOIN好的结果集发送给主控节点,主控节点汇总所有结果,并且发送给客户端;
2、其他场地的数据,存成具有B树结构的临时文件,并且利用JOIN字段为识别键KEY,创建索引;
3、如果是左外连接,主控节点可能会进行二次JOIN,关键是看基表是属于外层循环还是属于内层循环;
本实施例的具体步骤如下:
(一)在进行 内连接时。
内连接只连接匹配的行,假设有表A和表B,则(A INNER JOIN B ONA.a=B.b)的结果是这样的:先将A与B作迪卡尔积,然后做一个选择运算,只保留迪卡尔积中满足A.a=B.b的行,如图2所示,其具体步骤包括:
1、主控节点收到关联查询的SQL语句后:
(a)根据内连接的含义,JOIN的结果不受参加JOIN的表顺序的影响,另外,嵌套循环连接的JOIN算法,外层循环的选择非常重要,直接影响JOIN的速度,所以内连接的第一步是优化表的JOIN顺序,选择记录数少的表作为外层循环;
(b)两个表作JOIN操作时,必须选择一个基表,基表的数据不用存成临时文件,选择的原则是以记录多的表作为基表,这一原则可以降低网络通信的开销,节省硬盘空间,提升整体查询性能。例如:A表与B表JOIN,B表被选为基表的话,则PEC1以数据A1、A2与B1作JOIN计算,PEC2以数据A2、A1与B2作JOIN计算;
(c)以非基表为目标,根据非基表的分布信息,主控节点向相应节点发送生成临时文件的请求;
(d)主控节点根据基表的分布信息,将JOIN计算分发给相应的非主控节点;
(e)主控节点并行执行如下2个操作:
1)把非基表的数据从本地数据库里取出,并且过滤出一些不满足条件的记录,将满足条件的记录存成具有B树结构的临时文件,以关联字段为KEY创建索引,并把临时文件压缩;例如:PEC1把A1数据生成临时文件,PEC2把A2数据生成临时文件;
2)通过FTP向PEC2节点获取A2数据的临时文件,再以A1、A2数据与B1数据作内连接(INNER JOIN操作,并将结果输出给客户端;
(f)主控节点汇总所有非主控节点JOIN好的结果,并且将结果集发送给客户端;
(g)根据非基表的分布信息,主控节点向相应节点发送删除临时文件的请求;
2、非主控节点收到生成非基表临时文件的请求后:
(h)把非基表的数据从本地数据库里取出,并且过滤出一些不满足条件的记录,将满足条件的记录存成具有B树结构的临时文件,以关联字段为KEY创建索引,并把临时文件压缩;例如:PEC1把A1数据生成临时文件,PEC2把A2数据生成临时文件;
3、非主控节点收到分发JOIN计算的请求后:
(i)根据内连接的含义,JOIN的结果不受参加JOIN的表顺序的影响,另外,嵌套循环连接的JOIN算法,外层循环的选择非常重要,直接影响JOIN的速度,所以内连接的第一步是优化表的JOIN顺序,选择记录数少的表作为外层循环;两个表作JOIN操作时,必须选择一个基表,基表的数据不用存成临时文件,选择的原则是以记录多的表作为基表,这一原则可以降低网络通信的开销,节省硬盘空间,提升整体查询性能。例如:A表与B表JOIN,B表被选为基表的话,则PEC1以数据A1、A2与B1作JOIN计算,PEC2以数据A2、A1与B2作JOIN计算;
(j)向PEC1获取A1数据的临时文件,再以A2、A1与B2作INNERJOIN操作,并将结果发送给主控节点;
(二)在进行左外连接时。
假设有A表和B表(A LEFT JOIN B ON A.a=B.b),左外连接是指将左边集合中的每一个元组都作为结果的一个元组,并将右边集合中满足条件的元组对应的属性加到结果中,对于右边集合中不能满足谓词条件的元组,在最终结果中将其对应的属性设为NULL。从产生的结果看,左外连接相当于在内连接的基础上,增加了这样的一些元组:它们的属性值不能匹配任何右边的元组,如图3所示,其具体步骤包括:
1、主控节点收到关联的SQL语句后:
(k)由于是左连接,表的顺序不能够改变,所以无需选择外层循环,直接执行上述步骤(b)选择基表;
(1)判断是否需要进行二次JOIN,如果A表为基表的话,不需要二次JOIN,如果B表为基表的话,则需要设置二次JOIN的变量信息,所有节点先做一次INNER JOIN操作,将结果集存成临时文件,主控节点再做一次LEFTJOIN操作,将结果输出;
(m)分别执行上述步骤(c)、(d)以及步骤(e)的1)操作;
(n)如果不需要二次JOIN的话,即A表为基表,则获取B2文件,以A1与B1、B2作LEFT JOIN操作,并将结果发送给客户端;如果需要二次JOIN的话,则B表为基表,获取A2文件,以A1、A2与B1做INNER JOIN操作,将结果存成具有B树结构的临时文件R1,并以JOIN字段为KEY创建索引;
(o)通过FTP协议获取PEC2节点上的内联结果R2,再以A1、A2与R1、R2作LEFT JOIN操作,将结果发送给客户端,如果不需要进行二次JOIN,则跳过本步骤,执行步骤(p);
(p)汇总其他非主控节点LEFT JOIN好的结果,并发送给客户端,如果需要进行二次JOIN的话,则跳过本步骤,执行步骤(q);
(q)执行步骤(g)删除所有临时文件;
2、非主控节点收到生成非基表临时文件的请求后:
(r)执行上述步骤(h);
3、非主控节点收到JOIN计算分发请求后:
(s)分别执行上述步骤(k)、(l)操作,判断是否需要进行JOIN;
(t)执行上述步骤(n),如果不需要二次JOIN,则把结果发送给主控节点;如果需要二次JOIN,则将生成的临时文件压缩后,通过FTP协议PUT到主控节点。
相应地,本发明实施例还提供了一种用于分布式数据库的连接查询系统,其包括:
主控节点,用于获取连接计算命令时,依据该连接计算命令生成多个连接计算子命令并分发到多个相应的非主控节点;以及进一步用于汇总所有结果,并发送给客户端;
非主控节点,用于依据连接计算子命令进行表的连接计算,之后生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件并将其发送给主控节点。
优选实施方式下,在主控节点获取连接计算命令时,选择记录数多的表作为基表,并依据非基表的分布信息向相应的非主控节点发送生成临时文件的请求消息;主控节点进一步地依据基表的分布信息向相应的非主控节点发送依据所述连接计算命令而生成的连接计算子命令;所述非主控节点则依据所述生成临时文件的请求以及连接计算子命令进行表的连接计算,之后生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件并将其发送给主控节点;主控节点汇总所有结果,并发送给客户端。
优选实施方式下,当所述连接计算命令为内连接计算命令时,其中,
(1)主控节点选择记录数少的表作为外层循环,并选择记录数多的表作为基表;
其中,选择外层循环的意义在于:
以A表和B表内联为例(A INNER JOIN B ON A.a=B.b),如果A表有m条记录,B表有n条,根据嵌套循环连接算法,用不到索引的情况下,将计算m*n次,如果用到索引的情况下,将计算m*1次,很明显用到索引的情况下,m的大小直接影响查询的性能,所以步骤S201选择记录少的表作为外层循环是很有意义的。
以及,选择基表的意义:
分布式数据库的数据是分布在所有节点上的,例如A表和B表,在主控节点上只有A1和B1,在非主控节点上只有A2和B2;此外,本方案的一个优化操作就是将连接(JOIN)计算分发到每个节点执行,所以各节点在作连接(JOIN)计算操作的时候,只允许有一个表数据不全,其他参加JOIN的表的数据必须是完整的(即包含所有其他节点的数据,例如:主控节点在作连接(JOIN)计算的时候,必须是A1、A2与B1关联或是A1与B1、B2关联,PEC2类似),只有这样,关联的结果才会准确,这就涉及到节点间的数据传输,为了降低系统通信开销和节省硬盘空间,基表的选择就很有必要。
(2)主控节点依据非基表的分布信息,向相应的非主控节点发送生成临时文件的请求消息;
(3)主控节点依据基表的分布信息,向相应的非主控节点发送内连接计算子命令;同时执行本主控节点的内连接计算并生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件;
(4)非主控节点依据内连接计算子命令进行表的内连接计算,之后生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件并将其发送给主控节点;
(5)主控节点汇总从非主控节点获取的临时文件以及本地的临时文件,并将汇总结果发送给客户端。
优选实施方式下,非主控节点依据内连接计算子命令进行表的连接计算并生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件的步骤包括:
(1)非主控节点选择记录数少的表作为外层循环;
(2)非主控节点选择记录数多的表作为基表;
(3)非主控节点依据内连接计算子命令进行表的内连接计算并生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件。
优选实施方式下,所述主控节点还用于根据非基表的分布信息,向相应非主控节点发送删除临时文件请求消息;以及非主控节点响应所述请求并删除存储于本地的临时文件。
优选实施方式下,当所述连接计算命令为左外连接、右外连接或全连接计算命令时,其中,
(1)主控节点选择记录数多的表作为基表;
(2)主控节点依据非基表的分布信息,向相应的非主控节点发送生成临时文件的请求消息;
(3)主控节点依据基表的分布信息,向相应的非主控节点发送左外连接、右外连接或全连接计算子命令;并依据基表的选择情况判断是否进行二次连接操作:
其中,选择是否需要二次连接(JOIN)的必要性:
以A表和B表左外连接为例(A LEFT JOIN B ON A.a=B.b),根据左外连接的定义,A表中的每条记录必须和B表中的所有记录都匹配一次,所以就要求,各节点在作左外连接(LEFT JOIN)的时候,B表数据必须是完整的,如果A表是大表的话,把A表选为基表,把B表数据生成临时文件,符合降低系统通信开销及节省硬盘空间的要求,这种情况就不需要二次连接(JOIN);如果B表是大表的话,还是把B表数据生成临时文件,显然不符合上述第二点选择基表的要求,这种情况下,进行二次连接(JOIN)就非常有必要的,。
二次JOIN的含义:假设主控节点,第一次连接(JOIN)是内连接操作:主控节点以A1、A2与B1作内连接(INNER JOIN),把结果存成临时文件R1,非主控节点以A1、A2与B2作内连接(INNER JOIN),把结果存成临时文件R2,并且把R2通过FTP协议推送到主控节点上;第二次连接(JOIN)是左外连接操作:主控节点以数据A1、A2与R1、R2作左外连接(LEFTJOIN),将结果输出。
二次JOIN的意义在于,可以通过各节点第一次的内连接操作,有效的把B表数据过滤一遍,只将满足条件的记录存成临时文件,这样可以缩小临时文件的大小,即R1+R2<=A1+A2,因此,二次连接(JOIN)能够大大节省系统资源。
(4)当进行二次连接操作时,主控节点首先进行内连接计算并生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件,之后进行左外连接、右外连接或全连接计算;
(5)非主控节点依据获取的生成临时文件的请求消息,选择记录数多的表作为基表,并进行内连接计算并生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件,之后进行左外连接、右外连接或全连接计算,并将计算结果发送至主控节点;
(6)主控节点汇总所有节点的计算结果之后发送给客户端;
或,
(7)当不进行二次连接操作时,主控节点对表进行相应的左外连接、右外连接或全连接计算;
(8)非主控节点依据获取的生成临时文件的请求消息,选择记录数多的表作为基表,并对表进行左外连接、右外连接或全连接计算,并将计算结果发送至主控节点;
(9)主控节点汇总所有节点的计算结果之后发送给客户端。
上述说明示出并描述了本发明的一个优选实施例,但如前所述,应当理解本发明并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、修改和环境,并能够在本文所述发明构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进行的改动和变化不脱离本发明的精神和范围,则都应在本发明所附权利要求的保护范围内。
Claims (12)
1.一种用于分布式数据库的连接查询方法,其特征在于,包括:
在主控节点获取连接计算命令时,其依据该连接计算命令生成多个连接计算子命令并分发到多个相应的非主控节点;
非主控节点依据连接计算子命令进行表的连接计算,之后生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件并将其发送给主控节点;
主控节点汇总所有结果,并发送给客户端。
2.如权利要求1所述的用于分布式数据库的连接查询方法,其特征在于,所述方法具体包括:
在主控节点获取连接计算命令时,选择记录数多的表作为基表,并依据非基表的分布信息向相应的非主控节点发送生成临时文件的请求消息;主控节点进一步地依据基表的分布信息向相应的非主控节点发送依据所述连接计算命令而生成的连接计算子命令;
非主控节点依据所述生成临时文件的请求以及连接计算子命令进行表的连接计算,之后生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件并将其发送给主控节点;
主控节点汇总所有结果,并发送给客户端。
3.如权利要求1或2所述的用于分布式数据库的连接查询方法,其特征在于,当所述连接计算命令为内连接计算命令时,所述方法具体包括:
主控节点选择记录数少的表作为外层循环,并选择记录数多的表作为基表;
主控节点依据非基表的分布信息,向相应的非主控节点发送生成临时文件的请求消息;
主控节点依据基表的分布信息,向相应的非主控节点发送内连接计算子命令;同时执行本主控节点的内连接计算并生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件;
非主控节点依据内连接计算子命令进行表的内连接计算,之后生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件并将其发送给主控节点;
主控节点汇总从非主控节点获取的临时文件以及本地的临时文件,并将汇总结果发送给客户端。
4.如权利要求3所述的用于分布式数据库的连接查询方法,其特征在于,非主控节点依据内连接计算子命令进行表的连接计算并生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件的步骤包括:
非主控节点选择记录数少的表作为外层循环;
非主控节点选择记录数多的表作为基表;
非主控节点依据内连接计算子命令进行表的内连接计算并生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件。
5.如权利要求3所述的用于分布式数据库的连接查询方法,其特征在于,主控节点汇总从非主控节点获取的临时文件以及本地的临时文件并将汇总结果发送给客户端之后,还包括:
主控节点根据非基表的分布信息,向相应非主控节点发送删除临时文件请求消息;
非主控节点响应所述请求并删除存储于本地的临时文件。
6.如权利要求1或2所述的用于分布式数据库的连接查询方法,其特征在于,当所述连接计算命令为左外连接、右外连接或全连接计算命令时,所述方法具体包括:
主控节点选择记录数多的表作为基表;
主控节点依据非基表的分布信息,向相应的非主控节点发送生成临时文件的请求消息;
主控节点依据基表的分布信息,向相应的非主控节点发送左外连接、右外连接或全连接计算子命令;并依据基表的选择情况判断是否进行二次连接操作:
当进行二次连接操作时,主控节点首先进行内连接计算并生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件,之后进行左外连接、右外连接或全连接计算;
非主控节点依据获取的生成临时文件的请求消息,选择记录数多的表作为基表,并进行内连接计算并生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件,之后进行左外连接、右外连接或全连接计算,并将计算结果发送至主控节点;
主控节点汇总所有节点的计算结果之后发送给客户端;
或,
当不进行二次连接操作时,主控节点对表进行相应的左外连接、右外连接或全连接计算;
非主控节点依据获取的生成临时文件的请求消息,选择记录数多的表作为基表,并对表进行左外连接、右外连接或全连接计算,并将计算结果发送至主控节点;
主控节点汇总所有节点的计算结果之后发送给客户端。
7.一种用于分布式数据库的连接查询系统,其特征在于,包括:
主控节点,用于获取连接计算命令时,依据该连接计算命令生成多个连接计算子命令并分发到多个相应的非主控节点;以及进一步用于汇总所有结果,并发送给客户端;
非主控节点,用于依据连接计算子命令进行表的连接计算,之后生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件并将其发送给主控节点。
8.如权利要求7所述的用于分布式数据库的连接查询系统,其特征在于,在主控节点获取连接计算命令时,选择记录数多的表作为基表,并依据非基表的分布信息向相应的非主控节点发送生成临时文件的请求消息;主控节点进一步地依据基表的分布信息向相应的非主控节点发送依据所述连接计算命令而生成的连接计算子命令;所述非主控节点则依据所述生成临时文件的请求以及连接计算子命令进行表的连接计算,之后生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件并将其发送给主控节点;主控节点汇总所有结果,并发送给客户端。
9.如权利要求7或8所述的用于分布式数据库的连接查询系统,其特征在于,当所述连接计算命令为内连接计算命令时,其中,
主控节点选择记录数少的表作为外层循环,并选择记录数多的表作为基表;
主控节点依据非基表的分布信息,向相应的非主控节点发送生成临时文件的请求消息;
主控节点依据基表的分布信息,向相应的非主控节点发送内连接计算子命令;同时执行本主控节点的内连接计算并生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件;
非主控节点依据内连接计算子命令进行表的内连接计算,之后生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件并将其发送给主控节点;
主控节点汇总从非主控节点获取的临时文件以及本地的临时文件,并将汇总结果发送给客户端。
10.如权利要求9所述的用于分布式数据库的连接查询系统,其特征在于,非主控节点依据内连接计算子命令进行表的连接计算并生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件的步骤包括:
非主控节点选择记录数少的表作为外层循环;
非主控节点选择记录数多的表作为基表;
非主控节点依据内连接计算子命令进行表的内连接计算并生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件。
11.如权利要求9所述的用于分布式数据库的连接查询系统,其特征在于,所述主控节点还用于根据非基表的分布信息,向相应非主控节点发送删除临时文件请求消息;以及非主控节点响应所述请求并删除存储于本地的临时文件。
12.如权利要求7或8所述的用于分布式数据库的连接查询系统,其特征在于,当所述连接计算命令为左外连接、右外连接或全连接计算命令时,其中,
主控节点选择记录数多的表作为基表;
主控节点依据非基表的分布信息,向相应的非主控节点发送生成临时文件的请求消息;
主控节点依据基表的分布信息,向相应的非主控节点发送左外连接、右外连接或全连接计算子命令;并依据基表的选择情况判断是否进行二次连接操作:
当进行二次连接操作时,主控节点首先进行内连接计算并生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件,之后进行左外连接、右外连接或全连接计算;
非主控节点依据获取的生成临时文件的请求消息,选择记录数多的表作为基表,并进行内连接计算并生成以连接字段为识别键KEY创建索引的具有B树结构的临时文件,之后进行左外连接、右外连接或全连接计算,并将计算结果发送至主控节点;
主控节点汇总所有节点的计算结果之后发送给客户端;
或,
当不进行二次连接操作时,主控节点对表进行相应的左外连接、右外连接或全连接计算;
非主控节点依据获取的生成临时文件的请求消息,选择记录数多的表作为基表,并对表进行左外连接、右外连接或全连接计算,并将计算结果发送至主控节点;
主控节点汇总所有节点的计算结果之后发送给客户端。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210126349.0A CN103377236B (zh) | 2012-04-26 | 2012-04-26 | 一种用于分布式数据库的连接查询方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210126349.0A CN103377236B (zh) | 2012-04-26 | 2012-04-26 | 一种用于分布式数据库的连接查询方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103377236A true CN103377236A (zh) | 2013-10-30 |
CN103377236B CN103377236B (zh) | 2018-02-16 |
Family
ID=49462362
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210126349.0A Active CN103377236B (zh) | 2012-04-26 | 2012-04-26 | 一种用于分布式数据库的连接查询方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103377236B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016091174A1 (zh) * | 2014-12-09 | 2016-06-16 | 华为技术有限公司 | 图数据的搜索方法和装置 |
CN106250567A (zh) * | 2016-08-31 | 2016-12-21 | 天津南大通用数据技术股份有限公司 | 分布式数据库系统中表连接数据分布方式的选择方法及装置 |
CN106933933A (zh) * | 2015-12-31 | 2017-07-07 | 北京国双科技有限公司 | 数据表信息的处理方法及装置 |
CN107870946A (zh) * | 2016-09-28 | 2018-04-03 | 北京京东尚科信息技术有限公司 | 实时数据动态连接方法和装置 |
CN113986846A (zh) * | 2021-09-16 | 2022-01-28 | 阿里云计算有限公司 | 数据处理方法、系统、设备及存储介质 |
CN114064810A (zh) * | 2022-01-17 | 2022-02-18 | 北京奥星贝斯科技有限公司 | 处理事务的方法和装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090265305A1 (en) * | 2008-04-22 | 2009-10-22 | Barsness Eric L | Partial Indexes for Multi-Node Database |
CN101685449A (zh) * | 2008-09-26 | 2010-03-31 | 国际商业机器公司 | 一种用于连接多个异构分布式数据库中的表的方法和系统 |
CN101739398A (zh) * | 2008-11-11 | 2010-06-16 | 山东省标准化研究院 | 分布式数据库多连接查询优化算法 |
CN102323947A (zh) * | 2011-09-05 | 2012-01-18 | 东北大学 | 环形架构数据库上预连接表的生成方法 |
-
2012
- 2012-04-26 CN CN201210126349.0A patent/CN103377236B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090265305A1 (en) * | 2008-04-22 | 2009-10-22 | Barsness Eric L | Partial Indexes for Multi-Node Database |
CN101685449A (zh) * | 2008-09-26 | 2010-03-31 | 国际商业机器公司 | 一种用于连接多个异构分布式数据库中的表的方法和系统 |
CN101739398A (zh) * | 2008-11-11 | 2010-06-16 | 山东省标准化研究院 | 分布式数据库多连接查询优化算法 |
CN102323947A (zh) * | 2011-09-05 | 2012-01-18 | 东北大学 | 环形架构数据库上预连接表的生成方法 |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016091174A1 (zh) * | 2014-12-09 | 2016-06-16 | 华为技术有限公司 | 图数据的搜索方法和装置 |
US9798774B1 (en) | 2014-12-09 | 2017-10-24 | Huawei Technologies Co., Ltd. | Graph data search method and apparatus |
CN106933933A (zh) * | 2015-12-31 | 2017-07-07 | 北京国双科技有限公司 | 数据表信息的处理方法及装置 |
CN106933933B (zh) * | 2015-12-31 | 2019-12-10 | 北京国双科技有限公司 | 数据表信息的处理方法及装置 |
CN106250567A (zh) * | 2016-08-31 | 2016-12-21 | 天津南大通用数据技术股份有限公司 | 分布式数据库系统中表连接数据分布方式的选择方法及装置 |
CN107870946A (zh) * | 2016-09-28 | 2018-04-03 | 北京京东尚科信息技术有限公司 | 实时数据动态连接方法和装置 |
CN113986846A (zh) * | 2021-09-16 | 2022-01-28 | 阿里云计算有限公司 | 数据处理方法、系统、设备及存储介质 |
CN114064810A (zh) * | 2022-01-17 | 2022-02-18 | 北京奥星贝斯科技有限公司 | 处理事务的方法和装置 |
CN114064810B (zh) * | 2022-01-17 | 2022-05-03 | 北京奥星贝斯科技有限公司 | 处理事务的方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN103377236B (zh) | 2018-02-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Mayer et al. | Fogstore: Toward a distributed data store for fog computing | |
CN103377236A (zh) | 一种用于分布式数据库的连接查询方法及系统 | |
CN101408900B (zh) | 一种网格计算环境下的分布式空间数据查询优化方法 | |
CN104346377A (zh) | 一种基于唯一标识的数据集成和交换方法 | |
US8150836B2 (en) | System, method, and computer-readable medium for reducing row redistribution costs for parallel join operations | |
CN104885078A (zh) | 用于大规模并行处理数据库集群中的两阶段查询优化的方法 | |
CN105550274B (zh) | 双副本并行数据库的查询方法和装置 | |
CN104298541A (zh) | 云存储系统的数据分布算法及其装置 | |
CN104239320B (zh) | 一种数据合并方法及系统 | |
WO2014165160A1 (en) | System and method for performing a transaction in a massively parallel processing database | |
JP2013186890A (ja) | データベースミドルウェアを用いたデータ管理システム及びその方法 | |
CN105405070A (zh) | 一种分布式内存电网系统构建方法 | |
CN104731969A (zh) | 分布式环境下海量数据连接聚集查询方法、装置和系统 | |
CN106471501A (zh) | 数据查询的方法、数据对象的存储方法和数据系统 | |
CN105550332A (zh) | 一种基于双层索引结构的起源图查询方法 | |
Chen et al. | SSTD: A distributed system on streaming spatio-textual data | |
CN104298669A (zh) | 一种基于社交网络的人员地理信息挖掘模型 | |
Koh et al. | MapReduce skyline query processing with partitioning and distributed dominance tests | |
US11226986B2 (en) | Data table partitioning management method and apparatus | |
Seshadri et al. | Optimizing multiple queries in distributed data stream systems | |
CN107908713B (zh) | 一种基于Redis集群的分布式动态杜鹃过滤系统及其过滤方法 | |
CN105471893A (zh) | 一种分布式等值数据流连接方法 | |
KR101928817B1 (ko) | 공간 dbms 기반의 모의 전투훈련 시스템 | |
CN107465706B (zh) | 一种基于无线通信网络的分布式数据对象存储装置 | |
Toda et al. | Autonomous and distributed construction of locality aware skip graph |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |