MongoDB 8.0——存储
存储1、存储介绍2、WiredTiger存储引擎2.1、WiredTiger存储引擎介绍2.2、事务读写并发2.3、文档级并发性2.4、快照和检查点2.5、日志与压缩2.6、内存使用3、日志3.1、日志和WiredTiger存储引擎3.2、日志记录进程3.3、Journal Files3.4、日志和内存存储引擎1、存储介绍MongoDB数据库存储引擎是MongoDB负责管理数据的主要组件。MongoDB提供多种存储引擎可以选择最适合自己应用程序的引擎。WiredTiger存储引擎是MongoDB数据库默认支持的其具有如下特点提供文档级锁定。内存和磁盘的性能都很好。支持文档级的并发。高压缩率。加密支持。本文介绍的日志是WiredTiger预写日志而不是MongoDB数据库日志文件。预写日志是帮助数据库在发生硬中止时恢复数据的记录。它提供了多个可配置选项允许在特定场景下平衡性能和可靠性。GridFS是一种用于自管理部署的多功能存储系统专门用于处理大型文件比如超过16MB文档大小限制的文件。2、WiredTiger存储引擎2.1、WiredTiger存储引擎介绍MongoDB数据库的WiredTiger存储引擎是默认的存储引擎。对于现有部署如果未指定–storageEngine或storage.engine设置则mongod实例可以自动确定用于在–dbpath或storage.dbPath中创建数据文件的存储引擎。MongoDB在以下环境中托管的部署可以使用WiredTiger存储引擎。MongoDB Atlas用于云中MongoDB部署的完全托管服务。需要注意所有MongoDB Atlas部署均使用WiredTiger存储引擎。WiredTiger存储引擎主要包括MongoDBEnterprise和MongoDB Community两个版本。MongoDB Enterprise是基于订阅、自我管理的MongoDB版本MongoDB Community是基于源代码可用、免费使用且可自行管理的MongoDB版本。关于WiredTiger引擎的操作和使用限制说明如下不能将文档固定到WiredTiger缓存中。WiredTiger不会保留一部分缓存用于读取并将另一部分缓存用于写入。大量的写入工作负载可能会影响性能不过在这种情况下WiredTiger会优先确保索引缓存。WiredTiger会将其缓存分配给整个mongod实例。WiredTiger不会在每个数据库或每个集合级别分配缓 存。2.2、事务读写并发从MongoDB 7.0版本开始MongoDB使用默认算法来动态调整并发存储引擎事务读取和写入票证的最大数量。动态并发存储引擎ACID事务算法可优化集群过载期间的数据库吞吐量。并发存储引擎事务读取和写入票证的最大数量永远不会超过128读取票证和128写入票证并且可能因集群中的节点而异。单个节点内的读取票证和写入票证的最大数量始终相等。如果要指定动态最大值不能超过的读写事务读取和写入操作的最大数量可使用storageEngineConcurrentReadTransactions和storageEngineConcurrentWriteTransactions。如果要查看WiredTiger存储引擎支持的并发读事务读票证和写事务写票证的数量可执行serverStatus命令并检查queues.execution响应文档。需要注意available在queues.execution中的低值并不表示存在集群过载建议使用排队读取和写入票证数量作为集群过载的指示。2.3、文档级并发性MongoDB数据库的WiredTiger存储引擎会对写入操作使用文档级并发控制。因此多个客户端可以同时修改某一集合中的不同文档。MongoDB对于大多数读取和写入操作WiredTiger均使用乐观并发控制。WiredTiger仅在全局、数据库和集合级别使用意向锁。当存储引擎检测到两个操作之间存在冲突时其中一个操作会引发写入冲突从而导致MongoDB以透明方式重试该操作。MongoDB对于某些全局操作通常是涉及多个数据库的短期操作仍然需要全局性的“实例范围”锁。在某些情况下其他一些操作例如renameCollection仍然需要独占数据库锁。2.4、快照和检查点MongoDB数据库的WiredTiger存储引擎使用多版本并发控制(Multi-Version Concurrency ControlMVCC)。在一个操作开始时WiredTiger会向该操作提供数据在该时间点的快照快照提供的视图将与内存中的数据保持一致。当写入磁盘时WiredTiger将快照中的所有数据以一致的方式跨所有数据文件写入磁盘。当持久性数据充当数据文件中的检查点时检查点可确保数据文件在最后一个检查点之前包括最后一个检查点保持一致即检查点可以充当恢复点。MongoDB会配置WiredTiger以创建检查点具体操作是每隔60秒将快照数据写入磁盘。在写入新检查点期间前一检查点仍然有效。因此即使MongoDB在写入新检查点时终止或出错它在重新启动后也可以从上一个有效检查点恢复。当WiredTiger的元数据表被原子性更新以引用新检查点时新检查点将变得可访问且被永久保存。一旦新检查点可供访问WiredTiger就会释放来自旧检查点的页面。从MongoDB 5.0版本开始可以使用minSnapshotHistoryWindowInSeconds参数来指定WiredTiger保留快照历史记录的时长。增大minSnapshotHistoryWindowInSeconds的值会增加磁盘使用量因为服务器必须在指定的时间窗口内维护早期已修改值的历史记录。使用的磁盘空间量取决于工作负载工作负载越大需要的磁盘空间越多。MongoDB在WiredTigerHS.wt文件中维护快照历史记录该文件位于指定的dbPath中。2.5、日志与压缩MongoDB数据库的WiredTiger存储引擎将预写日志与检查点结合使用以确保数据的持久性。WiredTiger日志会保留各检查点之间的所有数据修改。如果MongoDB在检查点之间退出其会使用日志来重放自上一个检查点以来修改的所有数据。WiredTiger日志使用Snappy压缩库进行压缩。如果要指定其他压缩算法或不压缩可以使用storage.wiredTiger.engineConfig.journalCompressor进行设置。需要注意如果日志记录小于或等于128字节WiredTiger的最小日志记录大小​WiredTiger则不会压缩该记录。通过利用WiredTiger存储引擎MongoDB能够支持对所有集合和索引进行压缩。压缩能够最大限度地减少存储使用量但会消耗额外的CPU资源。默认情况下WiredTiger对所有集合使用Sappy压缩库进行区块压缩对所有索引使用前缀压缩。对于集合还可以选择使用zlib或zstd区块压缩库。如果需要指定另一种压缩算法或不压缩可以使用storage.wiredTiger.collectionConfig.blockCompressor设置。对于索引如果要禁用前缀压缩可以使用storage.wiredTiger.indexConfig.prefixCompression设置。在创建集合和索引期间还可以在每个集合和每个索引的基础上配置压缩设置。对于大多数工作负载默认的压缩设置可以在存储效率和处理需求之间取得平衡。2.6、内存使用MongoDB数据库通过WiredTiger存储引擎可以同时利用WiredTiger内部缓存和文件系统缓存默认WiredTiger内部缓存大小为以下两者中的较大者(RAM大小-1 GB)的50%。256 MB。例如在总RAM为4GB的系统上WiredTiger缓存使用1.5GB RAM算式如下0.5 * (4 GB - 1 GB) 1.5 GB。相反在总RAM为1.25GB的系统上WiredTiger存储引擎为WiredTiger缓存分配了256 MB因为这大于总RAM的一半减去1GB算式如下0.5 * (1.25 GB - 1 GB) 128 MB 256 MB需要注意在某些情况下例如在容器中运行时数据库的内存约束可以低于系统总内存。在此类情况下将此内存限制而非系统总内存用作最大可用RAM。默认情况下WiredTiger对所有集合使用Snappy区块压缩对所有索引使用前缀压缩。压缩默认值可以在全局级别进行配置也可以在集合和索引创建期间针对每个集合和每个索引进行设置。WiredTiger内部缓存和磁盘格式中的数据使用不同的表示形式文件系统缓存中的数据与磁盘上的数据格式相同并且同样拥有数据文件压缩带来的好处。操作系统使用文件系统缓存来减少磁盘I/O。WiredTiger内部缓存中加载的索引具有与磁盘上格式不同的数据表示形式但仍可利用索引前缀压缩来减少RAM使用量。索引前缀压缩会对被索引字段中的常用前缀去重。WiredTiger内部缓存中的集合数据未压缩并使用与磁盘上格式不同的表示形式。区块压缩可大幅节省磁盘上的存储空间但数据必须解压缩才能由服务器操作。借助文件系统缓存MongoDB会自动使用WiredTiger缓存或其他进程未使用的所有空闲内存。3、日志3.1、日志和WiredTiger存储引擎为了在存储引擎发生故障时提供持久性MongoDB数据库会提前将日志记录写入磁盘上的日志文件MongoDB数据库数据目录中的顺序二进制日志文档​。注意这里提到的日志是指WiredTiger预写日志而不是MongoDB数据库的日志文件。WiredTiger使用检查点提供磁盘上数据的一致视图并允许MongoDB从最后一个检查点恢复。但是如果MongoDB在检查点之间意外退出则需要日志来恢复最后一个检查点之后发生的信息。需要注意从MongoDB6.1版本开始日志始终处于启用状态。因此MongoDB会删除storage.journal.enabled选项以及相应的–journal和–nojournal命令行选项。通过日志记录恢复进程需要关注以下几点在数据文件中查找最后一个检查点的标识符。在日志文件中搜索与上一个检查点的标识符匹配的记录。应用日志文件中自上一个检查点以来的操作。3.2、日志记录进程MongoDB通过日志记录WiredTiger存储引擎为每个客户端发起的写入操作创建一条日志记录。日志记录包括由初始写入引起的任何内部写入操作。例如对集合中文档的更新可能会导致对索引的修改WiredTiger会创建一条日志记录其中包括更新操作及其关联的索引修改。MongoDB配置WiredTiger使用内存缓冲来存储日志记录。线程会进行协调以分配并复制到它们的缓冲区部分。所有不超过128KB的日记记录都会被缓冲。当满足以下任一条件时WiredTiger会将缓冲的日志记录同步到磁盘对于副本集成员主节点和从节点成员​如果写入操作包含或暗示j: true的写关注。此外对于从节点在每次批量应用操作日志条目之后进行。注意如果writeConcernMajorityJournalDefault为真则写关注majority默认为j: true。每100毫秒一次。当WiredTiger创建新的日志文件时由于MongoDB使用上限为100 MB的日志文件因此WiredTiger大约每100 MB数据创建一份新日志文件。在写入操作之间虽然日志记录保留在WiredTiger缓冲区中但硬关闭mongod后可能会丢失更新。3.3、Journal Files对于日志文件MongoDB会在dbPath目录下创建一个名为journal的子目录。WiredTiger日志文件的名称格式为WiredTigerLog.sequence其中sequence是从0000000001开始的零填充数字。在日志文件中客户端启动的每个写入操作都有一条记录具体内容如下日志记录包括由初始写入引起的任何内部写入操作。例如对集合中文档的更新可能会导致对索引的修改WiredTiger创建一条日志记录其中包括更新操作及其关联的索引修改。每条记录都有一个唯一的标识符。WiredTiger的最小日记记录大小为128字节。默认情况下MongoDB将WiredTiger配置为对其日志数据使用Snappy压缩。如果要指定不同的压缩算法或不进行压缩需要使用storage.wiredTiger.engineConfig.journalCompressor设置。如果日志记录小于或等于128字节WiredTiger的最小日志记录大小​WiredTiger不会压缩该记录。WiredTiger日志文件的大小限制约为100MB。一旦文件超过该限制WiredTiger就会创建一个新的日志文件。WiredTiger会自动删除旧日志文件仅保留从上一个检查点恢复所需的文件。如果要确定为日志文件留出多少磁盘空间需考虑以下因素检查点的默认最大大小为2GB。MongoDB从检查点恢复时可能需要额外的空间来写入新的日志文件。MongoDB压缩日志文件。恢复检查点所需的时间取决于你的使用案例。如果覆盖最大检查点大小或禁用压缩则计算结果可能会有很大不同。基于这些原因很难准确计算出需要多少额外空间因此高估所需要的磁盘空间始终是一种更安全的方法。如果没有为日志文件留出足够的磁盘空间MongoDB服务器将会崩溃。通常WiredTiger会预先分配日志文件的大小。3.4、日志和内存存储引擎在MongoDB Enterprise中内存存储引擎是正式发布版(GA)的一部分。由于其数据保存在内存中因此没有单独的日志。写关注为j: true的写入操作会立即得到确认。如果副本集的任何有投票权成员使用内存存储引擎则必须将writeConcernMajorityJournalDefault设为false。注意从MongoDB 4.2版本开始如果某个副本集节点使用内存存储引擎有投票权或无投票权​但副本集将writeConcernMajorityJournalDefault设置为true则该副本集节点会记录一个启动警告。在将writeConcernMajorityJournalDefault设置为false时MongoDB不会等待w: majority在写入磁盘日志后才确认写入。例如majority写操作可能会在给定副本集中的大部分节点发生临时断连例如崩溃或重启的情况下回滚。

相关新闻

ZenlessZoneZero-OneDragon:绝区零智能自动化工具终极指南

ZenlessZoneZero-OneDragon:绝区零智能自动化工具终极指南

ZenlessZoneZero-OneDragon:绝区零智能自动化工具终极指南 【免费下载链接】ZenlessZoneZero-OneDragon 绝区零 一条龙 | 全自动 | 自动闪避 | 自动每日 | 自动空洞 | 支持手柄 项目地址: https://gitcode.com/gh_mirrors/ze/ZenlessZoneZero-OneDragon 绝区…

2026/9/30 16:56:00 阅读更多 →
魔兽争霸3终极兼容性解决方案:5个简单步骤彻底告别卡顿闪退

魔兽争霸3终极兼容性解决方案:5个简单步骤彻底告别卡顿闪退

魔兽争霸3终极兼容性解决方案:5个简单步骤彻底告别卡顿闪退 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为《魔兽争霸3》在现代Win…

2026/10/12 9:27:31 阅读更多 →
MeloVC安装排错与推理测试

MeloVC安装排错与推理测试

MeloVC安装排错与推理测试 概述 模型下载 安装排错 推理测试 概述 介绍 MeloVC是基于MeloTTS的语音合成项目,除了基本的语音合成功能外,还提供了语音克隆功能,通过Speaker Embedding技术实现零样本语音克隆,可通过一段参考音频的声纹Speaker Embedding来控制生成语音的音色…

2026/10/2 11:23:15 阅读更多 →

最新新闻

GitHub热榜自动化抓取与解析技术指南

GitHub热榜自动化抓取与解析技术指南

我无法基于当前输入生成符合要求的博文。原因如下:输入中项目标题为“GitHub 热榜项目:日榜(2026-10-03)”,但该日期(2026年10月3日)是未来时间,明显不具备真实项目属性,…

2026/10/12 9:27:01 阅读更多 →
Strata双卡部署实战:释放中画幅AI影像引擎硬件潜力

Strata双卡部署实战:释放中画幅AI影像引擎硬件潜力

1. 这不是普通升级,是双卡用户的一次硬件价值重估Strata 这个名字最近在摄影和图像处理圈子里越来越响,尤其当它和 IQ3_S、IQ2_XS 这些中画幅数码后背型号一起出现时,几乎成了“高分辨率影像工作流最后一块拼图”的代名词。但很多人没意识到&…

2026/10/12 9:27:01 阅读更多 →
SAML 2.0单点登录原理与实战:SP、IdP、断言、证书全解析

SAML 2.0单点登录原理与实战:SP、IdP、断言、证书全解析

简介:一套围绕安全断言标记语言2.0规范实现的单点登录方案,面向需搭建统一身份认证体系的中高级开发者,亦覆盖VS2005、VS2008、VS2010等旧版开发环境,并包含部分Java辅助代码。资源完整呈现客户端发起认证请求、服务端信任校验、可…

2026/10/12 9:27:01 阅读更多 →
SAML 2.0 SSO单点登录实战:从协议原理到对接避坑指南

SAML 2.0 SSO单点登录实战:从协议原理到对接避坑指南

简介:基于SAML 2.0的SSO单点登录实现资料包,面向需要搭建统一身份认证系统的.NET开发人员、架构师,也适合对SAML协议交互流程感兴趣的Java开发者。资源聚焦客户端发送SAML请求、SSO响应验证客户端是否可信任、可信响应返回、加密SAML、客户端…

2026/10/12 9:26:00 阅读更多 →
车载颗粒物测量实战:OBS-ONE PM系统安装、测试与维护经验

车载颗粒物测量实战:OBS-ONE PM系统安装、测试与维护经验

第一次把颗粒物分析仪从实验室搬上卡车的时候,我心里想的是“把设备固定牢靠、管路接好,剩下的就是跑路、采数据”。等真正跑完一个完整的外场项目,我才发现OBS-ONE PM车载废气测量系统最难的部分从来不是仪器本身的精度,而是如何…

2026/10/12 9:26:00 阅读更多 →
FOD-A机场异物数据集实战:从数据转换到YOLO训练全指南

FOD-A机场异物数据集实战:从数据转换到YOLO训练全指南

简介:面向目标检测与计算机视觉研究者的FOD-A机场异物数据集,聚焦机场跑道常见异物碎片(FOD)检测,为缺乏公开标准数据的外物入侵检测任务提供训练与评测基础,也可支撑民航、机场场务等工业场景的智能巡检方…

2026/10/12 9:26:00 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →