数据库集成:多数据库系统查询处理全解析
1. 成本模型参数调整与系统争用等级
在多数据库系统中,调整成本模型参数以优化后续查询是一项重要任务。一种方法是在运行时调整成本模型参数,避免了定期处理样本查询的开销,但解决成本模型方程仍需大量计算,且不能保证成本模型精度随时间提升。
更好的解决方案是定性方法,它将系统争用等级定义为频繁变化因素对查询成本的综合影响。系统争用等级分为高、中、低和无争用几个离散类别,这使得能够定义多类别成本模型,在动态因素变化时提供准确的成本估计。该成本模型最初使用探测查询进行校准,然后根据最重要的系统参数随时间计算当前系统争用等级。不过,这种方法假设查询执行时间较短,环境因素在查询执行期间保持相对稳定,因此不适用于长时间运行的查询。
对于环境因素变化可预测的情况,如每日数据库管理系统(DBMS)负载变化相同,可按连续日期范围计算查询成本,总成本为各范围成本之和。此外,还可以了解多数据库管理系统(MDBS)查询处理器与组件DBMS之间可用网络带宽的模式,从而根据实际日期调整查询成本。
2. 异构查询优化
多数据库查询优化不仅要处理异构成本建模问题,还要应对组件DBMS异构计算能力的挑战。不同组件DBMS的功能差异较大,例如,有的可能只支持简单的选择操作,而有的则支持涉及连接和聚合的复杂查询。根据中介器与包装器之间的接口类型,主要有两种处理方法:基于查询的方法和基于操作符的方法。
-
基于查询的方法
- 包装器支持相同的查询能力,如SQL的子集,并将其转换为组件DBMS的能力。这种方法通常依赖标准的DBMS接口,如开放数据库连接(ODBC)及其扩展,或外部数据的SQL管理(SQL/MED)。由于组件DBMS对中介器来说是同质的,因此可以重用为同质分布式DBMS设计的查询处理技术。但如果组件DBMS功能有限,额外的功能必须在包装器中实现。
- 可以使用分布式基于成本的查询优化算法结合异构成本模型,但需要扩展以将分布式执行计划转换为组件DBMS和中介器要执行的子查询。混合两步优化技术在这种情况下很有用:第一步,由集中式基于成本的查询优化器生成静态计划;第二步,在启动时,通过站点选择和将子查询分配到站点来生成执行计划。然而,集中式优化器通常排除了浓密连接树,几乎所有系统都使用左线性连接顺序。虽然左线性连接树在集中式DBMS中有一定优势,但在多数据库系统中,由于不允许连接执行的并行性,可能不是首选。为了解决这个问题,可以生成浓密连接树,例如先通过成本查询优化器生成左线性连接树,再将其转换为浓密连接树。一种混合算法可以通过同时进行自下而上和自上而下的扫描,逐步将左线性连接树转换为浓密连接树,以减少响应时间。
| 方法 | 优点 | 缺点 |
|---|---|---|
| 基于查询的方法 | 可重用同质分布式DBMS查询处理技术 | 组件DBMS功能有限时需在包装器实现额外功能;左线性连接树缺乏并行性 |
| 基于操作符的方法 | 灵活定义中介器和包装器功能级别;便于包装器开发 | 查询处理更复杂 |
graph TD
A[查询优化] --> B[基于查询的方法]
A --> C[基于操作符的方法]
B --> D[分布式成本优化算法]
B --> E[混合两步优化技术]
C --> F[规划函数]
C --> G[搜索空间生成]
C --> H[QEP分解]
C --> I[成本评估]
-
基于操作符的方法
- 包装器通过关系操作符的组合来导出组件DBMS的功能,这使得在定义中介器和包装器之间的功能级别时具有更大的灵活性。不同组件DBMS的功能可以提供给中介器,这使得包装器的构建更简单,但中介器的查询处理更复杂。任何组件DBMS不支持的功能(如连接)都需要在中介器中实现。
-
以Garlic项目为例,组件DBMS的功能通过包装器表示为规划函数,可由集中式查询优化器直接调用。规划函数包括访问关系的
accessPlan和使用访问计划连接两个关系的joinPlan,它们精确反映了组件DBMS的功能。使用规划函数进行异构查询优化具有多种优势,如能灵活表达组件数据源的功能、便于包装器开发以及可轻松集成到现有的集中式查询优化器中。 - 在DIMDBS中,基于操作符的方法也得到了成功应用。该系统使用全局视图(GAV)方法,支持对象数据模型,便于引入新的组件数据库并处理类型不匹配问题。组件DBMS的功能定义为代数机器的子集,可部分或全部由包装器或中介器支持。查询处理分为三个主要步骤:搜索空间生成、QEP分解和成本评估。
3. 查询翻译与执行
查询翻译和执行由包装器使用组件DBMS完成。包装器封装了一个或多个组件数据库的细节,并将组件DBMS的功能和成本函数以通用接口的形式导出给中介器。其主要功能是在通用接口和DBMS依赖接口之间进行转换。
根据组件DBMS的自治级别,包装器、中介器和组件DBMS的位置可能不同。在强自治情况下,包装器应位于中介器站点,通信会产生网络成本;而在合作组件数据库的情况下,包装器可安装在组件DBMS站点,通信更高效。
包装器需要进行两种转换:一是将中介器生成的输入查询执行计划(QEP)从通用接口转换为使用组件DBMS的DBMS依赖接口的调用;二是将组件DBMS返回的结果转换为通用接口格式,以便集成到中介器中。此外,包装器还可以执行组件DBMS不支持的操作。
以SQL/MED标准为例,展示了如何将简单数据源包装为可通过SQL访问的形式。例如,将存储在Unix文本文件中的
EMP
关系定义为外部表,并通过包装器将SQL查询转换为Unix shell命令进行处理。
包装器主要用于只读查询,查询翻译和包装器构建相对容易。然而,如果要通过包装器支持对组件数据库的更新,会面临诸多挑战。主要问题包括完整性约束的异构性和包装器维护。完整性约束在现代DBMS中通常是显式的,但在旧的DBMS或简单数据源中可能是隐式的,需要通过软件工程工具进行识别和转换。包装器维护方面,组件数据库模式的变化可能使映射失效,从而影响查询结果的正确性。
总之,多数据库系统的查询处理涉及成本模型调整、异构查询优化、查询翻译与执行等多个方面,每个环节都有其特点和挑战,需要根据具体情况选择合适的方法和技术来确保系统的高效运行。
数据库集成:多数据库系统查询处理全解析(续)
4. 基于操作符方法的详细示例
为了更深入地理解基于操作符的方法在多数据库系统中的应用,下面通过一个具体示例进行详细说明。
假设有三个位于不同站点的组件数据库:
- 组件数据库
db1
存储关系
EMP(ENO, ENAME, CITY)
。
- 组件数据库
db2
存储关系
WORKS(ENO, PNAME, DUR)
。
- 组件数据库
db3
存储关系
EMPASG(ENAME, CITY, PNAME, DUR)
,其主键为
(ENAME, PNAME)
。
组件数据库
db1
和
db2
使用相同的包装器
w1
,而
db3
使用不同的包装器
w2
。
4.1 包装器的规划函数
-
包装器
w1的规划函数-
accessPlan规则:
-
accessPlan(R: relation, A: attribute list, P: select predicate) =
scan(R, A, P, db(R))
该规则产生一个扫描操作符,用于从其组件数据库
db(R)
(这里
db(R)
可以是
db1
或
db2
)访问关系
R
的元组,应用选择谓词
P
,并投影到属性列表
A
上。
-
joinPlan
规则:
joinPlan(R1, R2: relations, A: attribute list, P: join predicate) =
join(R1, R2, A, P)
condition: db(R1) ≠ db(R2)
该规则产生一个连接操作符,用于访问关系
R1
和
R2
的元组,应用连接谓词
P
,并投影到属性列表
A
上。条件表示
R1
和
R2
存储在不同的组件数据库(即
db1
和
db2
)中,连接操作由包装器实现。
-
包装器
w2的规划函数-
accessPlan规则:
-
accessPlan(R: relation, A: attribute list, P: select predicate) =
fetch(CITY="c")
condition: (CITY="c") ⊆P
该规则产生一个获取操作符,用于直接访问组件数据库
db3
中
CITY
值为
"c"
的整个员工元组。
-
accessPlan
规则:
accessPlan(R: relation, A: attribute list, P: select predicate) =
scan(R, A, P)
该规则产生一个扫描操作符,用于在包装器中访问关系
R
的元组,应用选择谓词
P
和属性投影列表
A
,扫描操作由包装器实现,而非组件DBMS。
4.2 查询示例
考虑以下提交给中介器
m
的SQL查询:
SELECT ENAME, PNAME, DUR
FROM
EMPASG
WHERE
CITY = "Paris" AND DUR > 24
假设采用全局视图(GAV)方法,全局视图
EMPASG(ENAME, CITY, PNAME, DUR)
可以定义为:
EMPASG = (db1.EMP ⋊⋉db2.WORKS) ∪db3.EMPASG
经过查询重写和查询优化后,基于操作符的方法可能会产生如图所示的查询执行计划(QEP):
graph LR
A[Scan(CITY="Paris") EMP db1] --> D[Join w1]
B[Scan(DUR> 24) WORKS db2] --> D
C[Fetch(CITY="Paris") EMPASG db3] --> E[Union m]
D --> E
这个计划表明,组件DBMS不支持的操作将由包装器或中介器实现。
5. 基于操作符方法的优势总结
使用规划函数进行异构查询优化在多数据库系统中有以下几个显著优势:
-
灵活表达组件数据源功能
:规划函数提供了一种灵活的方式来精确表达组件数据源的功能,特别是对于非关系型数据源,如网站,也可以进行建模。
-
便于包装器开发
:由于这些规则是声明性的,使得包装器的开发更加容易。包装器的主要开发工作是实现特定的操作符,如上述示例中
db3
的扫描操作符。
-
易于集成到现有优化器
:这种方法可以轻松地集成到现有的集中式查询优化器中。
6. DIMDBS中的应用
基于操作符的方法在DIMDBS(一个设计用于通过Web访问多个数据库的多数据库系统)中得到了成功应用。DIMDBS采用GAV方法,支持对象数据模型来表示中介器和组件数据库的模式和数据类型,这使得引入新的组件数据库变得容易,并能轻松处理潜在的类型不匹配问题。
组件DBMS的功能被定义为代数机器的一个子集,其中包含常见的操作符,如扫描、连接和并集,这些功能可以部分或全部由包装器或中介器支持。这为包装器实现者提供了很大的灵活性,他们可以决定在包装器还是中介器中支持组件DBMS的功能。此外,还可以指定操作符的组合,包括特定的数据集,以反映组件DBMS的限制。
在DIMDBS中,查询处理主要分为以下三个步骤:
1.
搜索空间生成
:将查询分解为多个查询执行计划(QEP),这些QEP构成了查询优化的搜索空间。搜索空间的生成通常使用传统的搜索策略,如动态规划。
2.
QEP分解
:将每个QEP分解为
n
个包装器QEP的森林和一个组合QEP。每个包装器QEP是初始QEP中可以完全由包装器执行的最大部分。无法由包装器执行的操作将被移动到组合QEP中,组合QEP通常通过对包装器产生的中间结果进行并集和连接操作,将这些结果组合成最终答案。
3.
成本评估
:使用分层成本模型评估每个QEP的成本。
7. 总结与展望
多数据库系统的查询处理是一个复杂而重要的领域,涉及到多个关键环节,包括成本模型参数调整、异构查询优化、查询翻译与执行等。每个环节都有其独特的挑战和解决方案。
在成本模型方面,定性方法通过定义系统争用等级,为动态因素变化时的成本估计提供了更准确的方法,但对于长时间运行的查询存在局限性。在异构查询优化中,基于查询的方法和基于操作符的方法各有优缺点,需要根据具体情况选择合适的方法。基于操作符的方法在灵活性和可扩展性方面表现出色,特别是在处理异构组件DBMS时具有很大优势。
查询翻译与执行主要由包装器完成,包装器在通用接口和DBMS依赖接口之间进行转换。虽然包装器在只读查询方面相对容易实现,但在支持组件数据库更新时面临完整性约束异构性和维护等问题。
未来,随着数据库技术的不断发展,多数据库系统将面临更多的挑战和机遇。例如,如何更好地处理大规模分布式数据、如何提高查询处理的性能和效率、如何解决不同数据源之间的语义冲突等。需要不断探索和创新,结合新的技术和方法,进一步完善多数据库系统的查询处理机制。
| 环节 | 挑战 | 解决方案 |
|---|---|---|
| 成本模型 | 动态因素影响成本估计;长时间运行查询环境因素变化 | 定性方法定义系统争用等级;按日期范围计算成本 |
| 异构查询优化 | 组件DBMS功能异构;左线性连接树缺乏并行性 | 基于查询和基于操作符的方法;生成浓密连接树 |
| 查询翻译与执行 | 完整性约束异构;包装器维护 | 软件工程工具识别隐式约束;定期检查和更新映射 |
通过深入研究和实践,我们可以更好地应对这些挑战,推动多数据库系统的发展,为用户提供更高效、更可靠的数据库服务。

2113

被折叠的 条评论
为什么被折叠?



