2010年4月23日 星期五

Materialized views 具現視觀表

最近在PostgreSQL主站上,看到Robert Hass談到Robert Hass談到Materialized views,這實在是一個很有趣的題目。


首先,我先解釋一下,什麼是具現視觀表 Materialized views,由原文來看實在很難了解它是什麼東東,不過如果對開發過資料倉儲Data WareHouse的人來說,具現視觀表就十分熟悉了。


舉個例子來說,如果我們手上有某店舖每天的各種商品的銷售營業額資料,如果我們現在希望有該店舖每周、每月、每季、每年的銷售營業額資料,那該怎麼辦?


---+--------+--------+--------
PK  營業日      商品種類     日銷售額
---+--------+--------+--------
1   2010-01-01 A        100
2   2010-01-01 B        200
3   2010-01-02 A        121
4   2010-01-02 B        210 



最直接的想法就是,我就根據這張表,搭配另一張時間的資料表,
---+-----+--------+--------+
PK  營業日  week of year        month of year
---+-----+--------+--------+
 1  2010-01-01 W1 1
為每周、每月、每季、每年,各做一個視觀表view出來就可以了嘛

在資料倉儲的應用中,這些視觀表會被非常頻繁地查詢,因此,最合理的做法是,把視觀表的結果,以資料表的形式,直接放在資料庫中,不要每次查詢時,就去執行一次視觀表的查詢指令,動態產生視觀表。查詢這種視觀表,就直接查詢已統計完成的資料表即可。


因此,這種被產生出來的視觀表,它就和傳統的視觀表有了差別,它不是動態產生的,它是基礎資料統計的結果,是被具體實現後的視觀表因此,我稱它叫具現視觀表


我們可以想見,具現視觀表的實作,會有許多的問題,比如說,如果基礎資料有變動,那依據它產生的一系列具現視觀表,就需要全部重新更新,效能的問題要如何克服?


我們可以說,沒有具現視觀表,PostgreSQL在資料倉儲的應用上,就會受到了阻礙,因此在Peter Eisentraut的調查中,具現視觀表,就變成PostgreSQL 9中,大家最想要的功能。

沒有留言:

張貼留言