1

我正在開發一個報告作爲其業務大部分的交易平臺。數據庫(OLTP)和報告

設置如下: SQL OLTP數據庫(大約200個表) - 記錄數量相當少。 (20,000記錄最大的表 - 但每週保持增長) 對於報告服務,正在使用SQL視圖查詢實時事務數據庫。按照數據倉庫方法的精神,將這些視圖的結果集設想爲非規範化視圖。然後將這些數據集傳遞給第三方報表平臺(如Tableau,Power Bi或SiSense),這些平臺將這些數據集引入多維數據集(可能是一些柱狀結構,如mono db,hadoop等)。從那裏報告正在生成。

當前的挑戰。 SQL視圖(約8)。龐大而且很難維護。舉個例子,其中一個視圖輸出100個字段。但是,這些字段中的每一個都是帶有複雜CASE語句的計算字段,嵌套的IF語句,內聯函數以及哪些不是,這使得該視圖與700行SQL代碼一樣大。我從花葯員工那裏繼承了這些,現在,黯然,我必須維護他們。 由於數據每週增長數百條記錄(通過遷移和交易),並且視圖中的字段數量也在增加(每週幾次),因此建立立方體需要的時間越來越長。舉個例子,幾個月前我們設立了10分鐘的立方體刷新數據(這需要5分鐘)。目前需要12-15分鐘才能建成,所以我們每30分鐘設置一次。正如你可以想象的那樣,隨着數據和領域數量的不斷增長,情況會變得更糟。我們需要儘可能多的數據。

唯一的好處是,一旦建立了多維數據集,報表就會加載得很快,因爲它們正在從第三方平臺拉出來,所以這裏沒有關注。

我心目中 我想擺脫的意見,這樣我就可以緩解maintenanace的過程,也能夠以最低的立方體重新構建的持續時間。

選項:

  1. 建立一個數據倉庫。然後構建SSIS包以使用實時事務數據填充此結構。非正常化的結構可能看起來與上述觀點非常相似。這裏的缺點是,我並不覺得我簡化了很多,實際上增加了一層,即從OLTP到OLAP(數據倉庫)的數據遷移。而且我仍然需要重新構建多維數據集。
  2. 要將當前視圖轉換爲SQL索引視圖(物化視圖),但在當前狀態下,我無法完成此操作,因爲在整個視圖中使用了很多聚合和內聯函數。
  3. 另一個選項是建立一個ODS(操作數據存儲 - 這將是一個數據庫,它將包含必要的表,類似於我現在的sql視圖 - 並且不斷刷新它)也許使用觸發器或Transaction日誌?但我不確定什麼涉及到建立這樣的事情,以及維護的難度。

問題: 我應該採取什麼辦法? 做到以上三點有什麼意義嗎? 當然,我也對其他想法或建議感興趣。

謝謝!

回答

0

從我的經驗來看,你最好的做法是1.它是昂貴的,但會給你更多的好處。如果你有機會使用列式數據存儲(如amazon redshift或sap sybase iq)和所有case語句,嵌套ifs,創建一個ROLAP DWH(我建議Kimball的「數據倉庫工具包」用於最佳實踐和設計模式)並且您提到的所有操作都將應用於ETL時間,因此在ROLAP中,所有操作都會預先計算並優化爲消耗。並且不要忘記aplying索引(取決於您使用的依賴技術)。有些數據庫供應商已經發布了ROLAP的「索引最佳實踐」,因此他們會告訴您哪種類型的索引適用於(例如)表的類型(維度)和數據類型。

+0

Hi Luis Leal。謝謝您的回覆。 是的,數字1是我的第一選擇,但是目前數據每30分鐘通過SiSense中的立方體刷新,我們希望保持相同,不超過30分鐘。因此,通過構建數據倉庫,意味着我將通過另一層增加複雜性 - 這是ETL,這會延長數據刷新的時間。 – Alin

+0

因此,現在不是一個進程,而是通過直接從Live進行抽取的SQL Views,它將包含必要的邏輯(所有這些case語句),這些邏輯將把數據表單直接導入DW。然後SiSense立方體仍然需要從這些數據倉庫表中抽取它。此外,他們不斷改變如何通過case語句來拉取這些字段的邏輯,我想知道是否維護不會更糟,在SSIS中執行,而不是SQL視圖。所以,我仍然困惑什麼是最好的方法。 :) – Alin