分布式数据库管理系统中的查询处理需要在网络中的计算机之间传输数据。查询的分发策略是数据库系统中数据传输和本地数据处理的排序。通常,分布式 DBMS 中的查询需要来自多个站点的数据,这种需要来自不同站点的数据称为导致通信成本的数据传输。由于通过网络传输数据的通信成本,DBMS 中的查询处理不同于集中式 DBMS 中的查询处理。当站点通过高速网络连接时,传输成本低,而在其他网络中则相当可观。
1.分布式查询处理的成本(数据传输):
在分布式查询处理中,分布式查询处理的数据传输成本意味着将中间文件传输到其他站点进行处理的成本,以及将最终结果文件传输到需要该结果的位置的成本。假设用户向站点 S1 发送查询,该查询需要来自其自己以及来自另一个站点 S2 的数据。现在,有以下三种策略来处理此查询:
- 我们可以将数据从 S2 传输到 S1,然后处理查询
- 我们可以将数据从 S1 传输到 S2,然后处理查询
- 我们可以将数据从 S1 和 S2 传输到 S3,然后处理查询。因此,选择取决于各种因素,例如关系和结果的大小、不同站点之间的通信成本以及站点结果将被利用的位置。
通常,数据传输成本是根据消息的大小计算的。通过使用以下公式,我们可以计算数据传输成本:
Data transfer cost = C * Size
其中 C 是指数据传输的每字节成本,而 Size 是数字。传输的字节数。
示例:考虑下表 EMPLOYEE 和 DEPARTMENT。
站点 1:员工
EID | NAME | SALARY | DID |
EID- 10 字节
薪水- 20 字节
DID- 10 字节
名称- 20 字节
总记录 – 1000
记录大小 – 60 字节
Site2:部门
DID | DNAME |
DID- 10 字节
DName- 20 字节
总记录 – 50
记录大小 – 30 字节
示例:查找员工姓名及其部门名称。此外,查找当查询提交到站点 3 时执行此查询的数据传输量。
答:考虑到查询是在站点 3 提交的,并且 EMPLOYEE 和 DEPARTMENT 这两个关系都没有在站点 3 上可用。因此,要执行此查询,我们有三种策略:
- 传输位于站点 3 的 EMPLOYEE 和 DEPARTMENT 表,然后在那里连接这些表。这其中的总成本为 1000 * 60 + 50 * 30 = 60,000 + 1500 = 61500 字节。
- 将表 EMPLOYEE 传输到 SITE 2,在 SITE 2 加入表,然后在 SITE 3 传输结果。由于我们必须传输 1000 个具有 NAME 和 DNAME 的元组,因此总成本为 60 * 1000 + 60 * 1000 = 120000 字节从站点 1,
- 将表 DEPARTMENT 转移到站点 1,加入站点 2 的表,加入站点 1 的表,然后将结果转移到站点 3。总成本为 30 * 50 + 60 * 1000 = 61500 字节,因为我们必须将 1000 个具有 NAME 和 DNAME 的元组从站点 1 传输到站点 3,每个元组 60 字节。
现在,如果优化标准是减少数据传输量,我们可以从上面选择 1 或 3 个策略。
2. 在分布式查询处理中使用半连接:
半连接操作用于分布式查询处理,以在将表传输到另一个站点之前减少表中的元组数量。元组数量的减少减少了传输的数量和总大小,最终降低了数据传输的总成本。假设我们在站点 S1 和 S2 上有两个表 R1、R2。现在,我们将一张表 R1 的连接列转发到另一张表 R2 所在的站点。此列在该站点与 R2 连接。是否减少R1或R2只能在比较减少R1和减少R2的优势后才能做出。因此,半连接是一种组织良好的解决方案,可以减少分布式查询处理中的数据传输。
示例:使用半连接操作查找为执行上述示例中给出的相同查询而传输的数据量。
答:可以使用以下策略来执行查询。
- 选择所有(或 Project)站点 1 的 EMPLOYEE 表的属性,然后将它们传输到站点 3。为此,我们将传输 NAME、DID(EMPLOYEE) 并且大小为 25 * 1000 = 25000 字节。
- 将表 DEPARTMENT 转移到站点 3,并将 EMPLOYEE 的投影属性与此表连接。 DEPARTMENT 表的大小为 25 * 50 = 1250
应用上述方案,执行查询所传输的数据量为 25000 + 1250 = 26250 字节。