当前位置: 首页 > news >正文

MongoDB的WiredTiger存储引擎

作者:太阳

从MongoDB 3.2 开始,MongoDB实例默认的存储引擎为WiredTiger,WiredTiger存储引擎具体以下几大优点:

文档级并发

将数据持久化到磁盘

快照和checkpoint

数据压缩

本地数据加密

一、文档级别并发

1、WiredTiger使用文档级别并发,意味着在同一时间,MongoDB实例允许多个对不同文档间的写操作并发执行(复制应用oplog时同样可以做到文档级并发应用)。

2、对于读写操作,MongoDB使用乐观并发控制,WiredTiger仅仅会在数据库或者集合上添加意向锁。

3、一些全局的操作,包括一些涉及多个数据库的操作,仍然需要全局锁。如drop一个集合,仍然需要数据库级别的x锁。

二、journal

2.1 Journal的基本概念

1、WiredTiger使用WAL(journal)和checkpoiont来保证数据的持久性。

2、journal日志记录了两次checkpoint之间的所有数据变更,当MongoDB实例意外宕机时,先恢复实例到last checkpoint时间,然后在journal中找到last checkpoint的唯一标识,开始重放last checkpoint之后的所有数据变更。

3、journal默认使用snappy进行压缩,也可以在配置文件中通过storage.wiredTiger.engineConfig.journalCompressor参数还设置相关的压缩配置。如果一条记录小于128KB,默认不对该记录进行压缩。

4、对于MongoDB单节点,可以使用 storage.journal.enabled 关闭journal,若不开启journal,单数据库宕机后只能将数据恢复到last checkpoint。

2.2 Journal数据恢复

journal属于WiredTiger的WAL的日志,并不是MongoDB实例的日志文件,如果MongoDB实例意外宕机,可以journal可以恢复last checkpoint之后的数据变更操作。journal日志恢复流程大致如下:

1、将数据恢复到last checkpoint;

2、查看data file中last checkpoint的标识符;

3、查看journal日志中last checkpoint的标识符;

4、重放last checkpoint之后的journal日志进行数据恢复(数据最大丢失CommitIntervalms的数据)。

也就是所,当我们通过journal file重放时,丢失的数据就是journal buffer但是没有写入journal file的这部分数据。

2.3 Journaling Process机制

1)在开启journal日志的情况下,对数据的每条更新,journal都会记录该更新操作以及其索引的更新。

2)MongoDB会先将数据变更的记录写入到journal buffer中,每条记录(最大128KB)都会被缓存。

3)后续WiredTiger会将journal buffer中的数据写入disk:
从3.2版本开始,MongoDB实例每50ms将journal buffer中的数据刷到磁盘;

当写操作的write concern指定为j:true时,WiredTiger会强制将该写操作写入磁盘;

journal file文件大小限制为100M,当达到限制大小时会创建一个新的journal文件,WiredTiger将之前journal file中的记录写入到磁盘。

2.4 journal file

1)MongoDB会在dbpath路径下创建一个journal的子目录用来存放journal file

2)journal file包括每个客户端发起的所有的数据变更操作
journal记录了包括数据的变更以及索引的变更;

每条记录都有一个唯一的标识;

WiredTiger存储引擎下最小的journal记录为128 bytes.

3)默认情况下,journal file使用snappy进行压缩,可以通过storage.wiredTiger.engineConfig.journalCompressor进行配置

4)journal file大小限制为100MB,WiredTiger会预分配jounal file,且WiredTiger仅仅只维护last checkpoint之所需要的文件

三、snapshots and checkpoints

1、WiredTiger存储引擎支持MVCC,snapshots相当于某个时间点的内存数据的一致性视图。

2、当数据落盘时,WiredTiger将snapshot中的数据一致性写入data file中,并且将当前已经持久化的data file作为最近一次的checkpiont点。checkpoint点可以作为数据恢复的一个时间点。

3、从3.6版本开始,WiredTiger默认每60s刷新一次checkpoint(每60将snapshot刷盘一次);在3.6版本之前WireTiger默认每60或者journal达到2G时刷新一次checkpoint。

4、只有当新的checkpoint点创建成功后,WigerdTiger才会删除之前的checkpoint。

5、使用WigerdTiger存储引擎,在不开启journal日志的情况下,可以将数据恢复到最后一次checkpoint时刻,但是checkpoint之后的数据无法进行恢复(通过journal进行恢复)。

四、Compression数据压缩

1、在WiredTiger存储引擎下,可以对集合数据以及所有进行压缩,但是压缩会消耗一定的CPU资源。

2、默认情况下,WiredTiger使用snappy对集合数据进行压缩,使用prefix对索引数据进行压缩,在集合和索引创建时,也可以单独指定。

3、默认情况下,journal日志也会使用snappy进行压缩处理。

五、内存使用

1、WiredTiger下,MongoDB使用会利用WiredTiger内部缓存和文件系统缓存。
2、从MongoDB 3.4版本开始,WiredTiger内部缓存默认为50% of (RAM - 1 GB) 或者 256 MB 之间的最大值。
3、WiredTiger内部缓存相对于磁盘格式化的不同:
数据使用文件系统缓存与磁盘格式化是一样的,文件系统缓存主要是用来降低磁盘的IO消耗。
集合索引信息缓存到WiredTiger内部缓存相对磁盘格式化是不同的,但是也主要是为了减少对内存的使用。
集合数据在WiredTiger内部缓存中是不压缩的,相对于磁盘格式也是不同的,块压缩可以极大的节省磁盘空间的使用,但是,数据必须先解压,然后才能供server层使用。

4、对比文件系统缓存,MonogoDB会尽可能使用WiredTiger内部缓存以及其他线程空闲出来的内存。

5、若MongoDB实例内存使用率偏高,可以使用storage.wiredTiger.engineConfig.cacheSizeGB and --wiredTigerCacheSizeGB来控制。

六、磁盘使用

1、WiredTiger存储引擎可以重用已删除的文档(remove操作),这些空间出来的空间不会返回给操作系统。

2、可以通过db.collection.stats()来查看集合当前空间使用情况。

3、对于碎片化比较严重的集合,可以使用compact来进行处理。

更多技术信息请查看云掣官网https://yunche.pro/?t=yrgw

相关文章:

MongoDB的WiredTiger存储引擎

作者:太阳 从MongoDB 3.2 开始,MongoDB实例默认的存储引擎为WiredTiger,WiredTiger存储引擎具体以下几大优点: 文档级并发 将数据持久化到磁盘 快照和checkpoint 数据压缩 本地数据加密 一、文档级别并发 1、WiredTiger使…...

windows 版本Jenkins的Jenkinsfile中共享变量

场景 jenkins部署在windows服务器上的,需要在Jenkinsfile中获取命令执行的结果存入一个变量,然后在后续的执行中使用此变量 一开始想的是定义一个环境变量,如下所示, pipeline {agent anystages {stage(test) {steps {bat for /…...

Android-->产物收集(含apk文件重命名, aab文件重命名)

以前写过修改apk生成路径和文件名的文章, 如下: AS–›Gradle 7.0.0/4.1.0/4.0/3.3/3.0 修改APK生成路径和文件名(附AAR修改方式以及分析过程)_com.android.build.gradle.internal.api.libraryvaria-CSDN博客 这种方法入侵了gradle,破坏了原有的gradle环境, 经常会导致如下问…...

matlab实现迷宫最佳路径规划

在MATLAB中实现迷宫路径的最佳路径规划,我们可以使用多种算法,其中最常见和高效的是A搜索算法(A Search Algorithm)。A*算法结合了最佳优先搜索和Dijkstra算法的优点,通过启发式函数来评估每个节点的优先级&#xff0c…...

【自用】Python爬虫学习(二):网页解析的三种方式(re、bs4、xpath)

Python爬虫学习(二) 网页解析的三种方式1.正则表达式-re解析常用表达:re常用函数:在html中的运用: 2.BeautifulSoup解析常用语法:用法举例: 3.xpath解析示例代码1:示例代码2&#xf…...

从零到一:家政保洁小程序搭建全攻略与功能作用深度解析

目录 一、家政保洁小程序主要功能 二、家政保洁小程序搭建教程 (一)前期准备 (二)注册与选择工具 (三)设计与开发 (四)测试与优化 (五)发布与推广 一、…...

单元测试:为工程质量保驾护航

单元测试 单元测试是软件开发过程中确保代码质量和正确性的关键手段。它指的是对软件中的最小可测试单元(通常是函数或方法)进行验证,确保其行为符合预期。 基本概念 单元测试:验证软件中最小单元(通常是函数或方法…...

江协科技STM32学习笔记

第01章 STM32简介及开发环境搭建 1.1 STM32简介 1.1.1 STM32F103C8T6 系列:主流系列STM32F1 内核:ARM Cortex-M3 主频:72MHz RAM:20K(SRAM) ROM:64K(Flash) 供电…...

RabbitMQ再回首--往事如梦

这文章你就读吧,越读越🥸,一读一个不吱声 可靠的🐰警官:rabbitMQ,功能全面,不丢数据,体量小,容易堆积 声明exchange channel . exchangeDeclare ( String exchange , …...

头狼择校小程序

综述介绍 头狼择校,是头狼择™高校的简称,我们专注高校、大学的择校。倡导先嗅就业再择校,是预约工具和对话平台。帮您嗅招办、嗅教授、嗅学姐,预约择校有关的老师、顾问,助力考大学和考研的“双考”学生及家长了解就…...

【Electron】npm安装Electron项目失败报错问题和解决办法

前言 闲来无事,便想着研究一下Electron,没想到安装直接就卡住了 问题 npm ERR! RequestError: Hostname/IP does not match certificates altnames: Host: npm.taobao.org. is not in the certs altnames: DNS:*.tbcdn.cn, DNS:*.taobao.com, DNS:*.al…...

人工智能提示(prompt)工程入门

文章目录 人工智能提示(prompt)工程入门一、目的二、使用1、角色2、提示3、上下文4、例子5、输入6、输出 三、使用示例 人工智能提示(prompt)工程入门 一、目的 对于当前的发达的人工智能,我们可以广泛使用&#xff0…...

【机器学习的基本思想】模型优化与评估

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈Python机器学习 ⌋ ⌋ ⌋ 机器学习是一门人工智能的分支学科,通过算法和模型让计算机从数据中学习,进行模型训练和优化,做出预测、分类和决策支持。Python成为机器学习的首选语言,…...

公司电脑监控软件推荐(一口气了解8款!)一起领略电脑监控界的刀光剑影!

企业的内部管理的需求日益复杂,电脑监控软件作为提升工作效率、保障数据安全的重要工具,其重要性不言而喻。今天,我们将带您一口气了解8款顶尖的公司电脑监控软件,包括国内知名的“安企神”以及多款来自海外的优秀产品&#xff0c…...

设备图纸资料管理系统:数字化转型下的高效协同与安全管理新篇章

在当今高度信息化的时代,设备图纸资料管理系统作为企业资产与知识管理的重要一环,正日益凸显其不可或缺的价值。这一系统集成了先进的数字化技术与管理理念,旨在实现设备图纸资料的高效存储、快速检索、安全共享及版本控制,为企业…...

ArcGIS基础:标注转注记及简单处理

注记是一个静态的标签图层,能够独立的保存为文件,并且具有计算功能; 标注是一个动态的标签图形,无法以文件的形式进行存储和计算; 2者各有优势和劣势,根据具体需求进行选择 需要注意的是注记要存储在GDB…...

jQuery实现图片轮播效果

实现图片轮播效果,打开页面,每隔3秒切换至下一张图片;光标移入数字时,播放相应图片。 思路: (1)获取需要轮播的图片和展示的div。 (2)使用animate设置left值&#xff…...

关于天地图新手使用

1分钟带你了解学习天地图 适用新手 天地图API (tianditu.gov.cn) 文档api 先去注册key 把脚本放到index.html文件里面 <!-- 天地图的官网申请的tk --> <script src="http://api.tianditu.gov.cn/api?v=4.0&tk=申请的key" type="text/javascr…...

STM32与Arduino和ESP32对比分析

在嵌入式系统领域&#xff0c;STM32、Arduino 和 ESP32 是三种广泛使用的微控制器平台。它们各自具有独特的优势&#xff0c;适用于不同类型的项目。本文将详细比较这些平台&#xff0c;帮助您了解它们之间的差异、优势以及可能的应用场景。 一、架构与处理能力 STM32&#xf…...

125. 验证回文串【 力扣(LeetCode) 】

一、题目描述 如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后&#xff0c;短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。 字母和数字都属于字母数字字符。 给你一个字符串 s&#xff0c;如果它是 回文串 &#xff0c;返回 true &#xff1b…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...