存储引擎

数据库存储引擎

存储引擎(或数据库引擎)是数据库管理系统的软件组件,负责在内存和磁盘上存储,检索和管理数据,旨在捕获每个节点的持久性长期内存尽管数据库可以响应复杂的查询,但是存储引擎可以更精细地查看数据并提供简单的数据处理 API,从而允许用户创建,更新,删除和检索记录。换言之,存储引擎解决了数据库如何存储我们提供的数据,以及如何在我们需要时重新找到数据。一种查看方式是数据库管理系统是构建在存储引擎之上的应用程序,提供了架构,查询语言,索引,事务和许多其他有用的功能。

我们需要从许多可用的存储引擎中选择一个合适的。而且为了协调存储引擎以适配应用工作负载,你也需要大致了解存储引擎在底层究竟做什么。需要注意的是,针对事务性负载和分析性负载优化的存储引擎之间存在巨大差异。

存储引擎的分类

目前主流的存储引擎主要分为两大类:日志结构(log-structured)的存储引擎,以及面向页面(page-oriented)的存储引擎(例如 B 树)。

  • 日志结构学派:只允许附加到文件和删除过时的文件,但不会更新已经写入的文件 Bitcask,SSTables,LSM 树,LevelDB,Cassandra,HBase,Lucene 等都属于这个类别。

  • 面向页面的就地更新学派:将磁盘视为一组可以覆写的固定大小的页面 B 树是这种哲学的典范,用在所有主要的关系数据库中和许多非关系型数据库。

诸如 BerkeleyDB,LevelDB 及其后代 RocksDB,LMDB 及其后代 libmdbx,Sophia,HaloDB 等存储引擎的开发均独立于它们现在所嵌入的数据库管理系统使用可插拔存储引擎使数据库开发人员能够使用现有存储引擎来引导数据库系统,并专注于其他子系统。同时,数据库系统组件之间的明确隔离为在不同引擎之间切换提供了机会,这可能更适合于特定的用例例如,流行的数据库管理系统 MySQL 具有多个存储引擎,包括 InnoDB,MyISAM 和 RocksDB(在 MyRocks 发行版中)MongoDB 允许在 WiredTiger,内存中和(现已弃用的)MMAPv1 存储引擎之间切换。