• DDB---查询与优化


    摘要:分布式数据库(Distributed DB)是数据库中非常重要的一个部分,随着要处理的数据越来越多,分布式逐渐成为了一种策略。主要有:分布式操作系统,分布式程序设计语言,分布式文件系统,分布式数据库等。今天我们主要学习分布式数据库中常用的查询优化策略。

    分布式查询优化的目标

    方式一:使总代价最小(总代价 = CPU代价 + I/O代价 + 通信代价)

    方式二:响应时间最短

    查询代价的估算方法

    设一个查询的预期代价为 QC (query cost)

    QC = CPU代价 + I/O代价 + 通信代价

    其中,通信代价(Transmit Cost)可用如下公式粗略估算:

    TC(X) = C0 + C1 * X

    1)X 为数据的传输量,通常以 bit 为单位计算

    2)C为两站点间通信初始化一次所花费的时间,它由通信系统确定,近似一个常数,以秒(s)为单位

    3)C1 为传输率(传输速度的倒数),即单位数据传输的时间,单位是 s/bit

    分布式查询的层次结构

    1)查询分解:将查询问题(例如 SQL 语句)转换为一个定义在全局关系上的关系代数表达式。本层转换所需要的信息在全局概念模式中获得

    2)数据本地化:把一个全局关系上的查询,进行具体化(尽可能做到本地化或近本地化)片段上的查询。这一变换所需要的信息在分片模式中片段的分配模式中获得

    3)全局优化:找出片段查询的最佳操作次序,包括使得代价函数最小。(基于广域网的分布式 DBMS,通信代价是最为明显的因素)。本层转换所需要的信息来自数据库统计信息,包括各站点片段统计信息、资源信息和通信信息等

    4)局部优化:在每一个站点上执行的子查询,被称为局部查询。它由该站点上的 DBMS 进行优化。所需信息取自局部模式

    具体优化方法

    基于关系代数等价变换的查询优化

    基本原理:把查询问题转变为关系代数表达式,分析得到查询树(语法树),进行从全局到片段的变换得到基于片段上的查询树,然后利用关系代数等价变换规则的优化算法,尽可能先执行选择和投影操作。这样,一方面可以减少其后操作的操作量,另一方面可以减少操作次数,对该查询树进行优化,从而达到查询优化的目的。

    水平分片关系优化原理:首先,尽可能地把条件选择下移到分片的限定关系处,再把分片的限定关系与选择条件进行比较,然后去掉它们之间存在矛盾的相应片段。如果最后剩下一个水平片段,则在重构全局关系的操作中,就可去掉”并操作“(至少可以减少”并“操作的次数)

    S(S#,SNAME,AGE,SEX)   -- 数据库全局关系中的 S 表
    SC(S#,C#,GRADE)       -- 数据库全局关系中的 SC 表
    
    SELECT DISTINCT SNAME FROM S,SC      -- 执行的查询语句
    WHERE S.S# = SC.S# AND SEX = 'M' AND GRADE > 90

    它的关系代数表达式为:

      ∏SNAMESEX='M' ^ GRADE>90S.S# = SC.S#)(S X SC))

    垂直分片关系优化原理:把垂直分片所用到的属性集,与查询条件(查询表达式)中的投影操作所涉及的属性集相比较,去掉无关的垂直片段。如果只剩下一个垂直片段与查询有关时,就可去掉重构全局关系的”连接“操作(至少可以减少”连接“操作的次数)

    --全局关系 EMP(EMP#,DEPT#,SALARY,DEPT#,DNAME) 进行垂直分片
    -- E1(EMP#,DEPT#,DNAME)
    -- E2 (EMP#,ENAME,SALARY)
    
    SELECT ENAME,SALARY FROM EMP   -- 执行的查询语句

    它的关系代数表达式为:

      ∏ENAME,SALARY(EMP)

    基于半连接算法的查询优化

      引入半连接算法的理由:

        连接操作是常用而且代价较高的一种操作。目的是为了使分布式数据库系统能有效地处理连接操作,使传输的数据量最少。

      半连接操作过程和代价估计:

        

    基于直接连接算法的查询优化

      3.1 一般常用策略

      3.2 利用站点依赖信息的算法

      3.3 分片和复制算法

      3.4 站点依赖和数据复制结合

      3.5 Hash 划分算法

    总结:不同方法的比较

    所有博文均为原著,如若转载,请注明出处!
  • 相关阅读:
    计算两个字符串的最大公共字串的长度,字符不区分大小写
    任何一个整数m的立方都可以写成m个连续奇数之和。
    求一个byte数字对应的二进制数字中1的最大连续数
    Elasticsearch的过滤查询
    如何在Elasticsearch中安装中文分词器(IK+pinyin)
    使用Linux的alternatives命令替换选择软件的版本
    PHP如何与搜索引擎Elasticsearch交互?
    如何安装搜索引擎Elasticsearch?
    如何修改MAC自带的PHP的版本?
    程序员技能图谱
  • 原文地址:https://www.cnblogs.com/zpcoding/p/10773246.html
Copyright © 2020-2023  润新知