美文网首页
数据库课程之分布式数据库查询优化(三)

数据库课程之分布式数据库查询优化(三)

作者: ZhengYaWei | 来源:发表于2018-04-22 15:40 被阅读202次

    一、概述

    1.1 代价估算

    在传统的集中型数据库中:
    查询总代价=CPU代价+I/O代价
    分布式数据库中:
    查询总代价=本地代价(CPU代价+I/O代价)+通信代价
    响应时间=局部处理时间+通信时间(和并行处理程度有关)
    其中上述通信代价可用如下公式衡量:

    TC(X)=C0 + C1 * X`
    C0: 通信初始化时间
    C1:数据传输率(单位:秒 / bit)
    X:传输的数据量(单位:bit)
    

    远程通信网通常是以减小通信代价为主 ;而高速局域网通常以减小局部处理时间为主。

    1.2 优化的必要性

    通过一个例子来看看数据库优化的必要性。存在这样一个分布式教学数据库:

    S(Sno, Sn, Age, Sex)10000个元组,存放在A站点;
    SC(Sno, Cno, Grade)1000000个元组,存放A站点;
    C(Cno, Cn, Teacher) 100000个元组,存放在B站点;
    

    其中S表示学生信息,C表示课程信息,SC表示学生选课信息。假设每个元组的长度为100 bit,通信系统传 输速率为10000bit / 秒,通信延迟时间为1秒。根据上述条件查询选修‘Maths’课的男生的学号和姓名。查询语句一般会这样写:

    SELECT Sno, Sn FROM S, SC, C 
    WHERE S.Sno = SC.Sno 
    AND SC.Cno = C.Cno 
    AND Sex = ‘M’
    AND Cn = ‘Maths’
    

    再次之前我们还应该知道代价估算的计算公式:

    T = 传输延迟时间 + 传输数据量 / 数据传输速率
    = 传输次数 * 1 + 传输的bit数 / 10000
    

    可以有如下六种不同的方案查询,选择不同的方法查询时间上会相差很大,由此可见做查询优化是很有必要的。







    二、查询优化基础

    关系代数表达式可以表示出各操作的执行顺序, 可以利用等价变换,实现查询优化。关系代数所有操作数都是关系,计算结果也是关系。关系代数有九种常见操作符:其中2个(选择和投影)一元操作符,7个二元操作符。

    一元运算:选择(σ),投影(π)
    二元运算:并(∪),交(∩),差(-),除 (÷),笛卡儿积(x ),连接(∞),半连接 (∝)
    

    关系代数中的运算符也可以分为集合运算符和专门的关系运算符,如下图:


    按照1.2中的例子,执行如下查询语句查询选择 c1 课程的学生:

    Select Sn
    from s,sc
    Where s.Sno=sc.Sno and Cno=‘c1’
    

    对于上述查询语句,在关系代数中可以有如下三种表达形式:



    对一个关系代数表达式表示的查询进行语法分析,可以得到一棵操作树。树的叶子是已知的关系,树的各个节点是关系代数操作符,树的根是查询结果。


    三、查询的分类和查询处理步骤

    3.1 查询的分类

    分布式数据库中的查询分为三类:局部查询、远程查询、全局查询。

    • 局部查询:只涉及本地站点的数据
      局部查询中的优化策略和集中式数据库类似。主要从下面四个方面做起:
      1、先做选择和投影。 先操作使数据量变小的操作,后期的遍历效率也会高。
      2、在执行连接前对数据库数据进行适当的预处理,入队数据按连接属性排序和在连接属性上简历索引,以减少扫描。
      3、将一些操作组合起来,减少扫描次数。如从左边往右边连接,扫描次数可能是n+m * n;从右边往左边连接扫面次数可能是m * n+m,此时比较两者的大小,找出最佳组合方式。
      4、找出公共表达式。可按照 2 x 3 + 2 x 4 = 2 x (3 + 4) 这个做类比,明显后者运算步骤少。
    • 远程查询:只涉及远程站点的数据
      优化策略与局部查询基本类似。但是在多副本的情况下,需要注意如果有多个远程站点的数据都满足查询数据,需要选择通信代价比较低的站点。
    • 全局查询:查询涉及多个站点的数据
      全局查询中主要需要做好以下四种操作。
      1、具体化,即为全局查询选定片段的副本。
      2、确定操作次序,主要是确定连接和并运算的次序。
      3、确定操作的执行方法,将操作组合,选定访问路径、处理方法,其中重点是连接的处理。
      4、确定执行站点。

    3.2 查询处理步骤

    1. 查询分解:把查询问题转换成定义在全局关系上的关系代数表达式或SQL语句。
    2. 数据本地化:把一个全局关系上的查询,转化为对片段的查询。涉及分片模式、分配模式。
    3. 全局优化:找出各个分段查询之间的最佳操 作次序,使得代价最小。其重点在连接运算的 优化。
    4. 局部优化:对各站点的局部查询做优化,类似于集中数据库。

    四、基于关系代数等价变化优化

    • 将连接、并运算向根部移动,选择、投影移动到叶子(即先做选择和投影操作,连接和并运算放到最后)。
    • 将选择条件与水平分片条件结合,去掉矛盾的分支(假如筛选条件中为男,则首先把女给排除)。
    • 将投影属性与垂直分片属性比较,去掉无关的分支。

    五、基于半连接运算优化

    办理按揭可以缩减关系的大小,以减少数据传输量。适用于通信费用矛盾的场合。具体优化请看下面的例子。

    假设有两个站点Site1和Site2,Site1上存放R关系,R关系中有属性A,Site2上存放S关系,S关系中有属性B。
    如果想让R和S关系执行连接操作,可以按照下面公式做转化计算。




    代价估算的流程如下:



    计算过程如下:

    计算结果如下:

    对于上述流程也可以反过来执行,即站点Site1和Site2分别反过来计算,则计算结果如下:



    显然针对上述计算,共有两种方式,至于究竟该采用那一种方式,可以根据二者计算出来的大小做比较,进而做出合适的选择方案。

    六、基于直接连接查询优化

    从上面直接连接转换为半连接的方案中可以看出,直接连接方案金座一次数据传输即可,但是直接连接转换为半连接计算会增加通信数量(两次)和本地处理时间。转换半连接的最大好处在于减少了网络数据传输量。 一般而言对于高速局域网络环境,可以忽略数据传输量因素,本地处理费用才是最应该考虑的因素。接下来简单讨论下高速局域网中直接连接的优化。

    6.1 利用站点依赖信息

    所谓的站点依赖信息可以理解成诱导分片的条件。利用站点依赖特性可以使一些数据无需传输。

    无数据传输连接的判定算法。

    6.2 分片和复制算法

    假设有两个站点S1和S2以及两个关系R1和R2(均包含A属性)。其中R1被分成两部分分别存放在S1和S2上,R2也被分为两部分分别存放在S1和S2上。即下图:



    如对果两个关系R1和R2在属性A上进行连接操作。第一种方案可以让R1保持分片状态,R2保持完整状态,则处理方式为:将片段F21复制到站点S2 ,与F22合并得到R2 ;将片段F22复制到站点S1 ,与F21合并得到R2,然后分别在站点S1和S2做连接运算。反过来第二种处理方式可以让R2保持分片状态,R1保持完整状态,计算方式同第一种方案类似。

    设各个片段的大小为:| F11 |=50 | F12 |=50 | F21 |=100 | F22 |=200
    设数据通信代价为:C(x)=x
    本地并运算代价为:U(x1,x2)=2(x1+x2)
    本地连接代价为:J(x1,x2)=5
    (x1+x2)

    令R1保持分片状态:
    站点S1上的代价FT(Q, S1, R1)=2550 :
    200 --传输F22
    2(100+200) --F21UF22
    5
    (50+300) --F11 ∞ ( F21UF22 )
    站点S2上的代价FT(Q, S2, R1)=2450 :
    100 --传输F21
    2(100+200) --F21UF22
    5
    (50+300) --F12 ∞ ( F21UF22 )
    取2450和2550中的最大值,所以总代价为2550。

    令R2保持分片状态
    站点S1上的代价FT(Q, S1, R2)=1250
    50 --传输F12
    2(50+50) --F11UF12
    5
    (100+100) --F21 ∞ ( F11UF12 )
    站点S2上的代价FT(Q, S2, R2)=1750 :
    50 --传输F11
    2(50+50) --F11UF12
    5
    (200+100) --F22∞ ( F11UF12 )
    总代价为:1750

    综上,选择令R2保持分片状态。

    补充(笛卡尔积、自然连接(直接连接)以及半连接的区别)

    笛卡尔积


    笛卡尔积

    自然连接是一种特殊的等值连接。注意两点,1、两个关系中比较分量必须是相同的属性值。2、在结果中吧重复的属性所在列去掉。




    半连接:

    相关文章

      网友评论

          本文标题:数据库课程之分布式数据库查询优化(三)

          本文链接:https://www.haomeiwen.com/subject/mrxykftx.html