產(chǎn)生過在一個或多個數(shù)據(jù)存儲中的數(shù)據(jù)預(yù)填充的觀點時,數(shù)據(jù)被格式化以不利于所需的查詢操作的一種方式。這種模式可以幫助支持高效的查詢和提取數(shù)據(jù),并提高應(yīng)用程序的性能。
何時存儲數(shù)據(jù)時,優(yōu)先級為開發(fā)者和數(shù)據(jù)管理員經(jīng)常集中在如何將數(shù)據(jù)存儲,而不是它是如何讀出。所選擇的存儲格式通常是密切相關(guān)的數(shù)據(jù),用于管理數(shù)據(jù)的大小和數(shù)據(jù)的完整性,并且在使用的那種存儲的要求的格式。例如,使用的 NoSQL 文獻商店時,該數(shù)據(jù)通常被表示為一系列的聚集體,其每一個包含了所有的信息,該實體。
然而,這可能對查詢產(chǎn)生負(fù)面影響。當(dāng)查詢需要從一些實體,如訂單的幾個客戶沒有所有的順序的信息的匯總的數(shù)據(jù)的一個子集,它必須提取所有的相關(guān)實體的數(shù)據(jù),以獲得所需的信息。
以支持高效的查詢,一個常見的解決方案是生成,預(yù)先,即物化數(shù)據(jù)中最適合于所要求的結(jié)果集的格式的圖。其中源數(shù)據(jù)不是一個格式適合于查詢,在那里產(chǎn)生一個合適的查詢中的實體化視圖模式描述產(chǎn)生數(shù)據(jù)的預(yù)先填充的觀點在環(huán)境中是困難的,或者其中的查詢性能差,由于該數(shù)據(jù)或該性質(zhì)數(shù)據(jù)存儲區(qū)。
這些實例化視圖,其中只包含一個查詢所需的數(shù)據(jù),以便應(yīng)用程序能夠快速獲得他們需要的信息。除了連接表或組合的數(shù)據(jù)實體,物化視圖可以包括計算列或數(shù)據(jù)項的指定作為查詢的一部分的當(dāng)前值,組合值或?qū)?shù)據(jù)項執(zhí)行的轉(zhuǎn)換的結(jié)果,和值。物化視圖甚至可以就某一個單一的查詢優(yōu)化。
關(guān)鍵的一點是,一個實體化視圖,它包含的數(shù)據(jù)完全是一次性的,因為它可以完全從源數(shù)據(jù)存儲重建。實例化視圖是不能直接更新的應(yīng)用程序,因此它實際上是一個專門的緩存。
何時該視圖更改源數(shù)據(jù),視圖必須被更新以包括新的信息。這可以在適當(dāng)?shù)娜粘套詣影l(fā)生,或在系統(tǒng)檢測到變化到原始數(shù)據(jù)的時候。在其他情況下,可能需要手動重新生成視圖。
圖1示出如何實體化視圖圖案可能被使用的例子。
http://wiki.jikexueyuan.com/project/cloud-design-patterns/images/mvm.png" alt="" />
圖1 - 實體化視圖模式
在決定如何實現(xiàn)這個模式時,請考慮以下幾點:
這種模式非常適合于:
這種模式可能不適合于下列情況:
圖2示出了使用實體化視圖模式的一個例子。在訂單,訂單項數(shù)據(jù),并在微軟的Azure存儲帳戶單獨的分區(qū)表的客戶相結(jié)合,生成包含在電子類別中的每個產(chǎn)品銷售總額的視圖,客戶是誰的采購數(shù)量的計數(shù)在一起每個項目。
http://wiki.jikexueyuan.com/project/cloud-design-patterns/images/mvm1.png" alt="" />
圖2 - 使用實體化視圖模式產(chǎn)生銷售的總結(jié)
創(chuàng)建這個實例化視圖需要復(fù)雜的查詢。然而,通過將查詢結(jié)果作為實體化視圖,用戶可以輕松獲得的結(jié)果和直接使用它們,或?qū)⑵浼{入另一個查詢。觀點很可能在一個報告系統(tǒng)或儀表板中使用,所以可以更新計劃的基礎(chǔ)上,如每周一次。
注意: 雖然這個例子使用的 Azure 表存儲,許多關(guān)系數(shù)據(jù)庫管理系統(tǒng)還提供了實例化視圖的原生支持。