尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

【赵渝强老师】MongoDB的WiredTiger存储引擎

【赵渝强老师】MongoDB的WiredTiger存储引擎
📅 发布时间:2026/6/19 19:53:32

1

​WiredTiger提供文档级别(Document-Level)的并发控制,检查点(CheckPoint),数据压缩和本地数据加密( Native Encryption)等功能。从MongoDB 3.2 版本开始,WiredTiger成为MongDB默认的Storage Engine。

image.png
点击这里查看视频讲解:【赵渝强老师】MongoDB的WiredTiger存储引擎

下面将详细讨论WiredTiger存储引擎的功能特性。

一、文档级别的并发控制

MongoDB在执行写操作时,WiredTiger存储引擎会在文档级别进行并发控制。换句话说在同一时间点上,多个写操作能够修改同一个集合中的不同文档;而当多个写操作修改同一个文档时,必须以序列化方式执行。这意味着如果当前文档正在被修改,其他写操作必须等待该文档上的写操作完成之后才能进行修改。对于大部分的文档读写操作,WiredTiger引擎使用的都是乐观锁;而在数据库和集合级别,WiredTiger使用的是意向锁。当WiredTiger存储引擎探测到两个操作之间发生了冲突,将会产生一个写冲突并将会重新执行操作。下表列出了MongoDB的操作与产生的锁类型。

2

二、预先日志与检查点

在MongoDB数据更新时,WiredTiger存储引擎使用预写日志的机制先将数据更新写入到Journal日志文件中。然后在创建检查点操作开始时,再将日志文件中记录的操作刷新到数据文件。换句话说,通过预写日志和检查点机制可以保证将数据更新持久化到数据文件中,并实现数据的一致性。

在检查点(Checkpoint)操作开始时,WiredTiger存储引擎将提供指定时间点的数据库快照,该快照反映的是MongoDB当前内存中的数据情况。当向磁盘写入数据时,WiredTiger存储引擎将快照中的所有数据以一致性方式写入到MongoDB的数据文件上,并保证数据文件和内存数据是一致性的。由于检查点是定期执行,因此检查点操作能够缩短MongoDB从Journal日志文件恢复数据的时间。在默认情况下,WiredTiger存储引擎创建检查点的时间间隔是60秒或产生2GB的Journal日志信息文件。在WiredTiger存储引擎创建新的检查点期间,上一个检查点仍然是有效的。这意味着即使MongoDB在创建新的检查点期间遭遇到错误而异常终止运行,只要重启MongoDB就能从上一个有效的检查点开始恢复数据。当新的检查点创建成功后,WiredTiger存储引擎以原子方式更新元数据表使其引用新创建的检查点,同时会将老的检查点占用的磁盘空间释放。

下图说明了MongoDB写入数据时,MongoDB的预写日志机制及与产生检查点操作之间的关系。

3

提示:当第(2)步完成时,写入的数据依然在内存缓冲区中。如果此时MongoDB发生了故障导致数据丢失,在重新启动时,WiredTiger存储引擎会使用Journal日志来恢复内存中的数据。​

三、有效的内存使用

WiredTiger存储引擎利用系统内存资源缓存两部分数据,它们分别是:

  • 内部缓存(Internal Cache)
  • 文件系统缓存(Filesystem Cache)

    在默认情况下,WiredTiger存储引擎将使用操作系统物理内存的一半来缓存数据。如果需要修改这个设置,可以通过使用参数--wiredTigerCacheSizeGB。另一方面要监控MongoDB的内存使用情况,可以使用db.serverStatus().mem命令进行查看。
scott@nosql11 2> db.serverStatus().mem输出的信息如下:
{ "bits" : 64, "resident" : 68, "virtual" : 1561, "supported" : true }其中:
resident:	代表物理存储使用的情况,单位是M。
virtual:	代表虚拟内存使用的情况。

​

四、数据压缩

WiredTiger存储引擎支持对集合和索引进行压缩,以减少磁盘空间消耗。WiredTiger为集合提供三个压缩选项,它们分别是:

  • 无压缩
  • Snappy:默认启用的压缩方式,能够有效地利用资源。
  • zlib:类似gzip压缩,压缩比率高但需要占用更多CPU资源。

WiredTiger存储引擎为索引提供了两个压缩选项,它们分别是:

  • 无压缩
  • 前缀:默认启用的压缩方式,能够有效地利用资源。

    对于大多数工作负载的情况,使用默认的压缩设置能够均衡数据存储的效率和处理数据的需求,即压缩和解压的处理速度都是非常高的。下面的示例将创建一个使用zlib压缩的集合:
db.createCollection("email",{storageEngine: {wiredTiger:{configString: 'block_compressor=zlib'}}})

如果想进一步测量压缩前后的大小,可以执行下面的语句。该语句将以字节为单位返回MongoDB中集合与索引的大小。

db.stats(1024*1024).dataSize + db.stats(1024*1024).indexSize

五、磁盘空间回收

当从MongoDB中删除文档或者集合的时候,MongoDB不会立即将磁盘空间释放给操作系统。MongoDB会在数据文件中维护Empty Records的列表。当重新插入数据时,MongoDB会从Empty Records列表中分配存储空间给新的文档,而不需要重新开辟空间进而有效地重用磁盘空间,但这样的机制带来的一个问题就是会产生大量的磁盘碎片。因此WiredTiger存储引擎也支持使用compact命令整理数据碎片,并将没有使用的磁盘空间进行释放。该命令的语法格式如下:

db.runCommand ( { compact: '<collection>' } )

例如下面的命令将释放scott数据库中员工集合没有使用的磁盘空间。

db.runCommand({compact:'emp'});

提示:在执行compact命令时,WiredTiger存储引擎会对当前的数据库进行加锁,以阻塞其他操作。在compact命令执行完成之后,WiredTiger存储引擎会重建集合的所有索引。

相关新闻

  • Obsidian代码执行插件完全指南:让笔记变身编程环境
  • 25、C语言性能优化与测量全解析
  • 基于ASP.NET市容监察管理系统设计(程序系统+论文+PPT)

最新新闻

  • 端午充电季|乘风破浪,技能进阶正当时
  • 武汉想养猫狗先看看,梦宠山庄探店记录 - 园友3800037
  • FanControl V270终极指南:Windows系统智能风扇控制的完整解决方案
  • 海口黄金回收避坑指南!2026本地行情解析,这样卖金更划算✨ - 奢品小当家
  • MC68060软件包深度解析:浮点库实现与操作系统集成实战
  • C语言数学函数库深度解析:fabs、fmod、hypot的原理、陷阱与工程实践

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号