需要帮助决定最适合我们的用例和服务器硬件限制的 MariaDB 存储引擎

需要帮助决定最适合我们的用例和服务器硬件限制的 MariaDB 存储引擎

我在一家小公司工作,我们需要一个数据仓库。

我们的生产数据库大约有 50Gb 的数据(目前每年增长约 10GB),我们的服务器运行略微超出其容量,我们认为我们可以将一些历史数据移动到数据仓库(其中大约一半的 50GB 可以移动)这样它就可以再次顺利运行。

当然,数据仓库会将所有数据 ETL 到其中,而不仅仅是历史数据。这样,我们还可以从 DW 而不是生产服务器获取那些昂贵的报告和仪表板数据。

我打算将数据 ETL 到 DW 并使用雪花方案进行存储,之后我计划创建一些数据集市用于报告和 BI。这些数据集市将使用星型模式创建,以使查询更简单(更快?)。

我们倾向于使用 MariaDB,这让我想到我的主要问题,即哪种存储引擎最适合我们的情况,innoDB 还是 ColumnStore。以及这个决定会对运行它的服务器的规模产生多大影响。

从我目前读到的内容来看,我的猜测是 ColumnStore 可以更快、更适合我们的用例,但也需要更好的硬件。目前,我们负担不起一台具有 4 个 CPU 核心和 32GB RAM 的服务器(我们的业务受到了全球疫情的严重影响。我们正在恢复,但还没有恢复)。

那么,考虑到上述服务器规格和用例,您仍建议使用 ColumnStore 而不是 innoDB 吗?我们甚至对 MariaDB 以外的解决方案持开放态度。

答案1

引擎:InnoDB。就是这样。(当然,1% 的用例最好使用其他引擎,但您的用例似乎并未表明需要不同的引擎。)

Snowflake:太糟糕了,尤其是当你需要在“范围”内搜索时。请提供架构(最好通过SHOW CREATE TABLE);我会更具体。(那么我可能会同意 Snowflake 很好,但我对此表示怀疑。)

星型模式 - 好。规范化常见字符串:好。规范化“连续”值(日期、整数、浮点数):不好。但目的是节省磁盘空间,从而加快某些查询的速度。

10GB/年——听起来平均每秒“几”行。很繁重,但不是特别繁重。也就是说,ETL 处理听起来不需要帮助。

数据仓库--http://mysql.rjweb.org/doc.php/datawarehouse

清除旧数据--这是少数用途之一PARTITIONinghttp://mysql.rjweb.org/doc.php/partitionmaint

拆分成在线保存的单独表格——可能会很麻烦,但好处却很少。

昂贵的报告 --> 摘要表 http://mysql.rjweb.org/doc.php/summarytables 汇总表比事实表小得多;甚至可以接受非规范化。

列存储——一大优点是它提供了显著的压缩。但我认为你的 50GB 不算很大。CS 的另一个好处是自动“索引”每一列。但是,对于两级查找效率,只能使用一列。

4 个核心 —— 对于 InnoDB 来说已经足够了;对于 CS 来说,更多核心会更有用。

32GB RAM — 数据量只有 50GB,每年 10GB — 如果您所做的只是查看最新一年的数据,那么 32GB 就足够了。如果您经常扫描所有 50GB,那么 I/O 就会很多。如果您实施汇总表,那么 32GB 对于大多数活动来说都是多余的。(汇总表可能小于 10GB,并返回到数据的开头;因此非常易于缓存。)

32GB + CS——您的 50GB 将变成约 5GB。(但我不知道 32 是否会过大。)

HDD 与 SSD——SSD 明显速度更快。

底线(和预算)——上面提到的技术可以让 32GB 上的 InnoDB 正常运行几年。

相关内容