MongoDB存储引擎

news2024/9/20 18:46:06

1、前言

存储引擎是数据库的组成部分,负责管理数据存储。

MongoDB支持的以下存储引擎:

存储引擎

描述

WiredTiger存储引擎

从MongoDB 3.2开始默认的存储引擎,新的版本MongoDB推荐使用WiredTiger存储引擎。

MMAPv1存储引擎

MMAPv1是MongoDB 3.2之前版本默认的存储引擎。

In-Memory存储引擎

MongoDB企业版支持In-Memory存储引擎。

2、WiredTiger存储引擎

从MongoDB 3.2开始,MongoDB默认的存储引擎为WiredTiger存储引擎。WiredTiger存储引擎提供文档级的并发模型,检查点、压缩、加密等多项功能。基于这些功能,WiredTiger存储引擎提供最全面的性能和存储效率。

存储引擎可以通过--storageEngine启动项或在配置文件中storage.engine中设置。

2.1 WiredTiger存储引擎的优势:

·最大化可用缓存

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

·WiredTiger缓存大小默认为50%RAM

没有了文件系统缓存,最小的可用内存为20%,这对于任何较低的操作系统来说都可能受到资源的限制。而WiredTiger缓存大小默认为50%的RAM,将缓解资源限制的问题。

·高吞吐量

WiredTiger使用“写时复制”,在文件更新时,WiredTiger将创建一个新的文档副本,确定返回给用户的是最新版本。这种方法允许多个客户端同时修改集合中的不同文档,从而提高并发和吞吐量。当使用多核服务器,多个线程正在写入不同的文档时,就实现了最佳的写入性能。

·降低存储空间和提高磁盘IOPS

WiredTiger使用压缩算法来减少存储在磁盘上的数据空间。不仅降低存储压力,而且提高磁盘读写效率。文本文件是高度可压缩的,而二进制数据可能不可压缩,因为它可能已经被编码和压缩。WiredTiger在压缩时会消耗额外的CPU,但用户可以配置压缩方案优化CPU的开销与压缩比。Snappy是默认的压缩引擎,提供了较低的CPU开销高压缩比之间的良好平衡。Zlib压缩引擎可以实现更高的压缩比,但会增加额外的CPU。

·压缩索引和日志

索引可以在内存中压缩,也可以在磁盘上压缩。WiredTiger利用前缀压缩索引,节约内存的使用以及释放存储的IOPS。日志是默认Snappy压缩。

·多核的可扩展性

WiredTiger在多核架构提供的可扩展性下,利用风险指针、无锁算法、快速锁存等技术减少了线程间的争用。线程可以在不阻塞彼此的情况下执行操作,从而减少线程争用、提供更好的并发性和更高的吞吐量。

·文档级并发

WiredTiger使用文档级并发控制写操作。使多个客户端可以同时修改集合的不同的文档。

对于大多数的读写操作,WiredTiger只使用数据库和集合级的意向锁。

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

2.2 WiredTiger存储引擎的配置

WiredTiger存储引擎可以通过--storageEngine启动项或在配置文件中storage.engine中设置。

例如:

mongod--storageEngine wiredTiger --dbpath <WiredTigerDBPath>

或,在配置文件设置如下:

storage:
wiredTiger:
    engineConfig:
        cacheSizeGB:<number>
            journalCompressor: <string>
            directoryForIndexes:<boolean>
        collectionConfig:
            blockCompressor: <string>
        indexConfig:
            prefixCompression: <boolean>

复制

cacheSizeGB:从MongoDB 3.4开始,值取值范围为256MB至10TB,默认情况下,cacheSizeGB值为50%的RAM减去1GB或是256MB。

journalCompressor:WiredTiger采用预写事务日志联合检查站,保证数据的持久性。日志压缩算法默认为snappy。其他可选值有none或zlib。

directoryForIndexes:默认为false。当为true时,mongod会分别单独以索引命名的子目录存储索引和以集合命令的子目录存储集合数据。

blockCompressor:默认值为snappy,用于压缩集合数据的压缩的默认类型。其他可选值为none或zlib。

prefixCompression:默认为true,即使用前缀压缩索引数据。

3、In-Memory存储引擎

在MongoDB企业版3.2.6开始,In-Memory存储引擎作为通用性部分。除了一些元数据和诊断数据外,In-Memory存储引擎只在内存中维护数据,包括配置数据、索引、用户凭据等。

由于通过避免磁盘I/O,In-Memory存储引擎的数据库操作延迟更低。

3.1 In-Memory存储引擎优势

·低延迟

·应用可以将单独的缓存和数据库层合并成——所有的访问和管理都使用相同的API、操作工具和安全控件。

3.2 In-Memory存储引擎配置

mongod--storageEngine inMemory --dbpath <path> --inMemorySizeGB <newSize>

或,在配置文件中如下:

storage:
engine: inMemory
    dbPath: <path>
inMemory:
    engineConfig:
        inMemorySizeGB:<newSize>

复制

inMemorySizeGB: 类型float,表示In-Memory存储引擎使用内存大小,默认是50%的物理RAM减去1GB,在3.4版本中,值范围在256MB到10TB内。

4、MMAPv1存储引擎

MMAPv1存储引擎是3.2版本之前的默认存储引擎。它利用集合级并发性和内存映射文件访问底层数据存储。内存管理委托给操作系统。MMAPv1不支持大端架构如s390x(IBM System z系列大型机硬件平台)。

4.1 MMAPv1存储引擎优势

·大容量插入、读取和更新

4.2 MMAPv1存储引擎配置

mongod--storageEngine mmapv1 --dbpath <path>

或,在配置文件做如下配置:

storage:
mmapv1:
    preallocDataFiles: <boolean>
        nsSize: <int>
        quota:
            enforced: <boolean>
            maxFilesPerDB: <int>
        smallFiles: <boolean>
        journal:
            debugFlags: <int>
            commitIntervalMs: <num>

复制

preallocDataFiles:默认为True,表示预分配数据文件。

nsSize:默认为16,命名空间文件的默认大小,这些文件是以ns结尾的文件。每个集合和索引都算作名称空间。此设置控制新创建的命名空间文件的大小。此项对现有文件没有影响。命名空间文件的最大大小为2047MB。默认值为16MB,提供大约24000个名称空间。

enforced: 默认为false,表示禁止对每个数据库拥有的数据文件的最大限制。MongoDB每个数据库最多有8个数据文件,可以通过maxFilesPerDB调整配额。

maxFilesPerDB: 默认为8,表示每个数据库的数据文件数量的限制。需要设置enforced选项。

smallFiles: 默认为false,如果为true,MongoDB使用一个较小的默认文件大小。

debugFlags: 作用是提供功能性测试,在系统发生异常关闭时,影响的数据文件的完整性。

commitIntervalMs: 默认值100,表示MongoDB写入日志文件时间,单位毫秒。

5、MongoDB存储引擎性能对比

WiredTIger存储引擎

In-Memory存储引擎

MMAPv1存储引擎

写性能

文档级并发控制

文档级并发控制

集合级并发控制

读性能

低延迟

支持磁盘压缩

MongoDB查询语言支持

二级索引支持

副本集支持

分片支持

安全控制

大数据集的RAM

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/698229.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微信小程序使用vant组件样式未生效解决办法

1.删除小程序自带的样式 首先在app.json里面删除这一行 2.清除缓存 重新编译 3.重新构建npm 重新编译 在工具里面

nginx之rewrite

一、Rewrite跳转的场景二、Rewrite跳转实现三、Rewrite实际场景四、常用的 Nginx 正则表达式五、Rewrite命令、语法格式六、location的分类七、location的优先级八、rewrite与location的区别九、rewrite示例9.1 基于域名的跳转9.2 基于客户端 IP 访问跳转9.3 基于旧域名跳转到新…

chatgpt赋能python:Python迭代运算:概述、应用及效果分析

Python迭代运算&#xff1a;概述、应用及效果分析 在Python编程领域中&#xff0c;迭代运算是一项基础性操作。它不仅适用于循环遍历数据&#xff0c;还支持函数式编程中的高阶函数应用&#xff08;例如map、filter等&#xff09;。本文将从多个方面探讨Python迭代运算的应用和…

高性能计算开发软件培训班-选猿代码科技IT培训机构!

学习CPU并行程序性能优化的意义&#xff1a; 学习CPU计算是现代计算机科学中不可或缺的一部分。掌握CPU计算原理和应用&#xff0c;能够提高我们的编程技能和解决问题的能力&#xff0c;帮助我们更好地应对计算机科学领域中的挑战和机遇。此外&#xff0c;CPU计算在计算机体系结…

python写路径时候的问题————转载ningqingzy的文章

作为笔记总结学习&#xff0c;如有侵权&#xff0c;立马删除。 总结有三种方法&#xff1a; 更换为绝对路径的写法&#xff1a;func1(“C:\Users\renyc”)显式声明字符串不用转义&#xff08;加r&#xff09;&#xff1a;func1(r"C:\Users\renyc")使用Linux的路径&a…

workbench 链接mysql 报错 authentication plugin caching_sha2_password

用workbench连接MySQL出现Authentication plugin ‘caching_sha2_password’ cannot be loaded的问题&#xff0c;如下图 原因 出现这个问题的原因是由于Navicat和MySQL的版本问题&#xff0c; mysql8 之前&#xff0c;加密规则是mysql_native_password&#xff1b; mysql8 之后…

leetcode97. 交错字符串(动态规划-java)

交错字符串 leetcode97. 交错字符串题目描述解题思路代码演示&#xff1a; 动态规划加状态压缩代码演示 动态规划专题 leetcode97. 交错字符串 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/interleaving-string 题目描…

线性代数高级--矩阵的秩--SVD分解定义--SVD分解的应用

目录 矩阵的秩 概念 k阶子式 矩阵的秩的定义 矩阵的秩的性质 SVD分解 概念 注意 SVD的分解过程 SVD分解的应用 矩阵的秩 概念 矩阵的秩是线性代数中的一个重要概念&#xff0c;用于描述矩阵的行&#xff08;或列&#xff09;向量的线性无关程度。矩阵的秩可以通过…

chatgpt赋能python:Python遍历0到100的使用场景及方法

Python遍历0到100的使用场景及方法 Python是一种简洁、高效的脚本语言&#xff0c;广泛用于各种领域的开发。本文介绍Python遍历0到100的使用场景以及方法&#xff0c;旨在帮助读者更加了解Python的强大之处。 遍历0到100的背景和意义 遍历0到100是一种常见的问题&#xff0…

网络安全合规-银行业数据治理架构体系搭建(一)

为引导银行业金融机构加强数据治理&#xff0c;充分发挥数据价值&#xff0c;全面向高质量发展转变&#xff0c;银监会于2018年发布了《银行业金融机构数据治理指引》&#xff0c;主要内容如下&#xff1a; 近年来银行业金融机构在业务快速发展过程中&#xff0c;积累了客户数…

JavaScript 手写代码 第六期(重写数组方法三) 用于遍历的方法

文章目录 1. 为什么要手写代码&#xff1f;2. 手写代码2.1 forEach2.1.1 基本使用2.1.2 手写实现 2.2 map2.2.1 基本使用2.2.2 手写实现 2.3 filter2.3.1 基本使用2.3.2 手写实现 2.4 every2.4.1 基本使用2.4.2 手写实现 2.5 some2.5.1 基本使用2.5.2 手写实现 2.6 reduce2.6.1…

虚幻引擎(UE5)-大世界分区WorldPartition教程(二)

文章目录 前言一、OFPA怎么用二、OFPA怎么用总结 上一篇&#xff1a;虚幻引擎(UE5)-大世界分区WorldPartition教程(一) 前言 在UE4版本中中&#xff0c;Actor是保存在关卡文件中的&#xff0c;也就是说&#xff0c;如果要编辑关卡中的某些Actor&#xff0c;需要签出关卡文件进…

STM32单片机(七)ADC模拟数字转换器----第二节:ADC模数转换器练习2(AD多通道)

❤️ 专栏简介&#xff1a;本专栏记录了从零学习单片机的过程&#xff0c;其中包括51单片机和STM32单片机两部分&#xff1b;建议先学习51单片机&#xff0c;其是STM32等高级单片机的基础&#xff1b;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 &#xff1a;适用于想要…

SNMP 计算机网络管理 实验2(二) SNMP服务与常用网管命令之任务三:对同学的计算机进行网络管理 任务四:查询计算机网卡的相关信息

⬜⬜⬜ &#x1f430;&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea;(*^▽^*)欢迎光临 &#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea;&#x1f430;⬜⬜⬜ ✏️write in front✏️ &#x1f4dd;个人主页&#xff1a;陈丹宇jmu &am…

Windows下通过FastGithub加速国内GitHub访问

有时候在国内访问GitHub会非常慢&#xff0c;有时候直接打不开&#xff0c;无法访问&#xff0c;最近了解到了FastGithub 可以解决以下几个问题: github加速神器&#xff0c;解决github打不开、用户头像无法加载、releases无法上传下载、git-clone、git-pull、git-push失败等问…

刷题第二天 数组 leetcode 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II

977.有序数组的平方 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 示例 1&#xff1a; 输入&#xff1a;nums [-4,-1,0,3,10] 输出&#xff1a;[0,1,9,16,100] 解释&#xff1a;平方后&…

Use ELK with Django Log

What is ELK? The ELK Stack is a collection of three open source products: ElasticsearchLogstashKibana When to use ELK? ELK is designed to allow us to take data from any source, in any format, and to search, analyze, visualize data in real time. At t…

Java Swing编写批量模糊替换jar包小工具

用途&#xff1a;由于jar包升级需要对之前jar包进行替换&#xff0c;而版本后缀不一致需要人工手动比对 作用&#xff1a;代码升级后&#xff0c;同一个模块jar包相同只有后缀不同&#xff0c;编写小工具进行比对进行替换名称&#xff0c;避免人工核对 技术点&#xff1a;Java …

快来看看Java在编程语言中的优势与特性吧

作者主页&#xff1a;paper jie的博客_CSDN博客-C语言,算法详解领域博主 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 其他专栏&#xff1a;《系统解析C语言》《C语言》《C语言-语法篇》 内容分享&#xff1a…

iview ui vue2.0 radio 点击选中状态后取消选中状态

<RadioGroup v-model"formData.deficiencyType"><Radio label"1" :disabled"modalTypeC?true:false" click.native"cancelSelection(1)">1</Radio><Radio label"2" :disabled"modalTypeC?tru…