Mysql
數據倉庫:一台伺服器上的暫存區、DWH 數據庫和 ETL 工具?
我正在考慮 DWH 伺服器佈局,我想問您是否可以發現此佈局的任何缺點。基本思想是讓 Staging Area & Data Warehouse DBs 和 ETL Tool 用於從 stg 到 dwh 的轉換在一台機器上執行,因為降低了硬體成本和管理工作量:
- sda:512 GB SDD -> OS (Centos 7)、應用程序、交換空間、MySQL 數據庫應用程序(但沒有數據)、來自數據源的 csv 文件、ETL 工具(Pentaho)
- sdb:960 GB SDD -> 用於暫存區表的 MySQL 表空間
- sdc:960 GB SDD -> 用於數據倉庫表的 MySQL 表空間
- sdd:4 TB HDD -> 備份和存檔磁碟
- 記憶體:160 GB
- 處理器:2x Intel Xeon E5-2620v3 - 12 核
任務:
- 在stg載入期間:從csv載入數據到stg
- 在轉換期間:Pentaho 將從 stg 和 INSERT SELECT 到 dwh 並行處理多個表。我認為將 stg 和 dwh 放在不同的磁碟上可以避免讀/寫瓶頸
- 工作時間:報告工具或分析師在 dwh 上做 SELECT
從您的觀點或經驗來看,我有什麼理由不使用這種佈局,而是像過去那樣在兩個不同的伺服器上拆分 stg 和 dwh?(例如 MySQL 性能可能會受到並行 SELECT 和 INSERT 等的影響)
感謝您的回饋意見!
您的“一個籃子裡的所有雞蛋”情景似乎已經成熟,可能會產生意想不到的後果。我嘗試解耦程序,這樣執行異常的東西就不會對整個 DW 架構的其他部分產生負面影響。使用單獨的磁碟絕對是一種很好的做法,甚至是拆分,請記住,記憶體和 CPU 限制同樣重要。
這是我在像你這樣的設計中看到的一個場景—-
一個 sql 計劃發生變化(由於數據量或質量變化),第二天早上你回來並意識到 ETL 仍在進行,額外的 CPU 和記憶體消耗正在影響查詢性能。這使您處於令人不快的境地,您想知道它是否足夠遠來完成載入,或者您應該終止它並稍後再進行載入(可能有更多數據)以讓使用者獲取他們的數據。
解耦您的一些架構使您可以自由地重新查看暫存數據以查看問題、執行驗證檢查,最重要的是,您可以在工作日靈活地進行故障排除,而無需擔心共享資源。
無論如何,如果您確實決定通過單箱路線執行(我強烈建議您反對),請考慮:
- 確保正確的表使用正確的引擎來滿足適當的要求
- CPU 限制某些程序,使它們不會餓死伺服器
- 確保正確設置警報和通知,以便您跟踪錯誤、完成和長時間執行的流程
- 測試,測試,然後……測試。使用不同的數據大小進行測試。用各種數據進行測試。並通過模擬記憶體壓力等問題進行測試。
不言而喻,我所說的是一些最佳實踐建議和我個人經驗的結合。您應該考慮您的業務需求及其風險承受能力。即:在某些行業中,擁有一個載入前一天數據的數據倉庫是一項非常關鍵的要求。在其他情況下,僅能夠訪問數據倉庫是最關鍵的要求。