一种云计算环境下的无共享数据库集群并行查询处理方法

文档序号:6439827阅读:202来源:国知局
专利名称:一种云计算环境下的无共享数据库集群并行查询处理方法
技术领域
本发明涉及一种数据库并行查询方法,尤其涉及一种云计算环境下的无共享数据库集群并行查询处理方法,属于数据库集群系统技术领域。
背景技术
随着企业及政府信息化的不断深入,数据库应用的复杂性日益增强,迫切需要解决海量数据处理、海量数据存储以及高可扩展性的问题,以便为业务支撑系统提供良好的数据存储、查询服务。但是,传统的单节点数据库无法从根本上满足上述需求。为此,人们借鉴计算机集群(将一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作)的技术理念,将多个数据库连接起来组成数据库集群系统。数据库集群系统(DatabaseCluster System,简称DBCS)将集群技术与数据库系统相结合,是一组完整的、自治的计算处理单元(节点),每个节点均有独自的CPU、内存以及磁盘等硬件资源,运行独立的操作系统和自治的数据库系统。各个节点通过高速专用网络或者商业通用网络互连,彼此协同计算,作为统一的数据库系统提供并行事务处理服务。目前,在数据库领域有两种数据库集群一种是无共享(SiareNothing)数据库集群,另一种是共享磁盘Chare Disk)数据库集群。随着数据库技术的发展和云计算技术的兴起,无共享数据库集群以其并行性好等优点,在云计算领域获得广泛应用。数据库查询服务是这些数据库集群系统中运行频率最高的应用场景之一。在申请号为2010102771 . 9的中国发明专利申请中,公开了一种分布式数据库的并行查询方法。 该方法中,首先设置查询代理模块,使查询代理模块直接接收外部模块的查询命令;其次设置多个与查询代理模块相关联的查询核心模块,查询核心模块通过分解任务提供对数据多维的粒度查询,提高整体的响应速度,查询核心模块通过多线程技术,多并发查询数据库, 充分发挥商用数据库的高吞吐量、高并发的特点,同时对多线程进行协调控制,查询流程管理;第三,采用分批数据返回的形式并采用预读机制,提高响应速度。该方法通过对查询任务“分而治之”的思想,由查询核心模块多并发发起查询,优先返回查询速度快的粒度数据, 从而达到了系统整体查询性能显著提升的效果,可以满足绝大多数应用系统快速查询的需要。

发明内容
本发明所要解决的技术问题在于提供一种云计算环境下的无共享数据库集群并行查询处理方法。为实现上述的发明目的,本发明采用下述的技术方案一种云计算环境下的无共享数据库集群并行查询处理方法,其特征在于包括以下步骤第一步对查询计划进行分割,得到由各数据节点分别执行的切片;第二步各数据节点分别进行切片处理,得到各数据节点的哈希连接;
第三步各数据节点通过聚合汇总数据流动,在控制节点进行哈希聚合,得到查询
结果集。其中较优地,在所述第二步中,各数据节点的切片处理包括以下步骤步骤1) 一个数据节点扫描第一表,得到第一哈希表,然后扫描第二表,与第一哈希表进行哈希连接,得到第一数据集;步骤2)另一个数据节点扫描第三表,得到第三哈希表,然后扫描第四表,与第三哈希表进行哈希连接,得到第二数据集;步骤幻所述另一个数据节点基于所述第一数据集和所述第二数据集进行哈希连接。或者,各数据节点的切片处理采用以下步骤步骤11) 一个数据节点扫描第一表,得到第一哈希表,然后扫描第二表,与第一哈希表进行哈希连接,得到第一数据集,并将第二表通过广播数据流动操作或者重新分布数据流动操作,发送给其他数据节点;步骤12)另一个数据节点扫描第三表,基于接收到的所述第二表和扫描的第三表,得到第三哈希表,然后扫描第四表,与第三哈希表进行哈希连接,得到第二数据集;步骤1 所述另一个数据节点基于所述第一数据集和所述第二数据集进行哈希连接。其中较优地,所述第三步中,各个数据节点对第二步中得到的所述哈希连接进行哈希聚合和排序后,再通过所述聚合汇总数据流动操作,发送给所述控制节点。本发明利用节点数据流动操作,使查询执行过程中数据可以在各节点之间流动, 从而使每一个数据节点都获得所需要的全部数据,完成并发执行查询过程。因为对查询语句进行并行查询支持处理,所以大幅度提升了执行速度。


下面结合附图和具体实施方式
对本发明作进一步的详细说明。图1为本发明的具体实施例中,节点数据流动的示意图;图2为本发明的具体实施例中,所使用的查询计划树的示意图。
具体实施例方式在云计算环境下,无共享数据库集群中的数据是分片存储的,每一个数据节点只有一部分数据。在某些SQL语句的执行过程中,有些数据节点需要对包括其他节点数据在内的全部数据进行操作才能完成查询计划。为此,本发明通过在数据节点的查询计划树的适当地方插入节点数据流动操作,使查询执行过程中数据可以在各节点之间流动,从而使每一个数据节点都获得所需要的全部数据,完成并发执行查询过程。下面对此展开具体的说明。在作为本发明具体实施例的某个无共享数据库集群中,包括控制节点和一到多个数据节点。每个数据节点负责存储数据,接受访问计划并执行,然后返回计划处理结果。 用户的数据首先以比较均勻的方式,例如采用哈希(hash,也称散列)分布方式或者范围 (range)分布方式等分别存放在每个数据节点上。控制节点接受客户端的查询请求,分析请求并生成查询计划,分发查询计划给数据节点,以使各数据节点并发执行查询。为了实现最大化的并行查询,本发明将查询计划分割成不同的切片,用于各个数据节点执行,并在切片中加入适当的数据流动操作,以使各个数据节点能够得到所需的全部数据来执行查询。每个切片都是查询计划的一部分,并能够独立在各个数据节点上工作。 部分切片中包含的执行内容比传统数据库查询过程多了一步操作数据流动。对查询计划的分割切片是按照计划中的数据流动操作来做的。一个数据流动操作涉及的双方位于不同的切片中。前已述及,有些数据节点的查询计划必须要拥有其他数据节点的数据才能完成, 为此在该数据节点的查询计划切片的适当地方插入节点数据流动操作,使查询执行过程中所需的数据在各节点间流动,如此每一个数据节点均可获得所需要的全部数据,同时也保证了查询操作都是在每个数据节点上单独执行的。需要说明的是,并不是所有的查询计划都需要有数据流动操作,例如查询系统表信息等就不需要。在本发明中,数据流动包括三种类型A 聚合汇总数据流动,是指每个数据节点将哈希连接(join)后的数据发到一个单节点上,通常是发到控制节点进行合并。B 重新分布数据流动,即重分发数据流动,是指利用哈希连接(join)的列值的哈希值的不同,将筛选后的数据在其他数据节点上重新分布。C 广播数据流动,即一个数据节点向多个节点广播需要发送的数据。重新分布数据流动是向特定少数数据节点发送数据,广播数据流动是向多个节点发送数据。之所以需要广播数据流动和重新分布数据流动,是因为每个数据节点上都只保存了一部分数据,出现不同数据节点之间做连接(join)操作的时候,需要将自己的数据向其他数据节点发送。有了这两个操作,就能保证所有的连接(join)操作都是在每个数据节点上单独执行的。聚合汇总数据流动是在每个数据节点单独执行好查询计划后,将数据发往控制节点上,然后由控制节点整合返回给客户端。广播数据流动能够保证所有情况下单个数据节点上查询的数据完整性,有的情况下只需要做重新分布数据操作就能保证单个数据节点上查询的数据完整性。在云计算环境下,无共享数据库集群是一个分布式存储的数据库。对于用户来讲, 随时需要从这些分布式存储的数据库中得到完整的数据。聚合汇总数据流动就是为了保证返回给用户的数据是完整的。而广播数据流动和重新分布数据流动是为了在单个数据节点上查询时保证数据的完整性。基于上述数据流动的分类,在数据节点的查询计划树的适当地方插入节点数据流动操作也分为三类广播数据操作、重新分布数据操作和聚合汇总数据操作。广播数据流动操作是一个节点向多个节点广播需要发送的数据。重新分布数据流动操作是利用连接(join)的列值(连接键)的哈希值的不同,将筛选后的数据在其他数据节点上重新分布。聚合汇总数据流动操作是每个节点将执行查询后的数据发到一个单节点上,通常是发到控制节点进行合并。下面结合图1和图2,以一个商业管理领域的订单查询为例,对本发明的具体实施步骤作进一步说明。
5
在该订单查询示例中,假设如下查询语句
select
c custkey, c—name, sum(l_price * l discount) as revenue, c_address,n_nation from
customer, orders,lineitem,nation where
ccustkey = ocustkey and l orderkey = o orderkey and o orderdate >= date '2010-08-02' and o orderdate < date '2011-08-02' + interval '2 month' and c nationkey = n nationkey group by
c_custkey,c_name, c_phone,n_name,c_address order by
revenue desc上述查询语句的含义是最近2个月内,按消费总额的多少,从高到低对顾客消费总额进行的统计排名。共涉及到4张表顾客(customer)表、订单(orders)表、商品 (lineitem)表禾口国籍(nation)表。在无共享数据库集群的环境下,假设以上4张表的数据都已经比较均勻地分布在 η个数据节点上,查询计划被分割成与数据节点数η—致的切片,即η个切片。各个数据节点之间的数据流动如图1所示,相应的查询计划树如图2所示。本发明所采用的并行查询整体步骤是第一步对查询计划进行分割,得到由各数据节点分别执行的切片;第二步各数据节点分别进行切片处理,得到各数据节点的哈希连接;第三步各数据节点通过聚合汇总数据流动,在控制节点进行哈希聚合,得到查询
结果集。在第二步中各个数据节点的切片处理的具体步骤,如图1所示,包括步骤1) 一个数据节点扫描第一表,得到第一哈希表,然后扫描第二表,与第一哈希表进行哈希连接,得到第一数据集;步骤2)另一个数据节点扫描第三表,得到第三哈希表,然后扫描第四表,与第三哈希表进行哈希连接,得到第二数据集;步骤幻所述另一个数据节点基于所述第一数据集和所述第二数据集进行哈希连接。通过步骤1)到步骤幻就得到了各数据节点的哈希连接,再进行第三步得到结果集。如果存在一个数据节点的某个数据(假设是第二表)是多个数据节点都需要的, 那么就需要利用广播数据流动操作。如果存在一个数据节点的某个数据(假设是第二表) 是另一个数据节点需要的,那么就需要利用重新分布数据流动操作。具体而言,前述步骤1)到步骤3)可以变更为步骤11) 一个数据节点扫描第一表,得到第一哈希表,然后扫描第二表,与第一哈希表进行哈希连接,得到第一数据集,并将第二表通过广播数据流动操作或者重新分布数据流动操作,发送给其他数据节点;步骤12)另一个数据节点扫描第三表,基于接收到的所述第二表和扫描的第三表,得到第三哈希表,然后扫描第四表,与第三哈希表进行哈希连接,得到第二数据集;步骤13)另一个数据节点基于所述第一数据集和所述第二数据集进行哈希连接。下面结合具体实施例,基于图2进行详细说明步骤A.各个数据节点上同时扫描各自的国籍表数据,将各数据节点上的国籍表数据向其他节点广播,即广播数据流动,使各个数据节点得到全部的国籍表数据。由于国籍表记录条数不多,所以这一步执行很快。在此,假设根据查询要求而需将国籍表进行广播。步骤B.各个节点上同时扫描各自顾客数据,并基于顾客数据和收到的国籍表数据的哈希表进行哈希连接,生成RS-CN数据集。步骤C.各个节点同时扫描各自的订单表数据,过滤数据生成RS-O数据集。步骤D.各个节点同时扫描各自的商品表数据,过滤生成RS-L数据集。步骤E.各个节点同时将各自的RS-O哈希表和RS-L进行哈希连接,生成RS-OL数据集,注意此过程不需要执行重新分布数据操作,因为订单和商品的分布列都是查询的关键值(order key)。这就保证了各自需要连接的对象都是在各自的机器上,所以η个节点就开始并行连接了。步骤F.各个节点将自己在步骤E生成的RS-OL数据集按照custkey (顾客关键值)在所有节点间进行重新分布数据流动操作,可以按照哈希(hash,散列)分布方式或者范围(range)分布方式在节点间来重新分布数据,本实施例中默认采用哈希分布方式。这样,每个节点都会有自己的RS-OL数据集。步骤G.各个节点将自己在步骤B生成的RS-CN数据集,与自己节点上的经过重新分布数据流动的RS-OL数据集进行哈希连接。步骤H.最后各个数据节点进行聚合、排序,发往控制节点。本发明所提供的无共享数据库集群并行查询处理方法在云计算环境下,充分利用每个集群节点的计算能力,并发处理数据查询请求。该方法理论上可随节点数的增加而不断提升系统的吞吐量,持续满足海量数据查询对性能的要求。以上对本发明所提供的无共享数据库集群并行查询处理方法进行了详细的说明。 对本领域的技术人员而言,在不背离本发明实质精神的前提下对它所做的任何显而易见的改动,都将构成对本发明专利权的侵犯,将承担相应的法律责任。
权利要求
1.一种云计算环境下的无共享数据库集群并行查询处理方法,所述数据库集群包括控制节点和多个数据节点,所述控制节点接受客户端的查询请求,生成查询计划并分发给所述数据节点,其特征在于包括以下步骤第一步对所述查询计划进行分割,得到由各数据节点分别执行的切片; 第二步各数据节点分别进行切片处理,得到各数据节点的哈希连接; 第三步各数据节点通过聚合汇总数据流动操作,在控制节点进行哈希聚合,得到查询结果集。
2.如权利要求1所述的无共享数据库集群并行查询处理方法,其特征在于 在所述第二步中,各数据节点的切片处理包括以下步骤步骤1) 一个数据节点扫描第一表,得到第一哈希表,然后扫描第二表,与第一哈希表进行哈希连接,得到第一数据集;步骤2~)另一个数据节点扫描第三表,得到第三哈希表,然后扫描第四表,与第三哈希表进行哈希连接,得到第二数据集;步骤幻所述另一个数据节点基于所述第一数据集和所述第二数据集进行哈希连接。
3.如权利要求1所述的无共享数据库集群并行查询处理方法,其特征在于 在所述第二步中,各数据节点的切片处理包括以下步骤步骤11) 一个数据节点扫描第一表,得到第一哈希表,然后扫描第二表,与第一哈希表进行哈希连接,得到第一数据集,并将第二表通过广播数据流动操作或者重新分布数据流动操作,发送给其他数据节点;步骤12)另一个数据节点扫描第三表,基于接收到的所述第二表和扫描的第三表,得到第三哈希表,然后扫描第四表,与第三哈希表进行哈希连接,得到第二数据集;步骤1 所述另一个数据节点基于所述第一数据集和所述第二数据集进行哈希连接。
4.如权利要求3所述的无共享数据库集群并行查询处理方法,其特征在于 所述广播数据流动操作是一个节点向多个节点广播需要发送的数据。
5.如权利要求3所述的无共享数据库集群并行查询处理方法,其特征在于所述重新分布数据流动操作是利用连接的列值的哈希值的不同,将筛选后的数据在其他数据节点上重新分布。
6.如权利要求1所述的无共享数据库集群并行查询处理方法,其特征在于 所述第三步中,各个数据节点对第二步中得到的所述哈希连接进行哈希聚合和排序后,再通过所述聚合汇总数据流动操作,发送给所述控制节点。
全文摘要
本发明公开了一种云计算环境下的无共享数据库集群并行查询处理方法,包括以下步骤第一步对查询计划进行分割,得到由各数据节点分别执行的切片;第二步各数据节点分别进行切片处理,得到各数据节点的哈希连接;第三步各数据节点通过聚合汇总数据流动,在控制节点进行哈希聚合,得到查询结果集。本发明利用节点数据流动操作,使查询执行过程中数据可以在各节点之间流动,完成并发执行查询过程,大幅度提升了执行速度。
文档编号G06F17/30GK102521307SQ20111039267
公开日2012年6月27日 申请日期2011年12月1日 优先权日2011年12月1日
发明者冯玉, 冷建全, 李睿峰, 李祥凯, 王殿成 申请人:北京人大金仓信息技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1