基本算法
在1中我们提到了一个物化视图更新的基本框架,就是根据change propogation function来推导出视图的更新。2中给出了在这个框架下更新aggregation的算法:
并且推导出了一个满足strong minimality的更新算法:
这里有我们假设一定包含有count这个聚合函数,如果没有则添加一个。其中使用到的一些符号如下:
: semi join
: group by的attributes
Aggregation Change Table的优化
上面提到的方法虽然比较通用,但是在某些条件下还是会产生不必要的查询或者状态的维护。3中提出了一个基于change table的优化方法。我们先以如下的例子来举例:
CREATE VIEW SISales AS
SELECT storeID, itemID, sum(price) AS SumSISales, count(∗) AS NumSISales FROM sales
WHERE date > 1/1/95
GROUP BY storeID, itemID;
CREATE MATERIALIZED VIEW CitySales AS
SELECT city, sum(SumSISales) AS SumCiSales, sum(NumSISales) AS NumCiSales FROM SISales, stores
WHERE SISales.storeID = stores.storeID
GROUP BY city;
CREATE MATERIALIZED VIEW CategorySales AS
SELECT category, sum(SumSISales) AS SumCaSales, sum(NumSISales) AS NumCaSales FROM SISales, items
WHERE SISales.itemID = items.itemID
GROUP BY category;
上面的图示view的关系可以用下图来表示:
如上面的SQL所示,当sales这个表有数据插入时,如果我们按照2中提到的方法,变更只能是Insert/Deletion的话,那么更新过程如下所示:
可以看出,为了产生SIsales
的更新,我们需要重新查下sales
表,或者维护一个SIsales
的物化视图。这2种都会产生一定的代价,要么增加维护时的查询成本,要么会增加存储成本。
3中提到了一种Change Table
的方法,即我们的变更不仅包含Insert
和Delete
,还可以增加一种Change Table
,这样能在某些情况下减少查询。如上面的例子如果使用Change Table
则可以减少掉中间aggregation的查询操作。
一些定义
Aggregation Change Table
并不是在所有情况下都能产生的,而是需要通过一个aggregation才能产生出来。我们假设是一个定义在某个上的aggregation,这个aggregation用来表示,其中表示的view。当产生Insert/Deletion的时候,所产生的Aggregation Change Table
如下:
其中根据aggregation算法的不同定义如下:
而的更新算法如下:
其中我们把称为refresh operator
。其中是两个join条件,是一系列的update函数,其中每个是和中对应属性的函数。refresh
算子算法如下:
- 当中某个tuple与中因为匹配上时,我们按照来更新
- 当中某个tuple与中因为匹配上时,删除此tuple
- 否则新增此tuple
并且我们定义,定义某个表达式的属性集,比如表示中的所有属性。
我们以上一段中的CategorySales表为例,来展示一下上述一些定义:
Aggregate-refresh operator
是refresh operator
的一种特例,是如果一个refresh operator
满足如下条件则可以成为aggregate-refresh operator
:
- 可以分别表示为:
Change Propogation
有了上面的定义之后,我们可以根据2中的框架得到下图中的change propogation公式。
3中对上述公式给予了证明:当第3列是aggregation refresh operator
的时候,上述公式成立且第四列也是aggregation refresh operator
。
上表中我们看到并不是所有的关系代数运算符都被包含了进去,所以当不支持的关系代数运算符存在时,我们退回到2中提到的原始框架即可。
参考文献
- 物化视图更新算法(一):基础框架
- Quass, Dallan. "Maintenance expressions for views with aggregation." (1996).
- Gupta, Himanshu, and Inderpal Singh Mumick. "Incremental maintenance of aggregate and outerjoin expressions." Information Systems 31.6 (2006): 435-464.