mongodb的存储引擎

mongodb版本为3.4

mongodb存储引起的一些概述

存储引擎是MongoDB的核心组件,负责管理数据如何存储在硬盘和内存上。从MongoDB 3.2 版本开始,MongoDB 支持多数据存储引擎,MongoDB支持的存储引擎有:WiredTiger,MMAPv1和In-Memory。

从mongodb3.2开始默认的存储引擎是WiredTiger,3.3版本之前的默认存储引擎是MMAPv1,mongodb4.x版本不再支持MMAPv1存储引擎。

MongoDB不仅能将数据持久化存储到硬盘文件中,而且还能将数据只保存到内存中;In-Memory存储引擎用于将数据只存储在内存中,只将少量的元数据和诊断日志(Diagnostic)存储到硬盘文件中,由于不需要Disk的IO操作,就能获取索取的数据,In-Memory存储引擎大幅度降低了数据查询的延迟(Latency)

WiredTiger存储引擎

从mongodb3.2开始mongodb默认支持WiredTiger存储引擎,对于3.2之前的版本可以使用参数指定存储引擎。

storage:
   engine: wiredTiger
wireTiger:
[存储引擎的参数设置]

WiredTiger是各种操作应用的理想选择,因此是MongoDB的默认存储引擎。它应该是所有新应用程序的起点,除了您需要内存或加密存储引擎的特定功能的情况。

WiredTiger存储引擎的主要优势:

最大化可用缓存: WiredTiger最大限度地利用可用内存作为缓存来减少I / O瓶颈。使用了两个缓存:WiredTiger缓存和文件系统缓存。WiredTiger缓存存储未压缩的数据并提供类似内存的性能。操作系统的文件系统缓存存储压缩数据。当在WiredTiger缓存中找不到数据时,WiredTiger将在文件系统缓存中查找数据。

【图片】 

在移动到WiredTiger缓存之前,在文件系统缓存中找到的数据首先经过解压缩过程。

WiredTiger缓存在保存尽可能多的工作集时表现最佳。但是,为需要它的其他进程(如操作系统,包括文件系统缓存)保留内存也很重要。这也包括MongoDB本身,整体上消耗的内存比WiredTiger主动使用的内存多。

MongoDB默认为WiredTiger缓存大小约为RAM的60%离开文件系统缓存的最小量是可用内存的20%。任何较低的操作系统都可能受限于资源。

高吞吐量: WiredTiger使用“写入时复制” - 当文档更新时,WiredTiger将制作文档的新副本并确定最新版本以返回给读者。此方法允许多个客户端同时修改集合中的不同文档,从而实现更高的并发性和吞吐量。当应用程序使用具有多个内核的主机(越多越好)并且多个线程正在写入不同的文档时,实现最佳写入性能。

减少存储空间并改善磁盘IOP: WiredTiger使用压缩算法来减少磁盘上存储的数据量。不仅存储减少了,而且随着从磁盘读取或写入更少的位,IOP性能也会提高。某些类型的文件比其他文件压缩得更好。文本文件是高度可压缩的,而二进制数据可能不是可压缩的,因为它可能已经被编码和压缩。使用压缩时,WiredTiger会产生额外的CPU周期,但用户可以配置压缩方案以优化CPU开销与压缩比。Snappy是默认的压缩引擎,在高压缩率和低CPU开销之间提供了良好的平衡。Zlib将实现更高的压缩比,但会产生额外的CPU周期。

压缩(索引和journals日志):索引可以在内存和磁盘上压缩。WiredTiger利用前缀压缩来压缩索引,节省RAM使用以及释放存储IOP。默认情况下,使用Snappy压缩压缩journals日志。

多核可扩展性:随着CPU制造商缩小到更小的平版印刷,功耗变得越来越成问题,处理器趋势已转向多核架构,以维持摩尔定律的节奏。WiredTiger在设计时考虑了现代的多核架构,并提供跨多核系统的可扩展性。危险指针,无锁算法和快速锁存等编程技术可最大限度地减少线程之间的争用。线程可以执行操作而不会相互阻塞 - 从而减少线程争用,更好的并发性和更高的吞吐量。

 WiredTiger允许用户为其读取指定隔离级别。读取操作可以返回大部分副本集已接受或提交到磁盘的数据视图。这样可以保证应用程序只读取在发生故障时仍然存在的数据,并且在将新的副本集成员提升为主要成员时不会回滚。

【以上关于wiredTiger存储引擎的介绍来自官方文档的一片博客:存储引擎

mongodb的存储引擎详细介绍: https://www.cnblogs.com/phpandmysql/p/7763420.html

猜你喜欢

转载自www.cnblogs.com/wxzhe/p/9928206.html