首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >MongoDB 核心原理(一):存储引擎(WiredTiger)详解

MongoDB 核心原理(一):存储引擎(WiredTiger)详解

作者头像
运维小路
发布2026-01-26 12:53:18
发布2026-01-26 12:53:18
1060
举报
文章被收录于专栏:运维小路运维小路

作者介绍:简历上没有一个精通的运维工程师,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

数据库是一个系统(应用)最重要的资产之一,所以我们的数据库将从以下几个数据库来进行介绍。

MySQL

PostgreSQL

MongoDB(本章节)

Redis

Etcd

我们在前面介绍MySQL和PostgreSQL的时候都介绍了存储引擎,本小节我们来介绍MongoDB的存储引擎。

存储引擎是 MongoDB 数据持久化、读写性能与并发控制的核心基石,直接决定数据库的适用场景与运维策略。MongoDB 3.0+ 支持引擎插拔,主流方案包括默认的 WiredTiger 与面向极致性能的 In-Memory 引擎,而早期的 MMAPv1 已被官方废弃。

一、分层解耦的多层架构体系

WiredTiger 采用分层架构设计,各层职责清晰且可独立优化,兼顾性能与功能扩展性:

  1. 应用层:对接 MongoDB 查询层,承接上层业务的读写请求;
  2. 会话管理层:负责 Connection/Session 的生命周期管理,处理连接与会话隔离;
  3. 事务管理层:实现完整的 ACID 事务能力,基于 MVCC(多版本并发控制)保障事务一致性;
  4. 数据结构层:灵活支持 B-Tree 和 LSM Tree 两种存储结构,适配不同读写场景;
  5. 块管理层:对数据块进行统一调度、分配与管理,优化数据存取效率;
  6. 文件系统层:封装操作系统底层接口,实现跨平台的文件操作抽象。

2. 内存管理架构

WiredTiger 的内存管理系统是其高性能的关键,笔者以前遇到的环境整个MongoDB大概占用内存60GB。

代码语言:javascript
复制
class WiredTigerCache {
private:
    // 三层缓存体系
    CacheTree working_set;      // 工作集缓存
    EvictionQueue dirty_pages;  // 脏页队列
    CleanPagePool clean_pool;   // 干净页池

public:
    // 智能缓存管理
    void manageCache(PageRequest request) {
        // 1. 首先检查工作集缓存
        if (working_set.contains(request)) {
            return working_set.get(request);
        }

        // 2. 未命中则从磁盘加载
        Page page = diskStorage.load(request);

        // 3. 根据LRU-K算法管理缓存
        if (cache.isFull()) {
            evictPagesUsingLRU_K();  // 使用LRU-K淘汰算法
        }

        // 4. 更新访问统计
        updateAccessStatistics(page);

        return page;
    }
};

该设计通过分层缓存降低磁盘 IO 频次,结合 LRU-K 淘汰算法保障缓存命中率,最大化内存利用效率。

三、文档级精细化并发控制

WiredTiger 突破传统存储引擎的锁粒度限制,基于多维度并发控制机制提升并发性能,核心设计包括:

  1. 乐观并发控制:绝大多数读操作无需获取锁,减少锁竞争开销;
  2. MVCC 多版本并发控制:每个事务独立读取数据的一致性快照,读写互不阻塞;
  3. 时间戳排序:通过全局时间戳保障所有操作的顺序一致性。

并发性能实测对比

并发场景

WiredTiger 优势

MMAPv1(旧引擎)限制

写 - 写冲突

文档级并发控制,锁粒度极小

仅支持集合级锁,冲突严重

读 - 写冲突

MVCC 允许读写并行,无阻塞

读写互斥,性能损耗大

读 - 读冲突

完全无锁设计,并发无损耗

无明显问题,但整体锁机制重

四、多维度创新数据压缩策略

WiredTiger 针对不同数据形态设计分层压缩方案,在不显著损耗性能的前提下大幅降低存储占用:

  1. 块压缩:对数据块进行通用压缩,适配各类结构化 / 非结构化数据;
  2. 前缀压缩:针对 B-Tree 索引键的前缀重复特性去重,减少索引存储体积;
  3. 记录压缩:基于列式存储思路对文档级数据压缩,提升单条记录存储效率;
  4. 日志压缩:对 WAL(预写日志)进行实时压缩,降低日志磁盘占用。

五、平衡性能与安全的智能检查点机制

检查点是 WiredTiger 保障数据持久化的核心技术,既兼顾性能又提升故障恢复效率:

  • 作为 WAL 日志刷新到数据文件的触发节点,确保修改数据最终持久化;
  • 默认触发阈值为 60 秒或 2GB 日志量,支持通过参数灵活调整;
  • 执行时生成数据一致性快照,崩溃后仅需恢复检查点后的增量日志;
  • 避免重启时全量回放日志,大幅缩短故障恢复耗时;
  • 检查点信息存储于数据文件中,记录日志最新持久化位置,保障恢复准确性。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-12-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维小路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MongoDB(本章节)
  • 一、分层解耦的多层架构体系
    • 2. 内存管理架构
    • 该设计通过分层缓存降低磁盘 IO 频次,结合 LRU-K 淘汰算法保障缓存命中率,最大化内存利用效率。
  • 三、文档级精细化并发控制
    • 并发性能实测对比
  • 四、多维度创新数据压缩策略
  • 五、平衡性能与安全的智能检查点机制
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档