首先,我先解釋一下,什麼是具現視觀表 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
---+-----+--------+--------+PK 營業日 week of year month of year
1 2010-01-01 W1 1
為每周、每月、每季、每年,各做一個視觀表view出來就可以了嘛
在資料倉儲的應用中,這些視觀表會被非常頻繁地查詢,因此,最合理的做法是,把視觀表的結果,以資料表的形式,直接放在資料庫中,不要每次查詢時,就去執行一次視觀表的查詢指令,動態產生視觀表。查詢這種視觀表,就直接查詢已統計完成的資料表即可。
因此,這種被產生出來的視觀表,它就和傳統的視觀表有了差別,它不是動態產生的,它是基礎資料統計的結果,是被具體實現後的視觀表,因此,我稱它叫具現視觀表。
我們可以想見,具現視觀表的實作,會有許多的問題,比如說,如果基礎資料有變動,那依據它產生的一系列具現視觀表,就需要全部重新更新,效能的問題要如何克服?
我們可以說,沒有具現視觀表,PostgreSQL在資料倉儲的應用上,就會受到了阻礙,因此在Peter Eisentraut的調查中,具現視觀表,就變成PostgreSQL 9中,大家最想要的功能。
沒有留言:
張貼留言