starburst是ibm实现的一个数据库原型系统,主要的文章如下。其主打的功能是优化器的可拓展性


编号
论文标题
下载链接
1

Grammar-like Functional Rules

for Representing Query Optimization Alternative

https://dl.acm.org/doi/pdf/10.1145/971701.50204
2
implementing an Interpreter for Fu-nctional Rules in a Query Optimizerhttp://www.vldb.org/conf/1988/P218.PDF
3
Extensible/Rule Based Query Rewrite Optimization in Starbursthttps://dl.acm.org/doi/10.1145/130283.130294
4
Extensible Query Processing in Starbursthttps://dl.acm.org/doi/abs/10.1145/67544.66962
5
A rule engine for query transformation in Starburst and IBM DB2 C/S DBMShttps://ieeexplore.ieee.org/document/581945



数据库优化器一般包括三个组件:plan枚举、搜索策略、代价模型。


基于动态规划的优化器》总体策略是如下图,自底向上枚举所有的plan,并计算代价。换句话说,但每个节点具体如何枚举出所有的plan,我们并没有展开详细介绍。


如果是进行硬编码的方式进行枚举的话,拓展性必定很差。如果数据库增加新的操作符、索引类型、数据类型等,优化器上都需要很大量的工作增加枚举策略。


而starburst是ibm创建的一个原型系统,现如今的DB2也是采用的类似策略。他主要采用函数式编程的思想,提出了一个grammar-like的规则,用于枚举节点。



grammar-like rules


starburst定义的grammar规则大体如下:

Starburst_java

Starburst_java_02

Starburst_java_03

Starburst_java_04

Starburst_java_05

Starburst_java_06

Starburst_java_07


我们看这一套规则,其实很类似语法分析yacc等工具的规则。不同的是,yacc是把语法规则的右侧归约成等式左侧的内容。而这里是把等式左侧的算子替换成右侧的算子。直到替换成都是基础物理算子为止,注意,会替换出很多种方案。


动态规划

starburst的规则,主要在动态规划的枚举时可以用到。如图椭圆框出的Join(Join(A1,A3),A2)可以枚举出多少种方案,这个是通过上述grammar-like的规则生成的。

Starburst_java_08





划重点:starburst是一种枚举规则,是对system r的动态规划的一种改进。优点是,可维护性更强。枚举不再是硬编码的形式,而是通过规则定制。

Starburst_java_09