目录
摘要
火山模型Volcano在数据库查询系统的设计中,为查询优化、并行执行和资源收集提供了丰富的环境。
火山模型在代数运算符之间使用了一个标准接口,允许简单地添加新运算符和实现运算符。火山模型极具扩展性,它对于新的算子、算法、数据类型和限定类型的方法都提供了极大的扩展性。
火山模型包含两个新颖的元操作符:
-
choose-plan元操作符支持动态的查询评估计划,可以通过延迟执行进行优化。
-
exchange-plan元操作符支持分布式数据集内部的操作符并行,以及横向和纵向的操作符并行。在需求驱动的数据流和数据驱动的数据流的进程之间进行转换。
除了exchange operator外,所有的operator,都是以单进程环境作为前提设计的,通过exchange operator来进行并行化。通过operator的组合,使得数据操作和并行化能够得到很好的结合。火山模型是第一个有效地结合了扩展性和并行性来实现的查询引擎。
一、简介
火山模型的设计目的是为查询执行技术和查询优化启发提供实验工具,而不是提供一个直接可以支持上层应用的数据库系统。相对于一个完整的数据库系统,它缺少了用户友好的查询语言、数据类型定义、查询优化器和catalog。
处于火山模型的研究目的,它具有以下几个特点:
-
首先,它是模块化的和可扩展的,以支持未来的研究。
-
设计足够简单,以允许学生使用和研究
-
不预设数据模型,唯一的假设是查询流程是基于一组参数化的opeartor之间的转换实现的。
-
从复杂的并行性中解放算法设计、实现、调试、调优和初始试验,而允许进行并行查询处理的试验。
-
火山模型在查询执行范式上进行了实现,以确保学生学习如何在商业数据库产品中真正进行查询处理。
火山模型可以用于一个独立的进程,或是一个并行系统中。单进程查询评估计划已经可以很容易地在共享内存机器上并行化,很快也可以在分布式内存机器上并行化。
遵循了在操作系统研究中已经确立但在大多数数据库系统设计中没有被利用的设计原则,Volcano提供了支持策略的机制。策略可以由实验人员设置,也可以由查询优化器设置。机制和策略的分离促进了现代操作系统的可扩展性和模块化,并可能对可扩展的数据库系统作出同样的贡献。我们将在本文中反复地回到这种分离。
出于火山模型对未来扩展性和研究的目标,它在不断地扩展和修改。这其中最重要的扩展性在于两个元操作符的扩展。它们不仅是新的操作符,而且包含并封装了用于查询处理的新概念。它们是元操作符,因为它们对数据操作、选择、派生等没有贡献,而是提供了对查询处理的额外控制,而传统操作符(如文件扫描、排序和合并连接)无法提供这些控制。
choose-plan选择计划操作符实现了动态查询评估计划,这是为必须使用不完整信息进行优化的查询而开发的概念。例如,如果查询谓词中的某个常量实际上是程序变量,因此在编译和优化期间未知,则不可能可靠地优化嵌入式查询。动态计划允许准备多个等效的计划,每个计划对一定范围的实际参数值最优。choose-plan在运行时在这些计划中进行选择,而Volcano操作符集中的所有其他操作符(现在或将来)完全忽略了选择计划操作符的存在和功能。
第二个元操作符,exchange operator,在火山模型中实现并控制了并行查询评估。exchange operator能够跨越进程和处理器的边界来进行数据交换,所以其他的operator都无需考虑并行性,类似分区和流控制等并行特性都可以交给exchange operator来执行。
注意,火山模型所提供的两个元操作符:choose和exchange,它们的主要目的是对查询流程进行控制。
三、火山模型系统设计
当前火山模型是一个有20多个模块的C库,这些模块包含了文件系统、缓存管理、排序、B+ tree、自然join的两种实现算法(sort/ hash),各种其他join、聚合、重复消除、各种关系代数等等。此外,还有两个模块实现了动态查询评估计划并且能够实现以上所有算法的并行执行。
火山模型中的通用且不断出现的主题是,它的设计中提供了查询评估机制,以允许策略的选择和试验。机制和策略的分离在操作系统的设计和实现中是一种广为人知和非常稳固的准则,但它还没有被持续扩展地应用在数据库系统中。它对现代操作系统的可扩展性和模块化做出了重大贡献,并可能对可扩展的数据库系统做出同样的贡献。
操作系统设计的重要原理是策略(policy)和机制(mechanism)的区别
当前,火山模型由两层组成,文件系统层和查询处理层。前者提供了记录、文件和索引操作,包括携带可选谓词的scan操作,以及缓存机制;后者是一组查询处理模型,它们可以嵌套来构建一个复杂的查询评估树。
火山模型不包括系统catalog或是数据字典,这是由于扩展性和数据模型独立的目标所致。
3.1 文件系统
在我们对Volcano文件系统的讨论中,我们同样从下往上进行,从缓冲区管理到数据文件和索引。
缓冲区管理Buffer manager是文件系统中最有趣味的一部分,因为缓冲区管理在任一个数据库系统中都是性能关键点。火山模型的缓冲区管理设计目标是包含一些机制