報告資料庫

2014 年 4 月 2 日

大多數 企業應用程式 會使用資料庫儲存持續性資料。此資料庫支援應用程式狀態的作業更新,以及用於決策支援和分析的各種報表。然而,作業需求和報告需求通常大不相同,對架構和資料存取模式有不同的需求。發生這種情況時,通常明智的做法是將報告需求分隔到報告資料庫中,該資料庫會複製作業資料的基本資料,但以不同的架構表示。

此類報告資料庫與作業資料庫是完全不同的資料庫。它可能是完全不同的資料庫產品,使用 多語持久性。它應該針對報告需求進行設計。

報告資料庫有許多優點

  • 報告資料庫的結構可以專門設計,以簡化撰寫報表的難度。
  • 您不需要正規化報告資料庫,因為它是唯讀的。盡量重複資料,以簡化查詢和報告。
  • 開發團隊可以重構作業資料庫,而不需要變更報告資料庫。
  • 針對報告資料庫執行的查詢不會增加作業資料庫的負載。
  • 您可以在資料庫中儲存衍生資料,讓撰寫使用衍生資料的報表變得更容易,而不需要引入一組獨立的衍生邏輯。
  • 您可以針對不同的報告需求擁有多個報告資料庫。

報告資料庫的缺點是其資料必須保持最新。最簡單的情況是您執行類似於使用過夜執行來填入報告資料庫的動作。這通常運作得很好,因為許多報告需求使用昨天的資料就能運作得很好。如果您需要更及時的資料,可以使用訊息系統,以便將對作業資料庫的任何變更轉發到報告資料庫。這比較複雜,但資料可以保持更新。通常大多數報告可以使用稍舊的資料,您可以針對真正需要即時資料的事項產生特殊案例報告 [1]

這方面的變異是使用檢視。這封裝了運作資料,並允許您反正規化。為了將運作負載與報告負載分開,您需要將檢視複製到其他節點以進行讀取。主要的限制是從記憶體中程式設計環境取得的資料衍生靈活性較低。

當您在網域模型或其他記憶體中程式碼中擁有大量的網域邏輯時,報告資料庫非常合適。網域邏輯可用於處理運作資料的更新,但也可用於計算衍生資料以豐富報告資料庫。

備註

1: 這些天來,似乎希望進行近乎即時的分析。我懷疑這項價值。在分析資料趨勢時,通常不需要立即做出反應,而且當您花時間適當地思考時,您的思考會有所改善。反應過快會導致一種資訊恐慌,您對資料的反應不佳,因為資料變動得太快,無法適當地了解正在發生的事情。

修訂

2004-04-02:原始出版

2014-04-02:一般更新

2018-03-27:調整檢視段落以指出複製檢視資料的能力(感謝 Matthias Hjalmarsson 的協助)。