Mongo3.4 Storage Engines存储引擎(简介)

来源:互联网 发布:世界首例网络攻击 编辑:程序博客网 时间:2024/05/19 20:38

storage Engine是数据库的一个组件负责管理数据是如何存储的,在内存和磁盘上,MongoDB支持多种存储引擎,不同的存储引擎在不同的工作负载下表现的更好,为你的应用程序提供合适的存储引擎可以显著的提高您的应用程序的性能。

1.MongoDB3.2之前的默认存储引擎是MMAPv1,它在读取和写入的大量工作负载和更新方面表现良好
2.MongoDB3.2之后的存储引擎是WiredTiger,它能够很好的适用各种工作负载也是被推荐的新的部署;WiredTiger提供文件级别的并发模型、检查点、压缩等特征;
3. In-Memory Storage Engine(内存存储引擎)适用于MongoDB企业级应用,它不会将文档存储在硬盘上而是存储到内存中以确保更低的数据延迟;
4.从MongoDB3.0开始WiredTiger存储引擎开始提供64位版本

WiredTiger Storage存储引擎

从MongoDB3.2开始WiredTiger是默认的存储引擎,如果你不指定 --storageEngine或者storage.engine设置,MongoDB3.2能够自动确定存储引擎在 --dbpath或者storage.dbpath路径下创建数据文件。

文档及并发

写操作在WiredTiger存储引擎下使用文档级别的并发控制,因此,多个客户端可以修改同一个collection的多个document在同一时刻。

对于大多数读和写操作,WiredTiger使用乐观并发控制;WiredTiger仅使用意向锁在全局、数据库、集合级别;当存储引擎检测到两个操作之间的冲突时,一个会引起写操作冲突引起重复执行操作。

一些全局操作,通常涉及到多个数据库的短时间操作,仍然需要全局范围实例锁,一些其他的操作,例如删除文档集合,仍然需要独占数据库锁。

快照和检查点

WiredTiger使用多版本的并发控制(MVCC),在操作开始,WigerTiger提供一个数据操作的时间点快照,快照显示内存数据的一致视图。

写入磁盘时,WiredTiger把所有的数据向所有的数据文件按照一致的方式将快照写入硬盘中,当前的持久化数据充当文件中的检查点,检查点确保数据文件一致,包括最后一个检查点,也就是说检查点可以充当恢复点。

MongoDB配置WiredTiger每隔60秒或者2Bytes日志数据创建检查点。

在编写新的检查点期间,当前检查点仍旧有效,因此在写一个新的检查点期间引起一个错误或者终断,MongoDB仍然可以恢复到最后的检查点。

使用WiredTiger,即使没有日志,MongoDB仍然可以从检查点恢复数据

什么叫做快照?

快照也就是数据文件在一个时间点在内存中的状态

什么叫做检查点?

检查点也就是数据库中的所有的数据文件同一时刻的快照,将这些快照持久化到硬盘中,硬盘中的这些持久化的文件就叫做检查点。

日志

WiredTiger采用预写日志联合检查点来保证数据的持久性;

WiredTiger记录检查点的所有修改到日志中,如果MongoDB存在之间的检查点,它使用日志恢复所有的修改;

WiredTiger日志使用snappy压缩库压缩,指定替代压缩算法或者无压缩,使用storage.wiredTiger.engineConfig.journalCompressor设置

注:

WiredTiger最小的日志记录是128Bytes,如果日志记录小于128Bytes,WiredTiger不会压缩记录。

您可以禁用日志记录设置storage.journal.enabled虚假,从而降低维护开销的日志。

压缩

使用WiredTiger,MongoDB支持collection和索引的压缩,尽量减少额外的CPU和存储的使用

默认情况WiredTiger存储引擎使用snappy压缩库对collection和索引前缀进行块级压缩;


原创粉丝点击