📅  最后修改于: 2021-01-07 05:27:17             🧑  作者: Mango
本章讨论分布式数据库系统中的查询优化。
在分布式数据库系统中,处理查询包括全局和局部级别的优化。该查询进入客户端或控制站点上的数据库系统。在此,在全局级别上验证用户,检查,翻译和优化查询。
该架构可以表示为-
将全局查询映射到本地查询的过程可以实现如下-
全局查询中所需的表具有分散在多个站点中的片段。本地数据库仅具有有关本地数据的信息。控制站点使用全局数据字典来收集有关分布的信息,并从片段中重建全局视图。
如果没有复制,则全局优化器将在存储碎片的站点上运行本地查询。如果存在复制,则全局优化器将根据通信成本,工作量和服务器速度来选择站点。
全局优化器生成分布式执行计划,以便在站点之间进行最少量的数据传输。该计划说明了片段的位置,需要执行查询步骤的顺序以及转移中间结果所涉及的过程。
本地查询由本地数据库服务器优化。最后,在水平片段的情况下,通过合并操作将本地查询结果合并在一起;在垂直片段的情况下,则通过join操作将本地查询结果合并在一起。
例如,让我们考虑以下项目模式根据城市水平划分,这些城市是新德里,加尔各答和海得拉巴。
项目
PId | City | Department | Status |
假设存在一个查询以检索状态为“进行中”的所有项目的详细信息。
全局查询将为&inus;。
$$ \ sigma_ {status} = {\小“正在进行中”} ^ {(PROJECT)} $$
在新德里的服务器中的查询将是-
$$ \ sigma_ {status} = {\小“正在进行中”} ^ {({NewD} _- {PROJECT})} $$
加尔各答的服务器中的查询将是-
$$ \ sigma_ {status} = {\小“正在进行中”} ^ {({Kol} _- {PROJECT})} $$
在海得拉巴的服务器中的查询将是-
$$ \ sigma_ {status} = {\小“正在进行中”} ^ {({Hyd} _- {PROJECT})} $$
为了获得整体结果,我们需要按如下方式合并三个查询的结果:
$ \ sigma_ {status} = {\小“正在进行”} ^ {({NewD} _- {PROJECT})} \ cup \ sigma_ {status} = {\小“正在进行”} ^ {({kol} _- {PROJECT})} \ cup \ sigma_ {status} = {\小“正在进行中”} ^ {({Hyd} _- {PROJECT})} $
分布式查询优化需要评估大量查询树,每个查询树都会产生所需的查询结果。这主要是由于存在大量的复制和分段数据。因此,目标是找到最佳解决方案而不是最佳解决方案。
分布式查询优化的主要问题是-
分布式系统在各个站点中具有许多数据库服务器,以执行与查询有关的操作。以下是最佳资源利用的方法-
操作运送-在操作运送中,操作在存储数据的站点而不是客户站点上运行。然后将结果传输到客户端站点。这适用于操作数在同一站点可用的操作。示例:选择和项目操作。
数据送货-在数据运输,数据片段传送到数据库服务器,其中的操作执行。这用于操作数分布在不同位置的操作中。这也适用于通信成本较低且本地处理器比客户端服务器慢得多的系统。
混合运输-这是数据运输和运营运输的结合。在这里,数据片段被传输到运行该操作的高速处理器。然后将结果发送到客户端站点。
在用于分布式数据库系统的查询交易算法中,用于分布式查询的控制/客户端站点称为买方,而执行本地查询的站点称为卖方。买方为选择卖方和重构整体结果制定了多种选择。买方的目标是达到最佳成本。
该算法始于买方将子查询分配给卖方站点。最佳计划是根据卖方提出的本地优化查询计划,结合用于重建最终结果的通信成本来创建的。一旦制定了全局最优计划,就将执行查询。
最佳解决方案通常涉及解决方案空间的减少,从而降低了查询和数据传输的成本。可以通过一组启发式规则来实现,就像集中式系统中的启发式一样。
以下是一些规则-
尽早执行选择和投影操作。这减少了通信网络上的数据流。
通过消除与特定站点无关的选择条件,简化了水平片段的操作。
如果连接和合并操作由位于多个站点中的片段组成,则将片段化的数据传输到存在大多数数据的站点并在其中执行操作。
使用半联接操作来限定要联接的元组。这减少了数据传输量,进而降低了通信成本。
将公用叶和子树合并到分布式查询树中。