天天看點

雲計算設計模式(十四)——實體化視圖模式雲計算設計模式(十四)——實體化視圖模式

産生過在一個或多個資料存儲中的資料預填充的觀點時,資料被格式化以不利于所需的查詢操作的一種方式。這種模式可以幫助支援高效的查詢和提取資料,并提高應用程式的性能。

何時存儲資料時,優先級為開發者和資料管理者經常集中在如何将資料存儲,而不是它是如何讀出。所選擇的存儲格式通常是密切相關的資料,用于管理資料的大小和資料的完整性,并且在使用的那種存儲的要求的格式。例如,使用的NoSQL文獻商店時,該資料通常被表示為一系列的聚集體,其每一個包含了所有的資訊,該實體。

然而,這可能對查詢産生負面影響。當查詢需要從一些實體,如訂單的幾個客戶沒有所有的順序的資訊的彙總的資料的一個子集,它必須提取所有的相關實體的資料,以獲得所需的資訊。

以支援高效的查詢,一個常見的解決方案是生成,預先,即物化資料中最适合于所要求的結果集的格式的圖。其中源資料不是一個格式适合于查詢,在那裡産生一個合适的查詢中的實體化視圖模式描述産生資料的預先填充的觀點在環境中是困難的,或者其中的查詢性能差,由于該資料或該性質資料存儲區。

這些執行個體化視圖,其中隻包含一個查詢所需的資料,以便應用程式能夠快速獲得他們需要的資訊。除了連接配接表或組合的資料實體,物化視圖可以包括計算列或資料項的指定作為查詢的一部分的目前值,組合值或對資料項執行的轉換的結果,和值。物化視圖甚至可以就某一個單一的查詢優化。

關鍵的一點是,一個實體化視圖,它包含的資料完全是一次性的,因為它可以完全從源資料存儲重建。執行個體化視圖是不能直接更新的應用程式,是以它實際上是一個專門的緩存。

何時該視圖更改源資料,視圖必須被更新以包括新的資訊。這可以在适當的日程自動發生,或在系統檢測到變化到原始資料的時候。在其他情況下,可能需要手動重新生成視圖。

圖1示出如何實體化視圖圖案可能被使用的例子。

雲計算設計模式(十四)——實體化視圖模式雲計算設計模式(十四)——實體化視圖模式

圖1  - 實體化視圖模式

在決定如何實作這個模式時,請考慮以下幾點:

•考慮如何以及何時該視圖将被更新。理想的情況下,将被再生響應于一個事件,訓示改變到所述源資料,盡管在某些情況下,這可能導緻過度的開銷,如果源資料發生急劇的變化。或者,考慮使用計劃任務,外部觸發或手動操作來啟動該視圖的再生。

•在某些系統中,使用事件采購圖案保持僅修改的資料的事件存儲區時,例如,實體化視圖可能是必要的。通過檢查所有事件,以确定目前狀态預先填充的觀點可以得到從事件存儲資訊的唯一方式。在使用事件采購時比其它情況下,有必要測量的優點是物化視圖可以提供。物化視圖往往是專門針對一個或少數的查詢。如果許多查詢必須被使用,維護執行個體化視圖可能會導緻不可接受的存儲容量的要求和存儲成本。

•生成的視圖時,和更新視圖時,如果這發生在一個日程表考慮資料一緻性的影響。如果源資料發生了變化時,生成的視圖時的點,在該視圖中的資料的複制可能會與原來的資料完全一緻。

•考慮在那裡你将存儲的視圖。認為不必位于同一商店或分區的原始資料。它可能是從幾個不同的分區合并的一個子集。

•如果視圖是短暫的,僅僅是用來通過反映該資料的目前狀态來提高查詢性能,或提高擴充性,它可被存儲在高速緩存中或者在一個較不可靠的位置。它可以的,如果失去了重建。

•當定義一個實體化視圖中,在資料項或列的基礎上計算的或現有的資料項的轉換的視圖,在查詢傳遞的值,或者對這些值,其中,這是适當的組合發揮其最大價值。

•凡存儲機制支援它,考慮索引實體化視圖,以進一步提高性能。大多數關系型資料庫支援索引的意見,因為這樣做是基于Apache

Hadoop的大資料解決方案。

這種模式非常适合于:

•建立執行個體化視圖以上資料是難以直接查詢,或者查詢必須以提取存儲在歸一化,半結構化或非結構化的方式資料非常複雜。

•建立臨時視圖,可以顯着提高查詢性能,或可直接充當UI源視圖或資料傳輸對象(DTO的),進行報告,或進行顯示。

•支援偶爾連接配接或斷開連接配接的情況,其中連接配接到資料存儲并不總是可用的。該視圖可能在這種情況下被本地緩存。

•簡化查詢和在不需要源資料格式的知識的方式曝光資料用于實驗。例如,通過在一個或多個資料庫,或在NoSQL的存儲的一個或多個結構域結合不同的表,然後格式化的資料,以滿足它的最終用途。

•提供通路源資料的特定子集,出于安全或隐私原因,不應該是一般通路,公開進行修改,或者完全暴露給使用者。

•使用基于他們的個人能力不同的資料存儲在彌合脫節。例如,通過使用雲存儲中是有效率的用于寫入作為基準資料存儲,并能提供良好的查詢和讀取性能保持執行個體化視圖的關系資料庫。

這種模式可能不适合于下列情況:

•源資料簡單,便于查詢。

•源資料非常迅速的變化,或者可以在不使用視圖來通路。中建立視圖處理開銷可能會避免在這些情況下。

•一緻性是一個高優先級。的意見可能并不總是與原始資料完全一緻。

圖2示出了使用實體化視圖模式的一個例子。在訂單,訂單項資料,并在微軟的Azure存儲帳戶單獨的分區表的客戶相結合,生成包含在電子類别中的每個産品銷售總額的視圖,客戶是誰的采購數量的計數在一起每個項目。

雲計算設計模式(十四)——實體化視圖模式雲計算設計模式(十四)——實體化視圖模式

圖2 - 使用實體化視圖模式産生銷售的總結

建立這個執行個體化視圖需要複雜的查詢。然而,通過将查詢結果作為實體化視圖,使用者可以輕松獲得的結果和直接使用它們,或将其納入另一個查詢。觀點很可能在一個報告系統或儀表闆中使用,是以可以更新計劃的基礎上,如每周一次。

注意:

雖然這個例子使用的Azure表存儲,許多關系資料庫管理系統還提供了執行個體化視圖的原生支援。