存储引擎是指表的类型,数据库的存储引擎决定了表在计算机中的存储方式。本文为您介绍云数据库 MySQL 支持的存储引擎。
InnoDB 引擎
InnoDB 引擎,是最常用的 OLTP 存储引擎,采用了多版本并发控制(MVCC)和行级锁定技术,以提供高性能和可靠的事务处理能力。相对于 MySQL 的其他存储引擎,InnoDB 支持更好的数据完整性,包括外键和回滚等,还提供了更高级别的查询功能,同时腾讯云对 InnoDB 做了很多内核优化,使其具有更加明显的性能优势,被广泛应用于高性能、高并发的应用场景中。
云数据库 MySQL 默认支持 InnoDB 存储引擎,并在 MySQL5.6及以上的版本中,不再支持 MyISAM 引擎和 Memory 引擎。主要原因如下:
在目前的 MySQL 版本中,TencentDB 对 InnoDB 做了很多内核优化,已经具有明显的性能优势。
MyISAM 采用的是表级锁机制,而 InnoDB 是行级锁机制,通常情况下 InnoDB 具有更高的写入效率。
说明:
表级锁是 MySQL 中锁定粒度最大的一种锁,表示对当前操作的整张表加锁。
行级锁是 MySQL 中锁定粒度最细的一种锁,表示只针对当前操作的行进行加锁。
MyISAM 对数据完整性的保护存在缺陷,且这些缺陷会导致数据库数据的损坏甚至丢失。另外,这些缺陷很多是设计问题,无法在不破坏兼容性的前提下修复。
MyISAM 和 Memory 向 InnoDB 的迁移代价低,大多数应用仅需要改动建表的代码即可完成迁移。
MyISAM 的发展在向 InnoDB 转移,在最新的官方 MySQL8.0版本中,系统表均已采用 InnoDB。
Memory 无法保证数据的完整性,实例发生重启或者主备切换时,表中的所有数据都会丢失,建议您尽快迁移至 InnoDB。
RocksDB 引擎
RocksDB 是一个非常流行的高性能持久化 KV(key-value)存储,TXRocks 是腾讯 TXSQL 团队基于此开发的事务型存储引擎。TXRocks 事务型存储引擎得益于 RocksDB LSM Tree 存储结构,既减少了 InnoDB 页面半满和碎片浪费,又可以使用紧凑格式存储,因此 TXRocks 在保持与 InnoDB 接近的性能前提下,存储空间相比 InnoDB 可以节省一半甚至更多,更适合对事务读写性能有要求,且数据存储量大的业务。
更节省存储空间
相比 InnoDB 使用的 B+Tree 索引结构,LSM Tree 可以节省相当比例的存储空间。
写放大更低
InnoDB 采用 In-Place 的修改方式,即使仅修改一行记录也可能要刷盘一整个页面,导致比较高的写入放大和随机写。RocksDB 采用 Append-Only 方式,相比而言写入放大更低。
LibraDB 引擎
LibraDB 引擎即只读分析引擎,是云数据库 MySQL 支持的全新功能,此功能基于只读实例提供服务。其可插拔式的引擎设计可以实现灵活的创建以及销毁,同时为用户提供海量数据处理与高效实时的复杂分析能力。LibraDB 引擎主要服务于高效的分析类查询。是一个为客户提供实时且高性能的复杂 SQL 处理的扩展只读分析组件。利用 LibraDB 引擎的列式存储能力、向量化并行执行引擎以及分布式并行执行而扩展的优化器,可以让客户能够很简单的在数据库中原地体验到高效地分析能力,另外 LibraDB 的列式存储为高 QPS 的变更、事务的 ACID,进行了针对性的优化,保证了查询数据的实时性以及一致性。
大规模并行计算 MPP
支持 MPP(Massively Parallel Processing)架构,能够通过将工作负载分散到多个节点上来提高数据处理性能。
向量化执行引擎
在 LibraDB 引擎中,实现了向量化的执行模式,在对内存中的列式数据,一个 batch 调用一次 SIMD 指令,减少了函数的调用次数,降低了 cache miss。
支持高速变更场景下的列式存储
LibraDB 引擎通过在存储层的优化和支持,可以满足用户在高并发场景下的数据变更的数据一致性,避免因为读写实例的数据频繁变更带来的数据延时而错过分析时间。
指定数据加载能力
libraDB 引擎支持指定对象加载的能力。可在数据加载的控制台设置或者通过命令行 SQL 指定需要加载的 LibraDB 的对象。
各引擎支持的版本与架构
引擎 | 数据库版本 | 架构 |
InnoDB 引擎 | MySQL5.6、5.7、8.0 | 单节点、双节点、三节点、集群版 |
RocksDB 引擎 | MySQL5.7、8.0 | 双节点 |
LibraDB 引擎 | MySQL5.7、8.0 | 双节点、三节点 |