- 分布式数据库管理系统教程
- DDBMS - 首页
- DDBMS - 数据库管理系统概念
- DDBMS - 分布式数据库
- 分布式数据库设计
- 分布式数据库环境
- DDBMS - 设计策略
- DDBMS - 分布式透明性
- DDBMS - 数据库控制
- 分布式数据库管理系统安全
- 数据库安全与加密
- 分布式数据库中的安全
- 分布式数据库管理系统资源
- DDBMS - 快速指南
- DDBMS - 有用资源
- DDBMS - 讨论
分布式系统中的查询优化
本章讨论分布式数据库系统中的查询优化。
分布式查询处理架构
在分布式数据库系统中,处理查询包括全局和本地两个级别的优化。查询从客户端或控制站点进入数据库系统。在这里,用户被验证,查询被检查、转换并在全局级别进行优化。
架构可以表示为 -
将全局查询映射到本地查询
将全局查询映射到本地查询的过程可以实现如下 -
全局查询中所需的表片段分布在多个站点。本地数据库仅包含有关本地数据的信息。控制站点使用全局数据字典收集有关分布的信息,并从片段重建全局视图。
如果没有复制,全局优化器将在存储片段的站点运行本地查询。如果存在复制,全局优化器将根据通信成本、工作负载和服务器速度选择站点。
全局优化器生成一个分布式执行计划,以便在站点之间进行最少的数据传输。该计划说明了片段的位置、查询步骤执行的顺序以及参与传输中间结果的过程。
本地查询由本地数据库服务器优化。最后,本地查询结果通过联合操作(对于水平片段)和连接操作(对于垂直片段)合并在一起。
例如,假设以下 Project 模式根据城市(城市为新德里、加尔各答和海德拉巴)进行水平分片。
PROJECT
PId | City | Department | Status |
假设有一个查询要检索所有状态为“正在进行”的项目的详细信息。
全局查询将为 -
$$\sigma_{status} = {\small "ongoing"}^{(PROJECT)}$$
新德里服务器中的查询将为 -
$$\sigma_{status} = {\small "ongoing"}^{({NewD}_-{PROJECT})}$$
加尔各答服务器中的查询将为 -
$$\sigma_{status} = {\small "ongoing"}^{({Kol}_-{PROJECT})}$$
海德拉巴服务器中的查询将为 -
$$\sigma_{status} = {\small "ongoing"}^{({Hyd}_-{PROJECT})}$$
为了获得总体结果,我们需要将这三个查询的结果联合起来,如下所示 -
$\sigma_{status} = {\small "ongoing"}^{({NewD}_-{PROJECT})} \cup \sigma_{status} = {\small "ongoing"}^{({kol}_-{PROJECT})} \cup \sigma_{status} = {\small "ongoing"}^{({Hyd}_-{PROJECT})}$
分布式查询优化
分布式查询优化需要评估大量的查询树,每个查询树都生成查询所需的结果。这主要是由于大量复制和碎片数据的存在。因此,目标是找到一个最优解,而不是最佳解。
分布式查询优化的主要问题是 -
- 优化利用分布式系统中的资源。
- 查询交易。
- 减少查询的解空间。
优化利用分布式系统中的资源
分布式系统在各个站点有多个数据库服务器来执行与查询相关的操作。以下是优化资源利用率的方法 -
操作迁移 - 在操作迁移中,操作在存储数据的位置运行,而不是在客户端站点运行。然后将结果传输到客户端站点。这适用于操作数在同一站点可用的操作。示例:选择和投影操作。
数据迁移 - 在数据迁移中,数据片段被传输到数据库服务器,并在那里执行操作。这用于操作数分布在不同站点上的操作。这也适用于通信成本低且本地处理器比客户端服务器慢得多的系统。
混合迁移 - 这是数据和操作迁移的组合。在这里,数据片段被传输到高速处理器,并在那里运行操作。然后将结果发送到客户端站点。
查询交易
在分布式数据库系统的查询交易算法中,分布式查询的控制/客户端站点称为买方,本地查询执行的站点称为卖方。买方制定了多个选择卖方和重建全局结果的备选方案。买方的目标是实现最优成本。
该算法从买方将子查询分配给卖方站点开始。最优计划是从卖方提出的本地优化查询计划以及重建最终结果的通信成本组合创建的。一旦制定了全局最优计划,查询就会被执行。
减少查询的解空间
最优解通常涉及减少解空间,以便减少查询和数据传输的成本。这可以通过一组启发式规则来实现,就像集中式系统中的启发式一样。
以下是一些规则 -
尽早执行选择和投影操作。这减少了通信网络上的数据流。
通过消除与特定站点无关的选择条件来简化水平片段上的操作。
对于包含位于多个站点的片段的连接和联合操作,将片段数据传输到大多数数据所在的站点并在那里执行操作。
使用半连接操作来限定要连接的元组。这减少了数据传输量,进而降低了通信成本。
合并分布式查询树中的公共叶子和子树。