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