CN112256705B - 一种Gaia***中的多表连接优化方法 - Google Patents
一种Gaia***中的多表连接优化方法 Download PDFInfo
- Publication number
- CN112256705B CN112256705B CN202011267934.3A CN202011267934A CN112256705B CN 112256705 B CN112256705 B CN 112256705B CN 202011267934 A CN202011267934 A CN 202011267934A CN 112256705 B CN112256705 B CN 112256705B
- Authority
- CN
- China
- Prior art keywords
- connection
- cost
- tables
- source table
- index
- 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
- 238000000034 method Methods 0.000 title claims abstract description 52
- 238000005457 optimization Methods 0.000 title claims abstract description 28
- PFFIDZXUXFLSSR-UHFFFAOYSA-N 1-methyl-N-[2-(4-methylpentan-2-yl)-3-thienyl]-3-(trifluoromethyl)pyrazole-4-carboxamide Chemical compound S1C=CC(NC(=O)C=2C(=NN(C)C=2)C(F)(F)F)=C1C(C)CC(C)C PFFIDZXUXFLSSR-UHFFFAOYSA-N 0.000 title claims abstract description 25
- 238000004364 calculation method Methods 0.000 claims abstract description 23
- 230000005540 biological transmission Effects 0.000 claims abstract description 11
- 238000005192 partition Methods 0.000 claims description 12
- 230000008569 process Effects 0.000 claims description 12
- 230000006870 function Effects 0.000 claims description 6
- 238000012545 processing Methods 0.000 claims description 6
- 238000010586 diagram Methods 0.000 description 5
- 238000002922 simulated annealing Methods 0.000 description 5
- 238000013138 pruning Methods 0.000 description 3
- 230000002068 genetic effect Effects 0.000 description 2
- 230000035772 mutation Effects 0.000 description 2
- 241001522296 Erithacus rubecula Species 0.000 description 1
- 125000002015 acyclic group Chemical group 0.000 description 1
- 238000002921 genetic algorithm search Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种Gaia***中的多表连接优化方法,为了尽可能减少全局中间连接表体积进而降低I/O代价,本发明设计了一个连接索引结构,结合动态规划算法在优化连接顺序的同时对每个连接表的等值连接关系进行优化,同时针对连接计算代价和I/O代价进行了优化,有效地减少了多连接任务的运算时间和中间数据的传输量;也就是说,本发明设计了一种描述连接表中列关系的索引结构,此索引结构可以快速找到两个表的连接关系及每一列是否冗余列。
Description
技术领域
本发明属于分布式大数据处理技术领域,尤其涉及一种Gaia***中的多表连接优化方法。
背景技术
多连接优化的研究起源于传统数据库中多表查询操作的优化,传统的数据库查询操作分为三个步骤:将用户的查询语句解析和翻译为连接树,优化,执行查询。优化步骤中包括通过重构连接表达式在连接结果等价的条件下减小连接代价,当连接树存在n个连接关系时,则存在n!个等价的左深树和(2n-2)!/(n-1)!个等价的稠密树,多连接优化问题已经被多类算法研究过。它是经典组合旅行商问题的推广——在完全图中寻找最短哈密顿图。旅行商问题研究最多的组合优化问题之一,已有几十种算法被提出,这些算法大多直接适用于多连接优化。主要包括确定性算法,随机化算法,基因算法和混合算法。
确定性算法通过完全遍历或在解空间中应用一些启发式剪枝方法,来执行解空间的确定性搜索,如IBM的System R中使用的动态规划算法,这个算法被几乎现有的所有商用RDBMS***使用,该算法通过动态剪枝解空间来进行完全遍历,通过迭代已有的连接关系并尽可能剪枝一些次优解来构造所有备选连接树,从而保证了动态规划算法在解空间中找到最优解。随机化算法通过预定义的变换规则在解空间内随即移动,不断寻找代价更低的点,当点不再移动的次数达到预定义的迭代次数阈值时,则认为当前的解为较优的解。如模拟退火算法(Simulated Annealing Algorithm),它允许当前点向代价更高的点移动,从而降低了算法陷入局部最优解的概率,此算法同时可以加入一个算法参数来定义在给定时间点继续搜索的可能性,并和当前点与目标点的代价比例共同决定点移动的概率。
基因算法通过模拟生物的进化过程来寻找最优解,通过将一个初始群体(解集合)中的个体(解)随机交叉(crossover)和变异(mutation)产生下一代群体,将适应度最高(通过代价函数定义)的部分个体保留,并重复交叉和变异的过程产生下一代群体,当迭代次数达到预定义的阈值或者群体适应度已接近饱和,继续进化无法再显著提高适应度(通过阈值定义)时停止迭代过程。如PostgreSQL中的Genetic Query Optimizer,它只考虑了左深树的情况,实现了精英选择算子(Elitist selection operato),对于群体中的最优解,只进行交叉而不进行变异,防止群体中的最优个体在迭代到下一代时发生丢失,从而导致算法难以收敛到全局最优解。
混合算法混合了以上两种及以上的优化策略,比如巡回模拟退火算法(TouredSimulated Annealing),该算法首先通过确定性算法确定几个初始点,然后对每个初始点进行模拟退火算法。
以上算法为主要基于传统关系数据库理论的多连接优化,优化的最小粒度为表,而在本文所提出的多表连接优化方法中优化的最小粒度为列,在传统数据库甚至一些节点数不高的分布式数据库中,连接表的列数,或者说连接表的体积对I/O并不会造成显著影响,而连接表的行数,即连接表的元组数会对计算量产生很大影响,因此这些传统的多连接优化算法主要注重于对连接元组数进行优化以提高计算效率。随着MapReduce框架在大数据处理中的广泛应用,一个任务的计算节点可能达到成百上千个,那么节点间I/O带来的影响不再可以忽视。
发明内容
为解决上述问题,本发明提供一种Gaia***中的多表连接优化方法,可以在优化算法中同时考虑计算和I/O的代价,并以动态规划算法为例,在动态规划算法的基础上同时实现对计算和I/O的优化。
一种Gaia***中的多表连接优化方法,包括以下步骤:
S1:获取原连接树的属性信息,其中,所述属性信息包括原连接树包含的源表的数量以及中间表的数量、每个源表中各列的属性码、每个中间表中各列的属性码、原连接树的健值、原连接树的输出表、输出表各列的属性码,其中,健值为用户指定的属性码,则两个源表之间、源表与中间表之间按照健值进行等值连接,且不同源表之间、不同源表与中间表之间采用的健值不完全相同,并将源表的数量记为M,中间表的数量记为N,且N=M-2;
S2:根据原连接树的属性信息为每个健值构建索引条目,其中,每个索引条目至少包括两个索引位,第一个索引位用于存储健值,其余索引位用于存储列号,且每个索引条目存储的列号的确定方法为:分别将各健值作为当前健值执行以下步骤:
S21:确定包含当前健值的源表;
S22:从步骤S21确定的各源表中获取当前健值所在列的列号,并将得到的列号作为存储的列号;
S3:对各源表进行编号,并根据各源表编号构建编号列表,其中,编号列表包括M列,每一列存储一个源表的编号;
S4:分别将各索引条目作为当前索引条目执行有向连接操作,建立编号列表与各索引条目之间的有向连接,得到有向索引图,所述有向连接操作为:
将当前索引条目中用于存储列号的各索引位分别作为当前索引位执行以下步骤:
确定当前索引位存储的列号对应的源表,并将其记为当前源表;
判断当前源表是否已与其他索引条目建立有向连接关系,若为否,则建立从当前源表编号的所在列到当前索引位的直接有向连接;若为是,则建立从当前源表编号的所在列到当前索引位的间接有向连接,其中,间接有向连接的建立方法为:
获取已与当前源表建立有向连接关系的所有索引位,并将所有索引位均记为中间索引位,其中,有向连接关系包括直接有向连接和间接有向连接;
在各中间索引位中获取最后与当前源表建立有向连接关系的索引位,并将该索引位作为末尾索引位;
建立从末尾索引位到当前索引位的有向连接,实现从当前源表编号的所在列到当前索引位的间接有向连接;
S5:基于有向索引图,采用动态规划法得到各源表的连接关系表达式,根据连接关系表达式重新构建连接树,完成多表连接的优化。
进一步地,所述采用动态规划法得到各源表的连接关系表达式具体包括以下步骤:
S51:分别将各源表作为当前源表执行以下步骤,得到各源表对应的一阶配对表、与一阶配对表进行等值连接而生成的一阶中间表:
从有向索引图中获取与当前源表享有相同健值的所有源表,并将其记为一阶备选源表;
分别获取当前源表与各一阶备选源表的等值连接代价,将最小等值连接代价对应的一阶备选源表作为与当前源表进行等值连接的一阶配对表;
将当前源表与一阶配对表进行等值连接,得到一阶中间表,并将该配对关系记为一阶表达式;
S52:分别将各源表作为当前源表执行连接更新操作,以得到各源表对应的等值连接代价最小的连接方式,其中,所述连接更新操作具体为:
在除当前源表以外的其他源表于步骤S51得到的一阶中间表中,获取与当前源表享有相同健值的所有一阶中间表,并将其记为一阶备选中间表;
在除当前源表和一阶配对表以外的其他源表中,获取与当前源表在步骤S51得到的一阶中间表享有相同健值的所有源表,并将其记为二阶备选源表;
分别获取当前源表与各一阶备选中间表的等值连接代价、当前源表在步骤S51得到的一阶中间表与各二阶备选源表的等值连接代价,将最小等值连接代价对应的一阶备选中间表或二阶备选源表作为与当前源表进行等值连接的二阶配对表,并将该配对关系记为二阶表达式;
S53:以此类推,分别将各源表作为当前源表,在其他源表于上一次连接更新操作得到的中间表中找出与当前源表享有相同健值的中间表,然后获取找出的中间表与当前源表的等值连接代价;同时,在除当前源表和已与当前源表建立等值连接关系的源表以外的其他源表中,找出与当前源表在上一次连接更新操作得到的中间表享有相同健值的源表,然后获取找出的源表与当前源表于上一次连接更新操作得到的中间表的等值连接代价;最后获取本步骤得到的最小值等值连接代价对应的表达式,直到获取各源表的连接关系表达式。
进一步地,将需要计算等值连接代价的两个表中行数较少的记为I0,另一个记为I1;所述等值连接代价的代价函数Cost的计算公式为:
Cost=w0×Costship+w1×Costcpu+w2×CostIO
其中,w0为I0和I1在Gaia***中的当前节点完成等值连接后,将等值连接结果传输给下一个节点时的I/O代价权重,Costship为I0和I1在Gaia***中的当前节点完成等值连接后,将等值连接结果传输给下一个节点时的I/O代价,w1为CPU对I0和I1进行等值连接时的计算代价权重,Costcpu为CPU对I0和I1进行等值连接时的计算代价,w2为I0和I1在Gaia***中的当前节点完成等值连接后,将等值连接过程传输给本地文件***时的I/O代价权重,CostIO为I0和I1在Gaia***中的当前节点完成等值连接后,将等值连接过程传输给本地文件***时的I/O代价。
进一步地,所述代价函数中的Costship的计算公式如下:
Costship=CostRR×fship+CostBF×(1-fship)
其中,CostRR为采用Repartition-Repartition策略进行传输时的传输代价,CostBF为采用Broadcast-Forward策略进行传输时的传输代价,fship为设定的第一选择因子;
且有:
CostRR=S(PartitionShip(I0))+S(PartitionShip(I1))
CostBF=(n-1)×S(I0),T(I0)<T(I1)
其中,PartitionShip(I0)表示将I0通过分区函数发送到下一个节点的内容,PartitionShip(I1)表示将I1通过分区函数发送到下一个节点的内容,S(PartitionShip(I0))表示I0通过分区函数发送到下一个节点的内容的体积,S(PartitionShip(I1))表示I1通过分区函数发送到下一个节点的内容的体积,S(I0)表示表I0的总体积,T(I0)表示表I0的行数,T(I1)表示表I1的行数,n表示分布式节点的数量;
表I0和I1的体积的计算公式为:
其中,x=0和1,S(Ix)为总体积,T(Ix)为表的行数,ci为表的第i列,dataType of表示获取第i列的数据类型,columns为表I0和I1设定的需要保留的列数,sizeof表示获取第i列的数据类型占用的体积;
所述代价函数中的Costcpu计算公式为:
其中,fjoin为设定的第二选择因子,且有:
其中,为采用Hybrid-Hash策略进行连接时的CPU计算代价,为采用Sort-Merge策略进行连接时的CPU计算代价,lb(T(I0)为T(I0)以2为底的对数,lb(T(I1)为T(I1)以2为底的对数;
所述代价函数中的Costcpu计算公式为:
其中,M为节点的内存大小。
进一步地,在判断任意两个表是否可等值连接时,根据有向索引图对两个表对应的索引条目进行溯源,若两个表对应的索引条目相同,则两个表享有相同的健值;同时,若两个表可等值连接,则在两个表对应的索引条目中,将两个表对应的索引位进行标记;
若两个表需要进行等值连接代价的计算,则两个表要保留的列数columns的确定方法如下:
分别判断I0和I1各列的属性码是否为原连接树中设定的输出表中各列的属性码,若是,则该列保留;
分别判断I0和I1在进行等值连接时,两者对应的索引条目中的索引位是否全都被标记,若所有索引位均被标记,则删除两个表中与该索引条目对应的列。
有益效果:
1、本发明提供一种Gaia***中的多表连接优化方法,为了尽可能减少全局中间连接表体积进而降低I/O代价,本发明设计了一个连接索引结构,结合动态规划算法在优化连接顺序的同时对每个连接表的等值连接关系进行优化,同时针对连接计算代价和I/O代价进行了优化,有效地减少了多连接任务的运算时间和中间数据的传输量;也就是说,本发明设计了一种描述连接表中列关系的索引结构,此索引结构可以快速找到两个表的连接关系及每一列是否冗余列。
2、本发明基于描述连接表中列关系的有向索引图,结合动态规划算法在优化连接顺序的同时删除每次连接的冗余列,能够尽可能地减少所有中间连接表的体积。
附图说明
图1为Gaia***中对多表连接任务的传统处理流程图;
图2为本发明Gaia***中对多表连接任务的处理流程图;
图3为待优化的原连接树的示意图;
图4为本发明的有向索引图示意图;
图5为本发明优化后的连接树的示意图;
图6为本发明基于动态规划法获取连接树的连接关系表达式的示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。
为了***地解决以上两个问题,本发明提供了一种Gaia***中的多表连接优化技术,能够同时考虑多表连接顺序和冗余列造成计算资源和传输资源消耗,在较短的时间内生成全局最优的连接策略。
本优化方法整体分为三个步骤:寻找多表连接关系并生成连接关系索引结构、计算并生成新的多表连接树、根据新的多表连接树重构***中的DAG(有向无环)图,Gaia***中对多表连接任务的传统处理流程如图1所示,经过本发明优化后的处理流程如图2所示。
一种Gaia***中的多表连接优化方法,其特征在于,包括以下步骤:
S1:获取原连接树的属性信息,其中,所述属性信息包括原连接树包含的源表的数量以及中间表的数量、每个源表中各列的属性码、每个中间表中各列的属性码、原连接树的健值、原连接树的输出表、输出表各列的属性码,其中,健值为用户指定的属性码,则两个源表之间、源表与中间表之间按照健值进行等值连接,且不同源表之间、不同源表与中间表之间采用的健值不完全相同,并将源表的数量记为M,中间表的数量记为N,且N=M-2。
如图3所示,为原连接树的示意图,原连接树包括8个源表,分别为Source0~Source7,6个中间表,分别为Join0~Join5,一个输出表Result。a~j表示属性码,例如,源表Source0包括三列,各列的属性码分别为a、b、c;同时,原连接树的健值分别为属性码a、b、d、g、i,源表Source0和源表Source1按照健值a进行等值连接,中间表Join0与源表Source2按照健值b进行等值连接。
再比如,Join4与Source6通过属性码g为健值key进行连接,那么需要得知哪些源表包含了属性码g,这些源表均有以属性码g为key的连接关系;对于Join4中的属性码g进行溯源,Join4为中间表且属性码g为key,则属性码g的来源包括Source6和Join3,递归地对Join3表溯源,找到Source4和Source5,则以属性码g为key具有连接关系地Source表集合为{4,5,6};由此可见,此步骤目的为:对于原连接树中指定一个表的一个属性码,能够找到以此属性码为key具有连接关系的所有Source表的集合。
S2:根据原连接树的属性信息为每个健值构建索引条目,其中,每个索引条目至少包括两个索引位,第一个索引位用于存储健值,其余索引位用于存储列号,且每个索引条目存储的列号的确定方法为:分别将各健值作为当前健值执行以下步骤:
S21:确定包含当前健值的源表;
S22:从步骤S21确定的各源表中获取当前健值所在列的列号,并将得到的列号作为存储的列号;
S3:对各源表进行编号,并根据各源表编号构建编号列表,其中,编号列表包括M列,每一列存储一个源表的编号;
例如,如图4所示,其中的[a,0,0]、[b,1,0,0]、[d,1,0]、[g,1,1,0]、[i,1,0]即为索引条目,左边的0~7列表即为编号列表。
S4:分别将各索引条目作为当前索引条目执行有向连接操作,建立编号列表与各索引条目之间的有向连接,得到有向索引图,所述有向连接操作为:
将当前索引条目中用于存储列号的各索引位分别作为当前索引位执行以下步骤:
确定当前索引位存储的列号对应的源表,并将其记为当前源表;
判断当前源表是否已与其他索引条目建立有向连接关系,若为否,则建立从当前源表编号的所在列到当前索引位的直接有向连接,例如,如图4所示,源表Source0到索引条目[a,0,0]的第二个索引位的箭头,表示源表Source0所在列到索引位0的直接有向连接;若为是,则建立从当前源表编号的所在列到当前索引位的间接有向连接,其中,间接有向连接的建立方法为:
获取已与当前源表建立有向连接关系的所有索引位,并将所有索引位均记为中间索引位,其中,有向连接关系包括直接有向连接和间接有向连接;
在各中间索引位中获取最后与当前源表建立有向连接关系的索引位,并将该索引位作为末尾索引位;
建立从末尾索引位到当前索引位的有向连接,实现从当前源表编号的所在列到当前索引位的间接有向连接;
例如,以索引条目[g,1,1,0]的第二个索引位作为当前索引位,当前索引位存储的列号为1,其对应的源表为Source4,然而Source4之前已经和索引条目[d,1,0]的第三个索引位建立了直接有向连接,则索引条目[d,1,0]的第三个索引位记为所述末尾索引位,也即建立从末尾索引位到当前索引位的直接有向连接,实现从Source4的所在列到索引条目[g,1,1,0]的第二个索引位的间接有向连接。
需要说明的是,此步骤目的为:对于连接过程中的列,在每次连接的投影关系策略中,需要保留可能会在之后的连接中作为健值key的列和包含在输出表Result中的列,为此需要建立一个十字链表形式的索引结构,由Source表索引,Key节点索引和连接信息节点构成,每个连接信息节点中记录所有能够作为同一连接key的列,通过这个索引可以快速的确认当一次连接完成后哪些列在投影操作中可以被删除,减小对I/O的影响。
如图4所示,左侧0-7的纵表为Source表索引,对于一个索引条目,第一个索引位表示此健值在整体连接树中的属性码。同时,Source1指向索引条目[a,0,0]的第三个索引位,第三个索引位存储的列号为0,则表示此健值a在Source1中的位置为第0列。在对Join2表中的健值d进行溯源后,Source4指向索引条目[d,1,0]的第三个索引位,第三个索引位存储的列号为0,则表示此健值d在Source4中的位置为第0列。
通过此方法,最终得到如图6所示连接树的索引结构。同样,对于最终结果Result表的所有列采取类似的算法得到关于投影到Result表上所有列与Source表的关系索引。
S5:基于有向索引图,采用动态规划法得到各源表的连接关系表达式,根据连接关系表达式重新构建连接树,完成多表连接的优化,如图5所示,为采用本发明方法重新构建的优化后的连接树示意图。
需要说明的是,所述采用动态规划法得到各源表的连接关系表达式具体包括以下步骤:
S51:分别将各源表作为当前源表执行以下步骤,得到各源表对应的一阶配对表、与一阶配对表进行等值连接而生成的一阶中间表:
从有向索引图中获取与当前源表享有相同健值的所有源表,并将其记为一阶备选源表;
分别获取当前源表与各一阶备选源表的等值连接代价,将最小等值连接代价对应的一阶备选源表作为与当前源表进行等值连接的一阶配对表;
将当前源表与一阶配对表进行等值连接,得到一阶中间表,并将该配对关系记为一阶表达式;
S52:分别将各源表作为当前源表执行连接更新操作,以得到各源表对应的等值连接代价最小的连接方式,其中,所述连接更新操作具体为:
在除当前源表以外的其他源表于步骤S51得到的一阶中间表中,获取与当前源表享有相同健值的所有一阶中间表,并将其记为一阶备选中间表;
在除当前源表和一阶配对表以外的其他源表中,获取与当前源表在步骤S51得到的一阶中间表享有相同健值的所有源表,并将其记为二阶备选源表;
分别获取当前源表与各一阶备选中间表的等值连接代价、当前源表在步骤S51得到的一阶中间表与各二阶备选源表的等值连接代价,将最小等值连接代价对应的一阶备选中间表或二阶备选源表作为与当前源表进行等值连接的二阶配对表,并将该配对关系记为二阶表达式;
S53:以此类推,分别将各源表作为当前源表,在其他源表于上一次连接更新操作得到的中间表中找出与当前源表享有相同健值的中间表,然后获取找出的中间表与当前源表的等值连接代价;同时,在除当前源表和已与当前源表建立等值连接关系的源表以外的其他源表中,找出与当前源表在上一次连接更新操作得到的中间表享有相同健值的源表,然后获取找出的源表与当前源表于上一次连接更新操作得到的中间表的等值连接代价;最后获取本步骤得到的最小值等值连接代价对应的表达式,直到获取各源表的连接关系表达式。
例如,如图6所示,假设源表Source0为当前源表,从图4的有向索引图中溯源,可知源表Source0与源表Source1、Source2、Source3均享有相同的健值,则Source1、Source2、Source3为一阶备选源表,分别可以得到(0,1)、(0,2)、(0,3)的配对组合,获取三个配对组合的等值连接代价,假设组合(0,1)的等值连接代价最小,则源表Source1为当前源表Source0的一阶配对表,该配对关系的一阶表达式为对当前源表Source0执行连接更新操作,假设源表Source1、Source2、Source3与各自对应的一阶配对表形成的配对组合分别为(1,2)、(1,2)、(3,1),这三个组合进行等值连接得到的中间表也即为在除当前源表Source0以外的其他源表于步骤S51得到的一阶中间表,假设一阶中间表(1,2)、(3,1)与当前源表Source0均享有相同的健值,则(1,2)、(3,1)为所述一阶备选中间表;则当前源表Source0可以与一阶备选中间表形成新的配对组合[0,(1,2)]、[0,(3,1)];同时,在除当前源表Source0和一阶配对表Source1以外的其他源表中,也即在Source2、Source3中,获取与Source0和Source1进行等值连接时得到的中间表(0,1)健值相同的源表,假设为Source2,则得到新的配对组合[(0,1),2];对比三个组合[0,(1,2)]、[0,(3,1)]、[(0,1),2]的大小,发现组合[(0,1),2]的等值连接代价最小,则源表Source2为二阶配对表,二阶配对表达式为如若组合[0,(1,2)]的等值连接代价最小,则二阶配对表达式为
进一步地,将需要计算等值连接代价的两个表分别记为I0和I1,且等值连接代价的代价函数Cost的计算公式为:
Cost=w0×Costship+w1×Costcpu+w2×CostIO
其中,w0为I0和I1在Gaia***中的当前节点完成等值连接后,将等值连接结果传输给下一个节点时的I/O代价权重,Costship为I0和I1在Gaia***中的当前节点完成等值连接后,将等值连接结果传输给下一个节点时的I/O代价,w1为CPU对I0和I1进行等值连接时的计算代价权重,Costcpu为CPU对I0和I1进行等值连接时的计算代价,w2为I0和I1在Gaia***中的当前节点完成等值连接后,将等值连接过程传输给本地文件***时的I/O代价权重,CostIO为I0和I1在Gaia***中的当前节点完成等值连接后,将等值连接过程传输给本地文件***时的I/O代价。
所述代价函数中的Costship的计算公式如下:
Costship=CostRR×fship+CostBF×(1-fship)
其中,CostRR为采用Repartition-Repartition策略进行传输时的传输代价,CostBF为采用Broadcast-Forward策略进行传输时的传输代价,fship为设定的第一选择因子;
且有:
CostRR=S(PartitionShip(I0))+S(PartitionShip(I1))
CostBF=(n-1)×S(I0),T(I0)<T(I1)
其中,PartitionShip(I0)表示将I0通过分区函数发送到下一个节点的内容,PartitionShip(I1)表示将I1通过分区函数发送到下一个节点的内容,S(PartitionShip(I0))表示I0通过分区函数发送到下一个节点的内容的体积,S(PartitionShip(I1))表示I1通过分区函数发送到下一个节点的内容的体积,S(I0)表示表I0的总体积,T(I0)表示表I0的行数,T(I1)表示表I1的行数,n表示分布式节点的数量;
表I0和I1的体积的计算公式为:
其中,x=0和1,S(Ix)为总体积,T(Ix)为表的行数,ci为表的第i列,dataType of表示获取第i列的数据类型,columns为表I0和I1设定的需要保留的列数,sizeof表示获取第i列的数据类型占用的体积;
所述代价函数中的Costcpu计算公式为:
其中,fjoin为设定的第二选择因子,且有:
其中,为采用Hybrid-Hash策略进行连接时的CPU计算代价,为采用Sort-Merge策略进行连接时的CPU计算代价,lb(T(I0)为T(I0)以2为底的对数,lb(T(I1)为T(I1)以2为底的对数;
所述代价函数中的Costcpu计算公式为:
其中,M为节点的内存大小。
此外,在判断任意两个表是否可等值连接时,根据有向索引图对两个表对应的索引条目进行溯源,若两个表对应的索引条目相同,则两个表享有相同的健值;同时,若两个表可等值连接,则在两个表对应的索引条目中,将两个表对应的索引位进行标记;
若两个表需要进行等值连接代价的计算,则两个表要保留的列数columns的确定方法如下:
分别判断I0和I1各列的属性码是否为原连接树中设定的输出表中各列的属性码,若是,则该列保留;
分别判断I0和I1在进行等值连接时,两者对应的索引条目中的索引位是否全都被标记,若所有索引位均被标记,则删除两个表中与该索引条目对应的列。
由此可见,分布式大数据处理引擎的节点要远远多于传统分布式数据库,在MapReduce框架下各节点间I/O对网络传输造成的影响会随着中间数据量的增长而成倍放大,同时I/O对执行效率的影响也被大幅放大。而在传统的连接优化算法中,通常只考虑连接顺序优化,通过减少全局的连接计算量来减少执行时间,而并不考虑同时优化每次连接的投影或通过减少全局的投影列数来减少I/O代价,传统方法中的优化主要将表作为最小优化粒度考虑,比如通过表的行数直接估算连接代价,但若将表细分为列来考虑,则可以进而减少I/O代价。为了尽可能减少全局中间连接表体积进而降低I/O代价,本发明设计了一个连接索引结构,结合动态规划算法在优化连接顺序的同时对每个连接表的投影关系进行优化,同时针对连接计算代价和I/O代价进行了优化,有效地减少了多连接任务的运算时间和中间数据的传输量。
当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当然可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。
Claims (5)
1.一种Gaia***中的多表连接优化方法,其特征在于,包括以下步骤:
S1:获取原连接树的属性信息,其中,所述属性信息包括原连接树包含的源表的数量以及中间表的数量、每个源表中各列的属性码、每个中间表中各列的属性码、原连接树的健值、原连接树的输出表、输出表各列的属性码,其中,健值为用户指定的属性码,则两个源表之间、源表与中间表之间按照健值进行等值连接,且不同源表之间、不同源表与中间表之间采用的健值不完全相同,并将源表的数量记为M,中间表的数量记为N,且N=M-2;
S2:根据原连接树的属性信息为每个健值构建索引条目,其中,每个索引条目至少包括两个索引位,第一个索引位用于存储健值,其余索引位用于存储列号,且每个索引条目存储的列号的确定方法为:分别将各健值作为当前健值执行以下步骤:
S21:确定包含当前健值的源表;
S22:从步骤S21确定的各源表中获取当前健值所在列的列号,并将得到的列号作为存储的列号;
S3:对各源表进行编号,并根据各源表编号构建编号列表,其中,编号列表包括M列,每一列存储一个源表的编号;
S4:分别将各索引条目作为当前索引条目执行有向连接操作,建立编号列表与各索引条目之间的有向连接,得到有向索引图,所述有向连接操作为:
将当前索引条目中用于存储列号的各索引位分别作为当前索引位执行以下步骤:
确定当前索引位存储的列号对应的源表,并将其记为当前源表;
判断当前源表是否已与其他索引条目建立有向连接关系,若为否,则建立从当前源表编号的所在列到当前索引位的直接有向连接;若为是,则建立从当前源表编号的所在列到当前索引位的间接有向连接,其中,间接有向连接的建立方法为:
获取已与当前源表建立有向连接关系的所有索引位,并将所有索引位均记为中间索引位,其中,有向连接关系包括直接有向连接和间接有向连接;
在各中间索引位中获取最后与当前源表建立有向连接关系的索引位,并将该索引位作为末尾索引位;
建立从末尾索引位到当前索引位的有向连接,实现从当前源表编号的所在列到当前索引位的间接有向连接;
S5:基于有向索引图,采用动态规划法得到各源表的连接关系表达式,根据连接关系表达式重新构建连接树,完成多表连接的优化。
2.如权利要求1所述的一种Gaia***中的多表连接优化方法,其特征在于,所述采用动态规划法得到各源表的连接关系表达式具体包括以下步骤:
S51:分别将各源表作为当前源表执行以下步骤,得到各源表对应的一阶配对表、与一阶配对表进行等值连接而生成的一阶中间表:
从有向索引图中获取与当前源表享有相同健值的所有源表,并将其记为一阶备选源表;
分别获取当前源表与各一阶备选源表的等值连接代价,将最小等值连接代价对应的一阶备选源表作为与当前源表进行等值连接的一阶配对表;
将当前源表与一阶配对表进行等值连接,得到一阶中间表,并将该等值连接关系记为一阶表达式;
S52:分别将各源表作为当前源表执行连接更新操作,以得到各源表对应的等值连接代价最小的连接方式,其中,所述连接更新操作具体为:
在除当前源表以外的其他源表于步骤S51得到的一阶中间表中,获取与当前源表享有相同健值的所有一阶中间表,并将其记为一阶备选中间表;
在除当前源表和一阶配对表以外的其他源表中,获取与当前源表在步骤S51得到的一阶中间表享有相同健值的所有源表,并将其记为二阶备选源表;
分别获取当前源表与各一阶备选中间表的等值连接代价、当前源表在步骤S51得到的一阶中间表与各二阶备选源表的等值连接代价,将最小等值连接代价对应的一阶备选中间表或二阶备选源表作为与当前源表进行等值连接的二阶配对表,并将该等值连接关系记为二阶表达式;
S53:以此类推,分别将各源表作为当前源表,在其他源表于上一次连接更新操作得到的中间表中找出与当前源表享有相同健值的中间表,然后获取找出的中间表与当前源表的等值连接代价;同时,在除当前源表和已与当前源表建立等值连接关系的源表以外的其他源表中,找出与当前源表在上一次连接更新操作得到的中间表享有相同健值的源表,然后获取找出的源表与当前源表于上一次连接更新操作得到的中间表的等值连接代价;最后获取本步骤得到的最小值等值连接代价对应的表达式,直到获取各源表的连接关系表达式。
3.如权利要求2所述的一种Gaia***中的多表连接优化方法,其特征在于,将需要计算等值连接代价的两个表中行数较少的记为I0,另一个记为I1;所述等值连接代价的代价函数Cost的计算公式为:
Cost=w0×Costship+w1×Costcpu+w2×CostIO
其中,w0为I0和I1在Gaia***中的当前节点完成等值连接后,将等值连接结果传输给下一个节点时的I/O代价权重,Costship为I0和I1在Gaia***中的当前节点完成等值连接后,将等值连接结果传输给下一个节点时的I/O代价,w1为CPU对I0和I1进行等值连接时的计算代价权重,Costcpu为CPU对I0和I1进行等值连接时的计算代价,w2为I0和I1在Gaia***中的当前节点完成等值连接后,将等值连接过程传输给本地文件***时的I/O代价权重,CostIO为I0和I1在Gaia***中的当前节点完成等值连接后,将等值连接过程传输给本地文件***时的I/O代价。
4.如权利要求3所述的一种Gaia***中的多表连接优化方法,其特征在于,所述代价函数中的Costship的计算公式如下:
Costship=CostRR×fship+CostBF×(1-fship)
其中,CostRR为采用Repartition-Repartition策略进行传输时的传输代价,CostBF为采用Broadcast-Forward策略进行传输时的传输代价,fship为设定的第一选择因子;
且有:
CostRR=S(PartitionShip(I0))+S(PartitionShip(I1))
CostBF=(n-1)×S(I0),T(I0)<T(I1)
其中,PartitionShip(I0)表示将I0通过分区函数发送到下一个节点的内容,PartitionShip(I1)表示将I1通过分区函数发送到下一个节点的内容,S(PartitionShip(I0))表示I0通过分区函数发送到下一个节点的内容的体积,S(PartitionShip(I1))表示I1通过分区函数发送到下一个节点的内容的体积,S(I0)表示表I0的总体积,T(I0)表示表I0的行数,T(I1)表示表I1的行数,n表示分布式节点的数量;
表I0和I1的体积的计算公式为:
其中,x=0和1,S(Ix)为总体积,T(Ix)为表的行数,ci为表的第i列,dataType of表示获取第i列的数据类型,columns为表I0和I1设定的需要保留的列数,sizeof表示获取第i列的数据类型占用的体积;
所述代价函数中的Costcpu计算公式为:
其中,fjoin为设定的第二选择因子,且有:
其中,为采用Hybrid-Hash策略进行连接时的CPU计算代价,为采用Sort-Merge策略进行连接时的CPU计算代价,lb(T(I0)为T(I0)以2为底的对数,lb(T(I1)为T(I1)以2为底的对数;
所述代价函数中的Costcpu计算公式为:
其中,M为节点的内存大小。
5.如权利要求4所述的一种Gaia***中的多表连接优化方法,其特征在于,在判断任意两个表是否可等值连接时,根据有向索引图对两个表对应的索引条目进行溯源,若两个表对应的索引条目相同,则两个表享有相同的健值;同时,若两个表可等值连接,则在两个表对应的索引条目中,将两个表对应的索引位进行标记;
若两个表需要进行等值连接代价的计算,则两个表要保留的列数columns的确定方法如下:
分别判断I0和I1各列的属性码是否为原连接树中设定的输出表中各列的属性码,若是,则该列保留;
分别判断I0和I1在进行等值连接时,两者对应的索引条目中的索引位是否全都被标记,若所有索引位均被标记,则删除两个表中与该索引条目对应的列。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011267934.3A CN112256705B (zh) | 2020-11-13 | 2020-11-13 | 一种Gaia***中的多表连接优化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011267934.3A CN112256705B (zh) | 2020-11-13 | 2020-11-13 | 一种Gaia***中的多表连接优化方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112256705A CN112256705A (zh) | 2021-01-22 |
CN112256705B true CN112256705B (zh) | 2022-11-01 |
Family
ID=74265581
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011267934.3A Active CN112256705B (zh) | 2020-11-13 | 2020-11-13 | 一种Gaia***中的多表连接优化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112256705B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116501743B (zh) * | 2023-06-21 | 2023-11-24 | 中国电信股份有限公司 | 联表代价生成、重排方法和数据处理方法及装置、*** |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5758335A (en) * | 1996-09-27 | 1998-05-26 | Bull Hn Information Systems Inc. | Optimizing table join ordering using graph theory prior to query optimization |
CN101576880A (zh) * | 2008-05-06 | 2009-11-11 | 山东省标准化研究院 | 基于极值优化的数据库查询优化方法 |
CN107291770A (zh) * | 2016-04-11 | 2017-10-24 | ***通信集团山西有限公司 | 一种分布式***中海量数据的查询方法及装置 |
CN110750560A (zh) * | 2019-10-25 | 2020-02-04 | 东北大学 | 一种优化网络多连接的***和方法 |
CN110891083A (zh) * | 2019-11-05 | 2020-03-17 | 北京理工大学 | 一种Gaia中支持多作业并行执行的代理方法 |
CN110908796A (zh) * | 2019-11-04 | 2020-03-24 | 北京理工大学 | 一种Gaia***中的多作业合并与优化***及方法 |
-
2020
- 2020-11-13 CN CN202011267934.3A patent/CN112256705B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5758335A (en) * | 1996-09-27 | 1998-05-26 | Bull Hn Information Systems Inc. | Optimizing table join ordering using graph theory prior to query optimization |
CN101576880A (zh) * | 2008-05-06 | 2009-11-11 | 山东省标准化研究院 | 基于极值优化的数据库查询优化方法 |
CN107291770A (zh) * | 2016-04-11 | 2017-10-24 | ***通信集团山西有限公司 | 一种分布式***中海量数据的查询方法及装置 |
CN110750560A (zh) * | 2019-10-25 | 2020-02-04 | 东北大学 | 一种优化网络多连接的***和方法 |
CN110908796A (zh) * | 2019-11-04 | 2020-03-24 | 北京理工大学 | 一种Gaia***中的多作业合并与优化***及方法 |
CN110891083A (zh) * | 2019-11-05 | 2020-03-17 | 北京理工大学 | 一种Gaia中支持多作业并行执行的代理方法 |
Also Published As
Publication number | Publication date |
---|---|
CN112256705A (zh) | 2021-01-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Sommer | Shortest-path queries in static networks | |
CN108803332B (zh) | 基于改进生物地理学的路径规划方法 | |
CN111611274A (zh) | 一种数据库查询优化方法和*** | |
CN105210058A (zh) | 使用多个引擎来进行图查询处理 | |
CN110750560B (zh) | 一种优化网络多连接的***和方法 | |
CN113111058B (zh) | 一种数据库的处理方法和装置 | |
CN105550332A (zh) | 一种基于双层索引结构的起源图查询方法 | |
CN112256705B (zh) | 一种Gaia***中的多表连接优化方法 | |
CN113836174B (zh) | 基于强化学习dqn算法的异步sql连接查询优化方法 | |
US10733156B2 (en) | Parallel discretization of continuous variables in supervised or classified dataset | |
CN116681104A (zh) | 分布式空间图神经网络的模型建立及实现方法 | |
CN111241127A (zh) | 基于谓语组合的sparql查询优化方法、***、存储介质及设备 | |
CN108549688A (zh) | 一种数据操作的优化方法、装置、设备和存储介质 | |
CN108256077B (zh) | 一种面向***智能客服的动态扩展知识图推理方法 | |
Song | Design of distributed database systems: an iterative genetic algorithm | |
US20160292300A1 (en) | System and method for fast network queries | |
CN106991195B (zh) | 一种分布式的子图枚举方法 | |
CN111369052B (zh) | 简化路网ksp优化算法 | |
Morvan et al. | Mobile agent cooperation methods for large scale distributed dynamic query optimization | |
CN110442690B (zh) | 一种基于概率推理的询问优化方法、***和介质 | |
CN113407532A (zh) | Spark SQL多表连接优化方法、装置、计算机设备和存储介质 | |
CN117472942A (zh) | 代价估计方法、电子设备、存储介质和计算机程序产品 | |
WO2021248319A1 (en) | Database management system and method for graph view selection for relational-graph database | |
CN110147393B (zh) | 面向电影信息数据集中数据空间的实体解析方法 | |
CN112905591B (zh) | 一种基于机器学习的数据表连接顺序选择方法 |
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 |