MariaDB存储引擎简介
存储引擎简述
- 简单说来,存储引擎是数据库管理系统用来从数据库创建、读取、更新数据的软件模块。
- 负责提供数据实体储存的算法
- 提供数据文件与索引档案的管理
- MariaDB 采用 Plugin 方式动态加载/卸载 引擎模块
- 可透过外部安装的方式添加新的 Storage Engine
查询指令:
查看所有的已启用的存储引擎:show engines;
查询预设引擎:select @@global.storage_engine;
查看所有的已启用的存储引擎
简单介绍几个 MariaDB 的存储引擎
11、InnoDB/XtraDB、InnoDB/XtraDB
- XtraDB 属于 InnoDB 分支( Percona 负责维护),针对“效能与监控”进行强化,兼容 InnoDB 引擎。MariaDB 10.1 采用 (MariaDB 10.1),但在 MariaDB 10.2 回归 MySQL InnoDB 。
- 支持 Trasaction/Savepoints 以及 XA Transaction。
- 现代 IoT/BigData: 大量数据与快速写入上出现瓶颈。
22、MyISAMMyISAM
- MySQL/MariaDB 最早的预设引擎
- 轻量化设计不支持交易(Trasaction)处理
- 适合 read-heavy workload
- 无事务无日志,因此档案容易因其它因素而损毁
- 过渡时期的 Big Data 处理方式
33、Aria、Aria
- 原名 Maria,MariaDB 5.1 导入
- MariaDB 10.4 后 System Tables 全面改用 Aria
- Crash Safe ,采用 log 进行 数据还原(data recovery)
- 采用 page 提供更快速 不易产生 Fragment 的储存算法
- 建议改用 Aria 取代 MyISAM
44、TokuDB、TokuDB
- 由 Tokutek 负责开发,MariaDB 5.5 纳入此引擎模块
- 支持数据压缩(data compression)
- 支持大型数据处理,速度快于 InnoDB
- 适合高效能与写密集型(write-intensive) 需求的应用环境
55、MyRocks、MyRocks
- Facebook 所发展的数据储存技术
- MyRocks 是将 RocksDB 数据库添加到 MariaDB 的存储引擎。RocksDB 是一个 LSM 数据库,具有很大的压缩率,已针对闪存进行了优化
- 提供高效能的压缩与 I/O 效能
- 降低数据空间需求
66、Connect、Connect
- MariaDB 10.0 导入,透过 Connect Plugin 让 MariaDB 连接不同的数据来源, 提供外部数据(MED: Management External Data)给 MariaDB Client
- 标准规范: SQL/MED
- 提供多种类型的数据连接服务
- 定义 Wrapper Table 提供 Client 存取
按用途选择存储引擎
MariaDB 有几十种存储引擎,但并不一定都是最佳。官网有简单针对各种用于,建议使用不同的引擎。大概如下:
一一般用途:般用途:
- 在 MariaDB 10.1 之前,XtraDB 是大多数情况下的最佳选择。它是 InnoDB 增强性能的分支,并且是 MariaDB 10.1 之前的默认引擎。
- InnoDB 是一个很好的常规事务存储引擎。它是 MariaDB 10.2(以及 MySQL)的默认存储引擎。对于早期版本,XtraDB 是 InnoDB 的性能增强分支,通常是首选。
- Aria 是 MariaDB 基于 MyISAM 上的更加现代改进,占用空间小,并且让系统之间相互复制很简单。
- MyISAM 占用空间小,也可轻松在系统之间进行复制。MyISAM 是 MySQL 最古老的存储引擎。但是除了解决遗留问题用途,通常没有其它理由使用它。Aria 是 MariaDB 的更现代改进。
缩放,分区
(Scaling, Partitioning):缩放,分区
如果想要拆分数据库并加载在几个服务器上,或者优化缩放,建议使用 Galera(一个同步多主集群)。
- TokuDB 是一个事务性存储引擎,它针对不适合内存的工作负载进行了优化,并提供了良好的压缩比。
- Spider 使用分区(partitioning)通过多个服务器提供数据分片(data sharding)。
- ColumnStore 采用大规模并行分布式数据体系结构,专为大数据扩展而设计,可处理 PB 级别的数据。
- MERGE 存储引擎是一个相同 MyISAM 表的集合,所有表具有相同的列和索引信息。
连接到其它数据源接到其它数据源
如果要使用的数据没有存放到 MariaDB 数据库,但可以通过以下的数据引擎去连接访问。
- CONNECT 允许访问不同类型的文本文件和远程资源,就像它们是常规的 MariaDB 表一样。
- CSV 存储引擎可以读取并附加到以 CSV(逗号分隔值)格式存储的文件。然而,自从 MariaDB 10.0 以来,CONNECT 是一个更好的选择,并且能够更灵活地读写这样的文件。
- FederatedX 使用 libmysql 与远程 RDBMS 数据源沟通。目前,由于 FederatedX 只使用 libmysql,它只能与另一个 MySQL RDBMS 通信。
- CassandraSE 是一个允许访问旧版本的 Apache Cassandra NoSQL DBMS 的存储引擎。不过它是相对实验性的,并且不再被积极开发。
搜索优化优化
- SphinxSE 用作在远程 Sphinx 数据库服务器上运行语句的代理(主要用于高级全文搜索)。
- Mroonga 使用列存储提供快速的 CJK 就绪全文搜索。
缓缓存,只读存,只读
- MEMORY 不会在磁盘上写数据(崩溃时所有行都会丢失),并且最适合用于其它表中数据的只读缓存或临时工作区。借助默认的 XtraDB 和其它具有良好缓存的存储引擎,与过去相比,对该引擎的需求减少了。
其其它专用引擎它专用引擎
- S3 存储引擎是一个只读存储引擎,它将数据存储在 amazons3 中。
- Sequence 允许使用给定的起始值、结束值和增量创建数字(正整数)的升序或降序序列,并在需要时自动创建虚拟的临时表。
- BLACKHOLE 存储引擎接受数据,但不存储数据,并始终返回空结果。这在复制环境中非常有用,例如,如果您希望在从机上运行复杂的筛选规则,而不会在主机上产生任何开销。
- OQGRAPH 允许处理层次结构(树结构)和复杂图(在多个方向上有多个连接的节点)。
总结:
关于 MariaDB 存储引擎的一般性常规选择(先不考虑拓展和集群),其实大体看来只有以下几个
- 一般使用:InnoDB
- 快速存取,不使用事务:Aria
- 高压缩和吞吐,需要降低数据空间占比:MyRocks 或 TokuDB 归档专用:Archive
- 连接到其它文本或远程数据源:CONNECT
- 更多 MariaDB 的存储引擎详细,可参看官网