数据表连接方式处理方法及装置与流程

文档序号:11286295阅读:384来源:国知局
数据表连接方式处理方法及装置与流程

【技术领域】

本申请涉及数据库技术领域,尤其涉及一种数据表连接方式处理方法及装置。



背景技术:

随着互联网的发展,数据呈现爆发式增长,数据结构也开始多元化,数据含有的信息量越来越多,数据仓库在这样的背景下发挥着巨大的作用。由于大数据时代的降临,数据仓库转成为分布式架构,以满足爆发式增长的计算及存储的需求。分布式数据仓库一般使用列式存储,并以文件的形式保存数据,因此,采用分布式数据仓库可提高大数据的存储及计算性能。

在分布式数据仓库的查询过程中,经常需要进行数据表之间的连接(join)计算。用于实现join计算的算法(简称为join算法)有很多,不同join算法所能处理的数据量以及所消耗的各种资源一般是不同的。对于分布式数据仓库而言,若能够选择合适的join算法,不仅可以节约分布式数据仓库的资源,而且可以提高查询效率。但是,由于分布式数据仓库发展时间不长,所以目前并不存在适用于分布式数据仓库的join算法选择方案。



技术实现要素:

本申请的多个方面提供一种数据表连接方式处理方法及装置,用以选择合适的join算法进行数据表之间的连接,进而节约分布式数据仓库的资源,提高查询效率。

本申请的一方面,提供一种数据表连接方式处理方法,包括:

根据待连接数据表所在的分布式数据仓库环境,设置用于代价估计的参数 列表;

根据所述参数列表中的参数和各候选数据表连接方式的执行逻辑,预估所述各候选数据表连接方式对所述待连接数据表进行连接计算时的执行代价;

根据预估的所述各候选数据表连接方式对所述待连接数据表进行连接计算时的执行代价,选择用于对所述待连接数据表进行连接计算的目标数据表连接方式。

本申请的另一方面,提供一种数据表连接方式处理装置,包括:

设置模块,用于根据待连接数据表所在的分布式数据仓库环境,设置用于代价估计的参数列表;

预估模块,用于根据所述参数列表中的参数和各候选数据表连接方式的执行逻辑,预估所述各候选数据表连接方式对所述待连接数据表进行连接计算时的执行代价;

选择模块,用于根据预估的所述各候选数据表连接方式对所述待连接数据表进行连接计算时的执行代价,选择用于对所述待连接数据表进行连接计算的目标数据表连接方式。

在本申请中,根据待连接数据表所在的分布式数据仓库环境,设置用于代价估计的参数列表,根据参数列表中的参数和各候选数据表连接方式的执行逻辑,预估各候选数据表连接方式对待连接数据表进行连接计算时的执行代价,根据预估的各候选数据表连接方式对待连接数据表进行连接计算时的执行代价,选择用于对待连接数据表进行连接计算的目标数据表连接方式,从而选择与分布式数据仓库环境相适合的数据表连接方式,进而在基于所选择的数据表连接方式进行数据表之间的连接计算时,可以节约分布式数据仓库的资源,提高查询效率。

【附图说明】

为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有 技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本申请一实施例提供的数据表连接方式处理方法的流程示意图;

图2为本申请另一实施例提供的psj方式的执行逻辑的示意图;

图3为本申请又一实施例提供的bhj方式的执行逻辑的示意图;

图4为本申请又一实施例提供的bkhj方式的执行逻辑的示意图;

图5为本申请又一实施例提供的数据表连接方式处理装置的结构示意图;

图6为本申请又一实施例提供的数据表连接方式处理装置的结构示意图。

【具体实施方式】

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

在分布式数据仓库的查询过程中,经常需要进行数据表之间的连接计算。目前用于实现join计算的算法有很多,而不同join算法所能处理的数据量以及所消耗的各种资源一般是不同的。对于分布式数据仓库而言,若能够选择合适的join算法,不仅可以节约分布式数据仓库的资源,而且可以提高查询效率。但是,由于分布式数据仓库发展时间不长,所以目前并不存在适用于分布式数据仓库的join算法选择方案。

针对上述问题,本申请提供一种解决方案,其核心思想是:基于待连接数据表所在的分布式数据仓库环境,设置用于代价估计的参数列表,进而基 于参数列表中的参数和各候选数据表连接方式的执行逻辑,预估各候选数据表连接方式对待连接数据表进行连接计算时的执行代价,进而基于预估的执行代价,从各候选数据表连接方式中选择真正用于对待连接数据表进行连接计算的数据表连接方式。

进一步,在选择目标数据表连接方式之后,可以采用目标数据表连接方式,对待连接数据表进行连接计算。

本申请可以从各候选数据表连接方式中选择与分布式数据仓库环境相适合的数据表连接方式,进而在基于所选择的数据表连接方式进行数据表之间的连接计算时,可以节约分布式数据仓库的资源,提高查询效率。

下面将通过具体实施方式对本申请技术方案做详细说明。

图1为本申请一实施例提供的数据表连接方式处理方法的流程示意图。如图1所示,该方法包括:

101、根据待连接数据表所在的分布式数据仓库环境,设置用于代价估计的参数列表。

102、根据上述参数列表中的参数和各候选数据表连接方式的执行逻辑,预估各候选数据表连接方式对待连接数据表进行连接计算时的执行代价。

103、根据预估的各候选数据表连接方式对待连接数据表进行连接计算时的执行代价,选择用于对待连接数据表进行连接计算的目标数据表连接方式。

具体的,在分布式数据仓库的查询场景中,当出现数据表连接(join)任务时,可以确定待连接数据表。例如,在电子商务领域,可能需要联合查询订单(order)表和用户(customer)表,此时需要对订单表和用户表进行连接计算,因此可以向数据表连接方式处理装置(后续简称为处理装置)提交数据表连接任务,在该数据表连接任务中携带有订单表和用户表的标识。处理装置根据该数据表连接任务,确定待连接数据表包括订单表和用户表。

在确定待连接数据表之后,处理装置采用数据表连接方式(简称为join算法)对待连接数据表进行连接计算。

在本实施例中,为了选择合适的数据表连接方式对待连接数据表进行连接计算,以节约分布式数据仓库的资源,提高查询效率,处理装置将可使用的数据表连接方式作为候选数据表连接方式,预估各候选数据表连接方式对待连接数据表进行连接计算时的执行代价,基于预估的各候选数据表连接方式对待连接数据表进行连接计算时的执行代价,从各候选数据表连接方式中选择适合对待连接数据表进行连接计算的数据表连接方式。

具体的,处理装置确定待连接数据表所在的分布式数据仓库环境,根据待连接数据表所在的分布式数据仓库环境,设置用于代价估计的参数列表;参数列表中包括用于对候选数据表连接方式进行代价估计时所需的参数。

进一步,处理装置设置参数列表的一种实施方式包括:

设置待连接数据表中各数据表包含的数据记录数、数据记录总数以及每条数据记录的平均长度;

根据分布式数据仓库的文件系统,设置每个存储节点支持的数据分块的大小;

根据分布式数据仓库的硬件信息,设置连接计算所需的各种操作的单位代价以及每个计算节点所能处理的数据记录数。

在上述实施方式中,参数列表中包括以下参数:各数据表包含的数据记录数、数据记录总数、每条数据记录的平均长度、每个存储节点支持的数据分块的大小、各种操作的单位代价以及每个计算节点所能处理的数据记录数。

由于数据表连接计算需要至少两个数据表,所以待连接数据表包括至少两个数据表。对于待连接数据表中的每个数据表包含一定数据记录,因此可以统计获得每个数据表包含的数据记录数,将每个数据表包含的数据记录数求和可获得数据记录总数;另外,根据每个数据表包含的数据记录的数据量可求得数据总量,根据数据总量和数据记录总数可获得每条数据记录的平均长度。

进一步,对连接计算进行分析,可以发现连接操作涉及数据表的读和/或写,进一步涉及本地读操作、本地写操作、网络读操作和网络写操作中的 至少一种。基于此,在根据分布式数据仓库的硬件信息,设置连接计算所需的各种操作的单位代价时,具体可以根据分布式数据仓库使用的存储介质,确定本地读操作的单位代价和本地写操作的单位代价。举例说明,分布式数据仓库使用的存储介质可以是磁盘、闪存、u盘等,不同存储介质所需要的读写时间一般不同。因此,处理装置可以根据存储介质,确定本地读操作的单位代价和本地写操作的单位代价。另外,考虑到分布式数据仓库可能会跨网络进行数据表的读写,因此处理装置还可以根据分布式数据仓库的网络拓扑结构,确定网络读操作的单位代价和网络写操作的单位代价。

上述本地读操作的单位代价定义为本地读1字节(byte)数据的平均代价;上述本地写操作的单位代价定义为本地写1byte数据的平均代价;同理,上述网络读操作的单位代价定义为通过网络读1字节(byte)数据的平均代价;上述网络写操作的单位代价定义为通过网络写1byte数据的平均代价。

另外,分布式数据仓库包括多个计算节点和多个存储节点。在预估各候选数据表连接方式的执行代价时,可以根据分布式数据仓库的文件系统确定存储节点所支持的数据分块的大小,例如可以是256mb,并根据分布式数据仓库的硬件信息确定计算节点所能处理的数据记录数,例如1gb。

之后,处理装置根据参数列表中的参数和各候选数据表连接方式的执行逻辑,预估各候选数据表连接方式对所述待连接数据表进行连接计算时的执行代价。

在一可选实施方式中,候选数据表连接方式的执行逻辑可通过其执行步骤以及执行步骤中的关键操作来体现。所述关键操作是指主要体现该执行步骤的执行代价的操作,例如若某操作在某一方面的代价大于预设值,或者远大于其他操作在该方面的代价,则确定该操作为关键操作。基于此,处理装置根据参数列表中的参数和各候选数据表连接方式的执行逻辑,预估各候选数据表连接方式对所述待连接数据表进行连接计算时的执行代价的过程包括:

对每个候选数据表连接方式,确定该候选数据表连接方式的执行步骤以 及每个执行步骤中的关键操作;根据参数列表中的参数和每个执行步骤中的关键操作,预估每个执行步骤的执行代价;根据每个执行步骤的执行代价,获得候选数据表连接方式的执行代价。

进一步,上述根据参数列表中的参数和每个执行步骤中的关键操作,预估每个执行步骤的执行代价的实施方式包括:

对于每个执行步骤,从参数列表中获取该执行步骤所需的目标参数;根据该执行步骤所需的目标参数和该执行步骤中的关键操作,预估该执行步骤中的关键操作的执行代价;根据该执行步骤中的关键操作的执行代价,获得该执行步骤的执行代价。

例如,在较为简单的实施方式中,可以将执行步骤中的关键操作的执行代价进行叠加,以获得执行步骤的执行代价。或者,直接将执行步骤中的关键操作的执行代价作为该执行步骤的执行代价。

在一可选实施方式中,采用三元组(数据记录数消耗、cpu消耗、io消耗)来表示上述执行代价。即可以从所操作的数据记录数(rowcount)、所消耗的cpu资源以及所消耗的io资源三个维度描述一个执行步骤或候选数据表连接方式的执行代价。

不同候选数据表连接方式的执行代价都可以通过上述三元组进行表示,进而进行比较。

在一实际应用场景中,假设较为常用的数据表连接方式包括但不限于以下三种:

分区有序连接(partitionedsortjoin,简称psj)方式;

广播哈希连接(broadcastedhashjoin,简称bhj)方式;

分区哈希连接(blockedhashjoin,简称bkhj)方式。

如图2所示,为psj方式的执行逻辑的示意图。psj包括重分布(re-partition)步骤和有序连接步骤。

如图3所示,为bhj方式的执行逻辑的示意图。在图3中以待连接数据表包括两个数据表为例,bhj包括广播(broadcast)步骤和哈希连接步骤。

如图4所示,为bkhj方式的执行逻辑的示意图。bkhj包括广播分发步骤和哈希连接步骤。

上述psj方式、bhj方式以及bkhj方式均可作为本申请的候选数据表连接方式。

对于不同候选数据表连接方式,处理装置对其进行预估的过程有所差异,下面将分别针对不同候选数据表连接方式,对预估过程进行详细说明。

若候选数据表连接方式为psj方式,则处理装置可以确定该psj方式的执行步骤包括:重分布步骤和有序连接步骤;重分布步骤主要是对所有待连接数据表进行排序并分发到不同计算节点上,有序连接步骤主要目的是获取重分布步骤输出的所有符合连接条件的数据表组合并输出。进一步,可以确定重分布步骤中的关键操作包括:本地读操作、网络读操作、本地排序操作和本地写操作;相应的,可以确定有序连接步骤中的关键操作包括:输出操作。

处理装置在确定psj方式的执行步骤以及每个执行步骤中的关键操作之后,需要对每个执行步骤,从参数列表中获取该执行步骤所需的目标参数。具体的:

对psj方式中的重分布步骤,处理装置可以从参数列表中获取参数n、l、rc、rnc以及wc作为重分布步骤所需的目标参数;其中,n表示数据记录总数;l表示每条数据记录的平均长度;rc表示本地读操作的单位代价;rnc表示网络读操作的单位代价;wc表示本地写操作的单位代价;

对psj方式中的有序连接步骤,处理装置可以从参数列表中获取nj以及n作为有序连接步骤所需的目标参数,其中,nj表示待连接数据表中第j个数据表包含的数据记录数,j=1…n;n表示待连接数据表中数据表的个数。

在获得重分布步骤和有序连接步骤所需的目标参数之后,处理装置可以根据重分布步骤所需的目标参数和重分布步骤中的关键操作,预估重分布步骤中的关键操作的执行代价,并根据有序连接步骤所需的目标参数和有序连接步骤中的关键操作,预估有序连接步骤中的关键操作的执行代价。具体的:

对psj方式中的重分布步骤,处理装置可以根据上述参数n、l、rc、rnc以及wc,预估本地读操作的执行代价为(0,0,n*l*rc),网络读操作的执行代价为(n,0,n*l*rnc),本地排序操作的执行代价为(0,n,0)以及本地写操作的执行代价为(0,0,n*l*wc);

对psj方式中的有序连接步骤,处理装置可以根据上述参数nj以及n,预估输出操作的执行代价为(j,0,0),j=(∏nj)1/n,即j=(n1*n2*...*nn)1/n

在获得重分布步骤中的关键操作的执行代价和有序连接步骤中的关键操作的执行代价之后,处理装置可以根据重分布步骤中的关键操作的执行代价获得重分布步骤的执行代价,并根据有序连接步骤中的关键操作的执行代价获得有序连接步骤的执行代价。具体的:

对psj方式中的重分布步骤,处理装置可以将本地读操作的执行代价(0,0,n*l*rc)、网络读操作的执行代价(n,0,n*l*rnc)、本地排序操作的执行代价(0,n,0)以及本地写操作的执行代价(0,0,n*l*wc)进行叠加,以获得执行代价(n,n,n*l*(rc+rnc+wc))作为重分布步骤的执行代价;

进一步可选的,考虑到在分布式数据仓库场景中,待连接数据表中的数据记录需要分布到p个计算节点上,若分布到每个计算节点上的数据记录均衡,则在每个计算节点上的执行代价是相同的,所以可以直接通过数据量n*l与相应操作的单位代价计算出相应操作的执行代价;若分布到每个计算节点上的数据记录不均衡,则对网络读操作和本地写操作来说,由于需要等待其它计算节点上的数据,所以需要以最大数据记录所在计算节点(或称为消耗最大的计算节点)上的代价为基准乘以p,获得最终执行代价。

基于上述,在将本地读操作的执行代价(0,0,n*l*rc)、网络读操作的执行代价(n,0,n*l*rnc)、本地排序操作的执行代价(0,n,0)以及本地写操作的执行代价(0,0,n*l*wc)进行叠加,以获得执行代价(n,n,n*l*(rc+rnc+wc))作为重分布步骤的执行代价之前,处理装置可以判断待连接数据表包含的数据记录是否发生分布倾斜。

具体的,可以采用被称为topkvalues的统计信息来估计消耗最大的计算节点。topkvalues指的是某一列数据中重复度最高的k个值及其重复次数。优选的,为了简化问题的复杂度,考虑k=1,重复度最高的值占整体数据的比例是p,本申请称之为分布倾斜率。将p与1/p进行比较;若p>1/p,则可以判定出现了数据分布倾斜,此时消耗最大的计算节点需要处理的数据量是n*l*p;若p<=1/p,则判定未出现数据分布倾斜,此时每个计算节点需要处理的数据量是n*l*1/p。

若判断结果为是,即出现了数据分布倾斜,则将网络读操作的执行代价(n,0,n*l*rnc)修正为(n,0,p*n*l*p*rnc),将本地写操作的执行代价(0,0,n*l*wc)修正为(0,0,p*n*l*p*wc);其中,p表示分布倾斜率;p表示用于对待连接数据表进行连接处理的计算节点的个数。

若判断结果为否,即未出现数据分布倾斜,则网络读操作的执行代价(n,0,p*n*l*1/p*rnc),即(n,0,n*l*rnc);同理,本地写操作的执行代价(0,0,p*n*l*1/p*wc),即(0,0,n*l*wc)。

基于上述,若出现了数据分布倾斜,则处理装置需要将本地读操作的执行代价(0,0,n*l*rc)、修正后的网络读操作的执行代价(n,0,p*n*l*p*rnc)、本地排序操作的执行代价(0,n,0)以及修正后的本地写操作的执行代价(0,0,p*n*l*p*wc)进行叠加,以获得执行代价(n,n,n*l*rc+p*n*l*p*(rnc+wc))作为重分布步骤的执行代价。

对psj方式中的有序连接步骤,处理装置可以将输出操作的执行代价(j,0,0)作为有序连接步骤的执行代价。

在获得重分布步骤的执行代价以及有序连接步骤的执行代价之后,处理装置可以将两个执行步骤的执行代价进行叠加,以获得psj方式的执行代价。具体的:

在出现了数据分布倾斜的情况下,psj方式的执行代价为(n+j,n,n*l*rc+p*n*l*p*(rnc+wc));

在未出现数据分布倾斜的情况下,psj方式的执行代价为(n+j,n,n*l *(rc+rnc+wc))。

若候选数据表连接方式为bhj方式,则处理装置可以确定bhj方式的执行步骤包括:广播步骤和哈希连接步骤。在bhj方式下,将n个数据表中最大的数据表作为主数据表,将其余数据表作为辅数据表,其广播步骤主要是将辅数据表通过网络传输分发到主数据表中。这意味着,该广播步骤包括:本地读操作、网络读操作和本地写操作。本实施例选择网络读操作作为广播步骤中的关键操作,但不限于此。哈希连接步骤主要是通过哈希算法获取所有符合连接条件的数据表组合并输出,因此可以确定哈希连接步骤包括:哈希计算和输出操作。本实施例选择输出操作作为哈希连接步骤中的关键操作,但不限于此。

处理装置在确定bhj方式的执行步骤以及每个执行步骤中的关键操作之后,需要对每个执行步骤,从参数列表中获取该执行步骤所需的目标参数。具体的:

对bhj方式的广播步骤,处理装置可以从参数列表中获取参数ni、nk、d、l以及rnc作为广播步骤所需的目标参数;其中,nk表示待连接数据表中主数据表包含的数据记录数,k为1…n中的任一取值;ni表示待连接数据表中第i个辅数据表包含的数据记录数,i=1…n且i≠k;d表示每个存储节点支持的数据分块的大小;l表示每条数据记录的平均长度;rnc表示网络读操作的单位代价;n表示待连接数据表中数据表的个数;

对bhj方式的哈希连接步骤,处理装置可以从参数列表中获取参数nj以及n作为哈希连接步骤所需的目标参数;其中,nj表示待连接数据表中第j个数据表包含的数据记录数,j=1…n;n表示待连接数据表中数据表的个数。

在获得广播步骤和哈希连接步骤所需的目标参数之后,处理装置可以根据广播步骤所需的目标参数和广播步骤中的关键操作,预估广播步骤中的关键操作的执行代价,并根据哈希连接步骤所需的目标参数和哈希连接步骤中的关键操作,预估哈希连接步骤中的关键操作的执行代价。具体的:

对bhj方式中的广播步骤,处理装置可以根据上述参数ni、nk、d、l以 及rnc,预估网络读操作的执行代价为(∑ni*m,0,∑ni*m*l*rnc);其中,m=nk/d;

对bhj方式中的哈希连接步骤,处理装置可以根据上述参数nj以及n,预估输出操作的执行代价为(j,0,0),j=(∏nj)1/n

进一步,考虑到辅数据表包含的数据记录数可能大于每个存储节点支持的数据分块的大小d,对于这种情况,需要将数据记录从内存写入外存,即退化为nestedloopjoin的情况。对于这种情况,由于数据记录从内存写入外存的代价很大,因此需要考虑这部分代价。

基于上述,在将输出操作的执行代价(j,0,0)作为哈希连接步骤的执行代价之前,处理装置需要判断各辅数据表中是否存在所包含的数据记录数大于每个存储节点支持的数据分块的大小d的数据表;若判断结果为是,则对输出操作的执行代价(j,0,0)进行修正,以获得修正后的执行代价(j,nk*∑nl,nk*∑nl*l*wc)作为哈希连接步骤的执行代价;其中,nl表示第l个所包含的数据记录数大于每个存储节点支持的数据分块的大小d的数据表,l=1…n且l≠k。

在获得广播步骤中的关键操作的执行代价和哈希连接步骤中的关键操作的执行代价之后,处理装置可以根据广播步骤中的关键操作的执行代价获得广播步骤的执行代价,并根据哈希连接步骤中的关键操作的执行代价获得哈希连接步骤的执行代价。具体的:

对bhj方式的广播步骤,处理装置可以将网络读操作的执行代价(∑ni*m,0,∑ni*m*l*rnc)作为广播步骤的执行代价;

对bhj方式的哈希连接步骤,若各辅数据表中存在所包含的数据记录数大于每个存储节点支持的数据分块的大小d的数据表,则处理装置可以将修正后的执行代价(j,nk*∑nl,nk*∑nl*l*wc)作为哈希连接步骤的执行代价;若各辅数据表中不存在所包含的数据记录数大于每个存储节点支持的数据分块的大小d的数据表,则处理装置可以将输出操作的执行代价(j,0,0)作为哈希连接步骤的执行代价。

在获得广播步骤的执行代价以及哈希连接步骤的执行代价之后,处理装 置可以将两个执行步骤的执行代价进行叠加,以获得bhj方式的执行代价。具体的:

在各辅数据表中存在所包含的数据记录数大于每个存储节点支持的数据分块的大小d的数据表的情况下,bhj方式的执行代价为(∑ni*m+j,nk*∑nl,nk*∑nl*l*wc+∑ni*m*l*rnc);

在各辅数据表中不存在所包含的数据记录数大于每个存储节点支持的数据分块的大小d的数据表的情况下,bhj方式的执行代价为(∑ni*m+j,0,∑ni*m*l*rnc)。

若候选数据表连接方式为bkhj方式,则处理装置可以确定bkhj方式的执行步骤包括:广播分发步骤和哈希连接步骤。广播分发骤主要是将所有待连接数据表分发到不同计算节点上,这意味着,该广播分发步骤包括:本地读操作、网络读操作和本地写操作。本实施例将本地读操作、网络读操作和本地写操作作为广播步骤中的关键操作,但不限于此。哈希连接步骤主要是通过哈希算法获取所有符合连接条件的数据表组合并输出,因此可以确定哈希连接步骤包括:哈希计算和输出操作。本实施例选择输出操作作为哈希连接步骤中的关键操作,但不限于此。

处理装置在确定bkhj方式的执行步骤以及每个执行步骤中的关键操作之后,需要对每个执行步骤,从参数列表中获取该执行步骤所需的目标参数。具体的:

对bkhj方式中的广播分发步骤,处理装置可以从参数列表中获取参数n、l、rc、rnc以及wc作为广播分发步骤所需的目标参数;其中,n表示数据记录总数;l表示每条数据记录的平均长度;rc表示本地读操作的单位代价;rnc表示网络读操作的单位代价;wc表示本地写操作的单位代价;

对bkhj方式中的哈希连接步骤,处理装置可以从参数列表中获取参数nj以及n作为哈希连接步骤所需的目标参数;其中,nj表示待连接数据表中第j个数据表包含的数据记录数,j=1…n;n表示待连接数据表中数据表的个 数。

在获得广播分发步骤和哈希连接步骤所需的目标参数之后,处理装置可以根据广播分发步骤所需的目标参数和广播分发步骤中的关键操作,预估广播分发步骤中的关键操作的执行代价,并根据哈希连接步骤所需的目标参数和哈希连接步骤中的关键操作,预估哈希连接步骤中的关键操作的执行代价。具体的:

对bkhj方式中的广播分发步骤,处理装置可以根据上述参数n、l、rc、rnc以及wc,预估本地读操作的执行代价为(0,0,n*l*rc),网络读操作的执行代价为(n,0,n*l*rnc)以及本地写操作的执行代价为(0,0,n*l*wc);

对bkhj方式中的哈希连接步骤,处理装置可以根据上述参数nj以及n,预估输出操作的执行代价为(j,0,0),j=(∏nj)1/n

进一步,考虑到辅数据表包含的数据记录数可能大于每个存储节点支持的数据分块的大小d,对于这种情况,需要将数据记录从内存写入外存,即退化为嵌套循环连接(nestedloopjoin)的情况。对于这种情况,由于数据记录从内存写入外存的代价很大,因此需要考虑这部分代价。

基于上述,在将输出操作的执行代价(j,0,0)作为哈希连接步骤的执行代价之前,处理装置需要判断各待连接数据表中是否存在所包含的数据记录数大于每个存储节点支持的数据分块的大小d的数据表;若判断结果为是,则对输出操作的执行代价(j,0,0)进行修正,以获得修正后的执行代价(j,nk*∑nl,nk*∑nl*l*wc)作为哈希连接步骤的执行代价;其中,nl表示第l个所包含的数据记录数大于每个存储节点支持的数据分块的大小d的数据表,l=1…n且l≠k。

在获得广播分发步骤中的关键操作的执行代价和哈希连接步骤中的关键操作的执行代价之后,处理装置可以根据广播分发步骤中的关键操作的执行代价获得广播分发步骤的执行代价,并根据哈希连接步骤中的关键操作的执行代价获得哈希连接步骤的执行代价。具体的:

对bkhj方式中的广播分发步骤,处理装置可以将本地读操作的执行代 价(0,0,n*l*rc)、网络读操作的执行代价(n,0,n*l*rnc)以及本地写操作的执行代价(0,0,n*l*wc)进行叠加,以获得执行代价(n,0,n*l*(rc+rnc+wc))作为广播分发步骤的执行代价;

对bkhj方式中的哈希连接步骤,若各辅数据表中存在所包含的数据记录数大于每个存储节点支持的数据分块的大小d的数据表,则处理装置可以将修正后的执行代价(j,nk*∑nl,nk*∑nl*l*wc)作为哈希连接步骤的执行代价;若各辅数据表中不存在所包含的数据记录数大于每个存储节点支持的数据分块的大小d的数据表,则处理装置可以将输出操作的执行代价(j,0,0)作为哈希连接步骤的执行代价。

在获得广播分发步骤的执行代价以及哈希连接步骤的执行代价之后,处理装置可以将两个执行步骤的执行代价进行叠加,以获得bkhj方式的执行代价。具体的:

在各辅数据表中存在所包含的数据记录数大于每个存储节点支持的数据分块的大小d的数据表的情况下,bkhj方式的执行代价为(n+j,nk*∑nl,nk*∑nl*l*wc+n*l*(rc+rnc+wc));

在各辅数据表中不存在所包含的数据记录数大于每个存储节点支持的数据分块的大小d的数据表的情况下,bkhj方式的执行代价为(n+j,0,n*l*(rc+rnc+wc))。

在预估出各候选数据表连接方式对待连接数据表进行连接计算时的执行代价(简称为各候选数据表连接方式的执行代价)后,处理装置可以根据预估的各候选数据表连接方式对待连接数据表进行连接计算时的执行代价,选择用于对待连接数据表进行连接计算的目标数据表连接方式。

具体的,处理装置可以将预估出的各候选数据表连接方式对待连接数据表进行连接计算时的执行代价进行比较,选择最小执行代价对应的候选数据表连接方式作为目标数据表连接方式,或者选择最优执行代价对应的候选数据表连接方式作为目标数据表连接方式。

在上述选择目标数据表连接方式的过程中,需要对执行代价进行比较。 在上述三元组(数据记录数消耗、cpu消耗、io消耗)表示执行代价的情况下,可以预先设定三元组之间的优先级,以便于进行比较。例如,可以设定数据记录数消耗的优先级高于cpu消耗的优先级,cpu消耗的优先级高于io消耗的优先级,基于此,在对各候选数据表连接方式的执行代价进行比较时,可以优先比较数据记录数消耗,选择数据记录数消耗最小的候选数据表连接方式作为目标数据表连接方式;若数据记录数消耗均相同,可以比较cpu消耗,选择cpu消耗最小的候选数据表连接方式作为目标数据表连接方式;若cpu消耗均相同,可以比较io消耗,选择io消耗最小的候选数据表连接方式作为目标数据表连接方式。

除了按照三元组之间的优先级对各候选数据表连接方式的执行代价进行比较之外,还可以设置三元组的权重,分别记为w1,w2和w3,然后根据公式平均代价=数据记录数消耗*w1+cpu消耗*w2+io消耗*w3,计算出各候选数据表连接方式的平均代价,选择平均代价最小的候选数据表连接方式作为目标数据表连接方式。

然后,基于选择的目标数据表连接方式对待连接数据表进行连接计算。由于所选择的数据表连接方式与分布式数据仓库环境相适合,所以在基于所选择的数据表连接方式进行数据表之间的连接计算时,可以节约分布式数据仓库的资源,提高查询效率。

下面结合具体数据表连接场景以及具体参数,详细说明一下各候选数据表连接方式的执行代价。

假设需要将用户表和订单表进行连接计算,用户表记为r,订单表记为s,r包含的数据记录为10m,s包含的数据记录为10m,根据分布式数据仓库环境,设置以下参数:

n1=10m;

n2=10m;

n=20m;

l=100byte;

d=256mb;

g=1gb;

m=input/256mb;

p=input/1gb;

rc=1;

wc=2;

rnc=10;

wnc=10;

上述g表示单个计算节点支持的数据记录数。

对psj方式:

将相应参数代入执行代价(n,n,n*l*(rc+rnc+wc)),可以得出重分布步骤的执行代价是(20m,20m,26gb);

将相应参数代入执行代价(j,0,0),可以得出有序连接步骤的执行代价是(20m,0,0b);

进而得出:psj方式的执行代价是(40m,20m,26gb)。

对bhj方式,计算出m=n2*l/256mb=4;

将相应参数代入执行代价(∑ni*m,0,∑ni*m*l*rnc),可以得出广播步骤的执行代价是(40m,0,4gb);

将相应参数代入执行代价(j,nk*∑nl,nk*∑nl*l*wc),可以得出哈希连接步骤的执行代价是(10m,10m*10m,10m*10m*100*2);

进而得出:bhj方式的执行代价是(50m,inf,inf)。

对bkhj方式,计算出p=n*l/1g=8;

将相应参数代入执行代价(n,0,n*l*(rc+rnc+wc)),可以得出广播分发步骤的执行代价是(20m,0,26gb);

将相应参数代入执行代价(j,nk*∑nl,nk*∑nl*l*wc),可以得出哈希连接步骤的执行代价是(20m,10m*10m,10m*10m*100*2);

进而得出:bkhj方式的执行代价是(40m,100m,26gb)。

若基于预先设定的数据记录数消耗的优先级高于cpu消耗的优先级,cpu消耗的优先级高于io消耗的优先级,则通过比较可见,psj方式的执行代价更低,因此可以选择psj方式。

如果s包含的数据记录为1k,则

对psj方式,可以得出:

重分布步骤的执行代价是(10m,10m,13gb);

有序连接步骤的执行代价是(100k,0,0b);

psj方式的执行代价是(10m,10m,13gb)。

对bhj方式,计算出m=n2*l/256mb=4,基于此,可得出:

广播步骤的执行代价是(4k,0,400k);

哈希连接步骤的执行代价是(100k,0,0);

bhj方式的执行代价是(104k,0,400k)。

对bkhj方式,计算出p=n*l/1g=4,基于此,可得出:

广播分发步骤的执行代价是(10m,0,13gb);

哈希连接步骤的执行代价是(100k,0,0b);

bkhj方式的执行代价是(10m,0,13gb)。

若基于预先设定的数据记录数消耗的优先级高于cpu消耗的优先级,cpu消耗的优先级高于io消耗的优先级,则通过比较可见,bhj方式的执行代价更低,因此可以选择bhj方式,而bkhj方式的执行代价也低于psj方式。

需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属 于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

图5为本申请又一实施例提供的数据表连接方式处理装置的结构示意图。如图5所示,该装置包括:设置模块51、预估模块52和选择模块53。

设置模块51,用于根据待连接数据表所在的分布式数据仓库环境,设置用于代价估计的参数列表。

预估模块52,用于根据设置模块51设置的参数列表中的参数和各候选数据表连接方式的执行逻辑,预估各候选数据表连接方式对待连接数据表进行连接计算时的执行代价。

选择模块53,用于根据预估模块52预估的各候选数据表连接方式对待连接数据表进行连接计算时的执行代价,选择用于对待连接数据表进行连接计算的目标数据表连接方式。

在一可选实施方式中,设置模块51具体用于:

设置待连接数据表中各数据表包含的数据记录数、数据记录总数以及每条数据记录的平均长度;

根据分布式数据仓库的文件系统,设置每个存储节点支持的数据分块的大小;

根据分布式数据仓库的硬件信息,设置连接计算所需的各种操作的单位代价以及每个计算节点所能处理的数据记录数。

进一步,设置模块51在根据分布式数据仓库的硬件信息,设置连接计算所需的各种操作的单位代价时,具体用于:

根据分布式数据仓库使用的存储介质,确定本地读操作的单位代价和本地写操作的单位代价;

根据分布式数据仓库的网络拓扑结构,确定网络读操作的单位代价和网络写操作的单位代价。

在一可选实施方式中,如图6所示,该预估模块52的一种实现结构包 括:确定子模块521、预估子模块522和获取子模块523。

确定子模块521,用于对每个候选数据表连接方式,确定候选数据表连接方式的执行步骤以及每个执行步骤中的关键操作。

预估子模块522,用于根据参数列表中的参数和每个执行步骤中的关键操作,预估每个执行步骤的执行代价。

获取子模块523,用于根据每个执行步骤的执行代价,获得候选数据表连接方式的执行代价。

进一步,如图6所示,预估子模块522的一种实现结构包括:参数获取单元5221、代价预估单元5222和代价获取单元5223。

参数获取单元5221,用于对于每个执行步骤,从参数列表中获取执行步骤所需的目标参数。

代价预估单元5222,用于根据执行步骤所需的目标参数和执行步骤中的关键操作,预估执行步骤中的关键操作的执行代价。

代价获取单元5223,用于根据执行步骤中的关键操作的执行代价,获得执行步骤的执行代价。

在一可选实施方式中,若候选数据表连接方式为分区有序连接partitionedsortjoin方式,则分区有序连接方式的执行步骤包括:重分布步骤和有序连接步骤;重分布步骤中的关键操作包括:本地读操作、网络读操作、本地排序操作和本地写操作;有序连接步骤中的关键操作包括:输出操作;

若候选数据表连接方式为广播哈希连接broadcastedhashjoin方式,广播哈希连接方式的执行步骤包括:广播步骤和哈希连接步骤;广播步骤中的关键操作包括:网络读操作;哈希连接步骤中的关键操作包括:输出操作;

若候选数据表连接方式为分区哈希连接blockedhashjoin方式,分区哈希连接方式的执行步骤包括:广播分发步骤和哈希连接步骤;广播分发步 骤中的关键操作包括:本地读操作、网络读操作和本地写操作;哈希连接步骤中的关键操作包括:输出操作。

进一步可选的,上述执行代价由三元组(数据记录数消耗、cpu消耗、io消耗)表示。

基于上述,参数获取单元5221具体用于:

对重分布步骤,从参数列表中获取参数n、l、rc、rnc以及wc作为重分布步骤所需的目标参数;

对广播步骤,从参数列表中获取参数ni、nk、d、l以及rnc作为广播步骤所需的目标参数;

对广播分发步骤,从参数列表中获取参数n、l、rc、rnc以及wc作为广播分发步骤所需的目标参数;

对有序连接步骤或哈希连接步骤,从参数列表中获取nj以及n作为有序连接步骤或哈希连接步骤所需的目标参数;

n表示数据记录总数;

l表示每条数据记录的平均长度;

rc表示本地读操作的单位代价;

rnc表示网络读操作的单位代价;

wc表示本地写操作的单位代价;

nk表示待连接数据表中主数据表包含的数据记录数,k为1…n中的任一取值;

ni表示待连接数据表中第i个辅数据表包含的数据记录数,i=1…n且i≠k;

d表示每个存储节点支持的数据分块的大小;

nj表示待连接数据表中第j个数据表包含的数据记录数,j=1…n;

n表示待连接数据表中数据表的个数。

进一步,代价预估单元5222具体用于:

对重分布步骤,根据参数n、l、rc、rnc以及wc,预估本地读操作的执行代价为(0,0,n*l*rc),网络读操作的执行代价为(n,0,n*l*rnc),本 地排序操作的执行代价为(0,n,0)以及本地写操作的执行代价为(0,0,n*l*wc);

对广播步骤,根据参数ni、nk、d、l以及rnc,预估网络读操作的执行代价为(∑ni*m,0,∑ni*m*l*rnc);其中,m=nk/d;

对广播分发步骤,根据参数n、l、rc、rnc以及wc,预估本地读操作的执行代价为(0,0,n*l*rc),网络读操作的执行代价为(n,0,n*l*rnc)以及本地写操作的执行代价为(0,0,n*l*wc);

对有序连接步骤或哈希连接步骤,根据参数nj以及n,预估输出操作的执行代价为(j,0,0),j=(∏nj)1/n

进一步,代价获取单元5223具体用于:

对重分布步骤,将本地读操作的执行代价(0,0,n*l*rc)、网络读操作的执行代价(n,0,n*l*rnc)、本地排序操作的执行代价(0,n,0)以及本地写操作的执行代价(0,0,n*l*wc)进行叠加,以获得执行代价(n,n,n*l*(rc+rnc+wc))作为重分布步骤的执行代价;

对广播步骤,将网络读操作的执行代价(∑ni*m,0,∑ni*m*l*rnc)作为广播步骤的执行代价;

对广播分发步骤,将本地读操作的执行代价(0,0,n*l*rc)、网络读操作的执行代价(n,0,n*l*rnc)以及本地写操作的执行代价(0,0,n*l*wc)进行叠加,以获得执行代价(n,0,n*l*(rc+rnc+wc))作为广播分发步骤的执行代价;

对有序连接步骤或哈希连接步骤,将输出操作的执行代价(j,0,0)作为有序连接步骤或哈希连接步骤的执行代价。

更进一步,代价获取单元5223还用于:在将本地读操作的执行代价(0,0,n*l*rc)、网络读操作的执行代价(n,0,n*l*rnc)、本地排序操作的执行代价(0,n,0)以及本地写操作的执行代价(0,0,n*l*wc)进行叠加,以获得执行代价(n,n,n*l*(rc+rnc+wc))作为重分布步骤的执行代价之前,判断待 连接数据表包含的数据记录是否发生分布倾斜;若判断结果为是,则将网络读操作的执行代价(n,0,n*l*rnc)修正为(n,0,p*n*l*p*rnc),将本地写操作的执行代价(0,0,n*l*wc)修正为(0,0,p*n*l*p*wc);

其中,p表示分布倾斜率;

p表示用于对待连接数据表进行连接处理的计算节点的个数。

更进一步,代价获取单元5223还用于:对述哈希连接步骤,将输出操作的执行代价(j,0,0)作为有序连接步骤或哈希连接步骤的执行代价之前,判断各辅数据表中是否存在所包含的数据记录数大于每个存储节点支持的数据分块的大小d的数据表;若判断结果为是,则对输出操作的执行代价(j,0,0)进行修正,以获得修正后的执行代价(j,nk*∑nl,nk*∑nl*l*wc)作为哈希连接步骤的执行代价;

nl表示第l个所包含的数据记录数大于每个存储节点支持的数据分块的大小d的数据表,l=1…n且l≠k。

更进一步,如图6所示,该装置还包括:连接计算模块54。

连接计算模块54,用于采用选择模块53选出的目标数据表连接方式,对待连接数据表进行连接计算。

本实施例提供的数据表连接方式处理装置,根据待连接数据表所在的分布式数据仓库环境,设置用于代价估计的参数列表,根据参数列表中的参数和各候选数据表连接方式的执行逻辑,预估各候选数据表连接方式对待连接数据表进行连接计算时的执行代价,根据预估的各候选数据表连接方式对待连接数据表进行连接计算时的执行代价,选择用于对待连接数据表进行连接计算的目标数据表连接方式,从而选择与分布式数据仓库环境相适合的数据表连接方式,进而在基于所选择的数据表连接方式进行数据表之间的连接计算时,可以节约分布式数据仓库的资源,提高查询效率。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。

上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请各个实施例所述方法的部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1