MongoDB2.3后默认采用WiredTiger存储引擎。
组成
WiredTiger由三部分组成:
- Mongos: 负责查询请求的路由和对ShardServer的管理;
- ConfigServer: 记录全局配置信息
-
ShardServer:完成实际查询和数据提取操作
Transport Layer业务层
Transport Layer
是处理请求的基本单位。Mongo有专门的listener
线程,每次有连接进来,listener
会创建一个新的线程conn
负责与客户端交互,它把具体的查询请求交给network
线程,真正到数据库里查询由TaskExecutor
来进行。
写请求
WiredTiger的写操作会默认写入Cache
,并持久化到WAL
(Write Ahead Log),每60s做一次checkpoint
,产生快照文件。WiredTiger初始化时,恢复至最新的快照状态,然后根据WAL恢复数据,保证数据的完整性。
Cache是基于BTree的,节点是一个page,root page是根节点,internal page是中间索引节点,leaf page真正存储数据,数据以page为单位与磁道读写。
一致性
- WiredTiger使用
Copy on Write
管理修改操作。修改先放在cache中,并持久化,不直接作用在原leaf page,而是写入新分配的page,每次checkpoint产生新page。
相关文件:
- WiredTiger.basecfg: 存储基本配置信息,与ConfigServer有关系
- WiredTiger.lock: 定义锁操作
- table*.wt: 存储各张表的数据
- WiredTiger.wt: 存储table* 的元数据
- WiredTiger.turtle: 存储WiredTiger.wt的元数据
- journal: 存储WAL
- 一次checkpoint过程
- 对每个table*.wt做一次checkpoint,各自的元数据都更新到WiredTiger.wt中
- 对WiredTiger.wt做一次checkpoint,将元数据存储到WiredTiger.turtle.set中,整个过程完成之前,原来的WiredTiger.turtle继续发挥作用,保证可用性。待过程完成后,将WiredTiger.turtle.set重命名为WiredTiger.turtle。