Skip to content

体系结构与物理存储

mongod 是保存数据并处理请求的数据库进程。单机、复制集成员和分片中的 Shard 都运行 mongod;分片集群还使用 mongos 路由请求,并用 Config Server Replica Set 保存集群元数据。


运行组件

组件作用
网络与命令层认证、解析命令、选择执行计划并返回结果
WiredTiger Cache缓存数据页、索引页和更新版本
Storage Engine管理页、Checkpoint、压缩、并发与持久化
JournalWiredTiger 的 Write-Ahead Log,用于恢复 Checkpoint 后的变化
Oplog复制集的逻辑操作历史,Secondary 用于复制和重放
Diagnostic Log记录运行事件和慢操作,不用于恢复数据

Journal 与 Oplog 不是一回事:Journal 解决单个节点的崩溃恢复;Oplog 解决复制集成员之间的数据复制,也支撑 Change Stream 等能力。


WiredTiger

WiredTiger 是 MongoDB 的默认存储引擎。它使用文档级并发控制,并通过 Snapshot 提供操作的一致视图。数据和索引支持压缩,但压缩比例取决于字段重复、值分布、索引数量和压缩算法。

WiredTiger Cache 与操作系统文件缓存共同工作。数据库进程内存看起来较高不一定是泄漏;判断压力需要同时观察 Cache Dirty、Eviction、读入写出、Page Fault、磁盘延迟和系统可回收内存。


Checkpoint 与 Journal

Checkpoint 提供数据文件的一致恢复点;Journal 保存两个 Checkpoint 之间需要恢复的变化。只有 Journal 没有数据文件无法恢复完整数据库,只有旧 Checkpoint 没有所需 Journal 则会丢失其后的变化。

现代版本中 Journaling 默认且持续启用。持久性仍取决于 Write Concern、文件系统、磁盘控制器是否真实履行持久化语义,以及运行环境是否完整保存数据目录。


数据文件与空间

WiredTiger 为 Collection 和 Index 管理独立的内部表与文件。删除文档后释放的空间通常先供同一数据文件内部复用,不等于文件立即缩小并归还操作系统。

影响磁盘占用的主要部分包括:

  • Collection 数据和文档填充空间。
  • 所有 Index,数组索引可能为一个文档产生多个索引键。
  • Journal、Oplog 和复制或恢复保留的数据。
  • WiredTiger History Store 与长时间 Snapshot 需要的历史版本。
  • 临时排序、构建索引、备份快照和诊断日志。

磁盘容量规划不能只用业务 BSON 大小乘副本数。索引、压缩率、更新放大、Oplog 窗口、初始同步和维护操作都需要独立余量。

参考资料