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

数据库是一个系统(应用)最重要的资产之一,所以我们的数据库将从以下几个数据库来进行介绍。
MySQL
PostgreSQL
Redis
Etcd
我们在前面介绍MySQL和PostgreSQL的时候都介绍了存储引擎,本小节我们来介绍MongoDB的存储引擎。
存储引擎是 MongoDB 数据持久化、读写性能与并发控制的核心基石,直接决定数据库的适用场景与运维策略。MongoDB 3.0+ 支持引擎插拔,主流方案包括默认的 WiredTiger 与面向极致性能的 In-Memory 引擎,而早期的 MMAPv1 已被官方废弃。
WiredTiger 采用分层架构设计,各层职责清晰且可独立优化,兼顾性能与功能扩展性:
WiredTiger 的内存管理系统是其高性能的关键,笔者以前遇到的环境整个MongoDB大概占用内存60GB。
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;
}
};WiredTiger 突破传统存储引擎的锁粒度限制,基于多维度并发控制机制提升并发性能,核心设计包括:
并发场景 | WiredTiger 优势 | MMAPv1(旧引擎)限制 |
|---|---|---|
写 - 写冲突 | 文档级并发控制,锁粒度极小 | 仅支持集合级锁,冲突严重 |
读 - 写冲突 | MVCC 允许读写并行,无阻塞 | 读写互斥,性能损耗大 |
读 - 读冲突 | 完全无锁设计,并发无损耗 | 无明显问题,但整体锁机制重 |
WiredTiger 针对不同数据形态设计分层压缩方案,在不显著损耗性能的前提下大幅降低存储占用:
检查点是 WiredTiger 保障数据持久化的核心技术,既兼顾性能又提升故障恢复效率: