Database

需要幫助為我們的案例和伺服器硬體限制確定最佳 MariaDB 儲存引擎

  • October 8, 2021

我在一家小公司工作,我們需要一個數據倉庫。

我們的生產數據庫有大約 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 上執行幾年。

引用自:https://serverfault.com/questions/1079987