简介
MongoDB 是一个流行的 NoSQL 数据库,是一个文档导向的数据库。MongoDB 中的存储引擎用来实现数据的持久化和查询。在 MongoDB 中,有多个存储引擎可以选择,每个存储引擎都可以为不同的数据访问模式提供不同的优化,也可以为不同的工作负载提供不同的存储方案。
本文主要介绍 MongoDB 中常见的存储引擎,其优缺点以及如何根据应用程序的不同需求来选择适用的存储引擎。
常见的存储引擎
WiredTiger
WiredTiger 是 MongoDB 内置的默认存储引擎。WiredTiger 可以提供更好的数据压缩、更好的并发控制和更好的性能,并支持具有多文档事务功能的数据库 aciD。
和原来的 MMAPv1 存储引擎相比,WiredTiger 存储引擎可以通过更少的磁盘 I/O 来获取更快的查询性能,减少数据冗余,是 MMAPv1 引擎的升级版。
WiredTiger 使用复杂的分层存储引擎,有对事务的支持等先进特性。
RocksDB
RocksDB 是 Facebook 开源的一个高性能键值存储库,是基于 LevelDB 构建的,其核心处理引擎是一个支持 SSD 领域的快速键值存储引擎,是非常适合于 OLAP(在线分析处理)或者 OLTP(在线事务处理)任务的存储引擎。
对于长时间批量增量导致的数据集合数据的合并,RocksDB 有持久化数据、只读数据、删除数据三个部分,并且支持数据的压缩存储。相较于 WiredTiger 来说,RocksDB 占用内存更少,相同工作负载条件下的稳定性更高。
In-Memory
In-Memory 存储引擎是 MongoDB 中相对简单的一种存储引擎,常用于实现高速缓存。MongoDB 的 In-Memory 存储引擎只适用于临时数据,一旦 MongoDB 再次刷写数据到磁盘,数据就会被永久删除,并不能像 Persistent 存储引擎一样存储数据。
相对于其他存储引擎,In-Memory 存储引擎可以提供更高的性能。但由于内存有限,会造成需要频繁刷写到硬盘从而影响性能。
MMAPv1
MMAPv1 是 MongoDB 中的传统存储引擎。MMAPv1 存储引擎使用文件映射技术,按需加载数据,将一部分数据存储在内存中,一部分数据存储在磁盘中。
相较于现在的存储引擎来说,MMAPv1 存储引擎很快会被淘汰,但凡事都有双重性,我们需要了解每一个存储引擎的特性。
存储引擎选择
选择 MongoDB 存储引擎的主要考虑因素是应用程序的性能要求和数据访问模式。下面将介绍如何根据这些因素,正确地选择 MongoDB 存储引擎。
- 若应用程序需要具有 ACID 事务和更好的性能和压缩率,则应使用 WiredTiger 引擎。
- 若应用程序主要进行 OLAP 或 OLTP 任务,则应选择 RocksDB 存储引擎。
- 若应用程序需要一定的可慢性或需要大量的缓存,则可以使用 In-Memory 存储引擎。
- 若应用程序的负载不太稳定,访问特定记录时磁盘 I/O 内存常常被使用则可选择MMAPv1 存储引擎。
在 MongoDB 中可以通过配置文件启用或禁用特定的存储引擎,比如:
storage: engine: wiredTiger # 指定使用 WiredTiger 存储引擎
增加新的存储引擎需要进行复杂的开发工作,因此 MongoDB 社区对存储引擎的数量进行了精心的选择,以覆盖最常见的用例。
总结
MongoDB 存储引擎提供了很多不同的选项,以满足不同的应用程序需求。选择合适的存储引擎不仅可以提高数据库的性能,还可以为开发人员提供极佳的扩展性,提高整体应用程序的可用性和稳定性。但是,应该根据项目实际需求进行选择,不可被主观决策或者单纯追求速度,而应注重其中涵盖的场景适用性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64589ef6968c7c53b0af6642