§ 存储引擎选择


本节介绍在 GreatSQL 中如何根据不同业务场景选择相应的存储引擎。

§ 常见存储引擎

在 GreatSQL 中,支持常见的 InnoDB、MyISAM、ARCHIVE 等存储引擎,可执行下面的命令查看所有支持的所有引擎:

greatsql> show engines;
+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                                    | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+
| ndbcluster         | NO      | Clustered, fault-tolerant tables                                           | NULL         | NULL | NULL       |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears)             | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                                         | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Percona-XtraDB, Supports transactions, row-level locking, and foreign keys | YES          | YES  | YES        |
| FEDERATED          | NO      | Federated MySQL storage engine                                             | NULL         | NULL | NULL       |
| dlk                | YES     | datalink storage engine                                                    | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables                  | NO           | NO   | NO         |
| Rapid              | YES     | Rapid storage engine                                                       | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                                      | NO           | NO   | NO         |
| ndbinfo            | NO      | MySQL Cluster system information storage engine                            | NULL         | NULL | NULL       |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                                      | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                                         | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                                     | NO           | NO   | NO         |
+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

这其中,Rapid 引擎是在 GreatSQL 8.0.32-25 版本以后才支持。

此外,由于在 GreatSQL 中进行了 MGR 优化,部分代码和 RocksDB 引擎有冲突,因此在默认启用 MGR 的时候就得关闭 RocksDB 引擎。在需要 RocksDB 引擎但不需要 MGR 的场景下,可以参考文档 编译GreatSQL with RocksDB引擎 (opens new window) 自行编译以支持RocksDB引擎。

§ 存储引擎选择

通常来说,InnoDB 存储引擎足以满足大多数业务场景。针对特殊的的业务场景或特点,就需要选择使用不同的存储引擎以更好地适配。

  • OLTP 业务

毫无疑问,在 OLTP 类业务场景中选择 InnoDB 引擎最合适。在应用业务开发中涉及到 Schema 设计时,注意遵循文档 Schema 设计优化 中提到的优化原则;此外,在进行 SQL 开发时,也要注意遵循文档 SQL 开发优化 中提到的优化原则。先做好这些基本功,把基础的优化工作先做到位,就可以规避很多常见的性能瓶颈风险点。

  • OLAP 场景

在 OLAP 场景中,推荐选用 Rapid 引擎,该引擎在 GreatSQL 8.0.32-25 版本中开始引入,在 TPC-H 测试中性能表现非常优异,测试报告详见:GreatSQL TPC-H 性能测试报告

Rapid 引擎适用于以读多写很少的业务场景,尤其适用于非实时业务分析的场景。更多关于 Rapid 引擎的内容详见:Rapid 引擎

  • HTAP 场景

如果业务系统中既有高并发 DML 请求,又需要进行实时业务分析,这种就是 HTAP 场景了,可以采用主从复制或 MGR 架构,在主节点响应读写请求,在从节点响应只读和分析请求。

从 GreatSQL 8.0.32-26 版本开始,即将推出 dplan 功能,就特别适合用在 HTAP 场景,也可以关注下。

  • 其他场景

如果需要定时大批量导入数据,可以使用 并行 LOAD DATA 特性,加入数据导入效率。

也可以考虑利用 MyISAM 存储引擎表作为过渡,即执行 LOAD DATA 把数据导入到 MyISAM 表,而后再执行 INSERT ... SELECT 将数据加载到 InnoDB 引擎表中。

greatsql-wx