需要幫助為我們的案例和伺服器硬體限制確定最佳 MariaDB 儲存引擎
我在一家小公司工作,我們需要一個數據倉庫。
我們的生產數據庫有大約 50Gb 的數據(目前增長約 10GB/年),我們的伺服器執行的有點超出它的容量,我們認為我們可以將一些歷史數據移動到數據倉庫(這 50gb 中的大約一半可以移動) 所以它可以再次順利執行。
當然,數據倉庫將擁有所有經過 ETL 處理的數據,而不僅僅是歷史數據。通過這種方式,我們還可以從 DW 而不是生產伺服器中獲取那些昂貴的報告和儀表板數據。
我打算將數據 ETL 到 DW 並使用雪花方案儲存它,然後我計劃創建一些用於報告和 BI 的數據集市。該數據集市將使用星型模式創建,以使查詢更簡單(更快?)。
我們傾向於使用 MariaDB,這讓我想到了我的主要問題,即哪種儲存引擎最適合我們的案例,innoDB 或 ColumnStore。以及這個決定會對執行它的伺服器的尺寸產生多大影響。
根據我目前所讀到的內容,我的猜測是 ColumnStore 可以更快、更適合我們的案例,但也需要更好的硬體。目前,我們買不起一台具有 4 個 CPU 核心和 32Gb 記憶體的伺服器(我們的業務受到全球大流行的嚴重影響。我們正在重新站起來,但我們還沒有站穩腳跟)。
那麼,鑑於上述伺服器規格和案例,您是否仍然建議使用 ColumnStore 而不是 innoDB?我們甚至對 MariaDB 以外的解決方案持開放態度。
引擎:InnoDB。時期。(當然,有 1% 的案例用其他東西會更好,但你的案例似乎並不表示需要不同的引擎。)
雪花:太糟糕了,尤其是當您需要在“範圍”上進行搜尋時。請提供架構(最好通過
SHOW CREATE TABLE
);我會更具體。(那我可能同意 Snowflake 很好,但我對此表示懷疑。)星型模式——好。規範化常見字元串:好。規範化“連續”值(日期、整數、浮點數):不好。但目的是節省磁碟空間,從而加快一些查詢。
10GB/年——這聽起來像是平均每秒“幾”行。重,但不是特別重。也就是說,ETL 處理聽起來不像您需要幫助。
數據倉庫——http: //mysql.rjweb.org/doc.php/datawarehouse
清除舊數據 - 這是
PARTITIONing
. http://mysql.rjweb.org/doc.php/partitionmaint拆分成單獨的表格並保持線上 - 可能很麻煩,但幾乎沒有什麼好處。
昂貴的報告 –> 匯總表 http://mysql.rjweb.org/doc.php/summarytables 匯總表比事實表小得多;非規範化甚至是可以接受的。
列儲存——一大優點是它提供的顯著壓縮。但我不認為你的 50GB 很大。CS 的另一個好處是每列的自動“索引”。但是,對於查找的兩級效率,只能使用一列。
4 核——對於 InnoDB 來說足夠了;更多的核心將對 CS 有用。
32GB 記憶體——只有 50GB 的數據和 10GB/年——如果你只看最近一年的數據,32GB 綽綽有餘。如果你經常掃描所有 50GB,那麼就會有很多 I/O。如果您實施匯總表,那麼 32GB 對於大多數活動來說都是多餘的。(匯總表可能小於 10GB 並返回到數據的開頭;因此非常可記憶體。)
32GB + CS – 你的 50GB 將變成大約 5GB。(但我不知道 32 是否會矯枉過正。)
HDD 與 SSD——SSD 明顯更快。
底線(和預算)——上面提到的技術可以讓 InnoDB 在 32GB 上執行幾年。