Moara:灵活可扩展的基于组的查询系统解析
1. Moara查询优化基础
在Moara系统中,为了避免重复答案,节点会将属性值仅关联到其所在的一棵树,并通过记住查询ID(基于发送方IP和序列号)来实现这一点,这些信息在Moara实现中会被缓存5分钟。为进一步节省带宽,需要选择低成本覆盖集,具体有以下三种方式:
- 结构优化 :重写嵌套查询,选择由查询中已有的简单谓词组成的低成本结构覆盖集。
- 估计单棵树的查询成本 :每棵简单谓词树的根节点持续维护该树的查询成本。
- 语义优化 :考虑从用户或查询属性中获取的语义信息。
2. 查询优化:寻找低成本覆盖集
当面对复合查询时,Moara会首先使用与(and)和或(or)运算符的分配律将其转换为合取范式(CNF)表达式。CNF形式是由一系列或项组成的两级与表达式。在复合谓词的CNF形式中,每个或项系列都是一个可能的覆盖集。Moara会评估这些结构覆盖集的查询成本(即覆盖集中所有集合的查询成本之和),然后选择执行查询成本最低的覆盖集。
例如,对于查询 ((A or B) and (A or C)) or D
:
1. Moara将其转换为等价的CNF: (A or B or D) and (A or C or D)
。
2. 从两个结构覆盖集 {A, B, D}
和 {A, C, D}
中选择成本较低的一个。
下面