MongoDB--三、存储引擎

名词解析:

page:操作系统页面文件,磁盘数据组成单位

checkpoint:

3.1、mongoDB存储引擎查看

mongoDB3.2版本之后选择了wiredTiger作为默认存储引擎(不是inMemory引擎),查看数据库存储引擎语句如下:

db.serverStatus()

在这里插入图片描述

3.2、存储引擎解析

官网:http://source.wiredtiger.com/2.0.1/

wiredTiger通过Btree管理数据,B树的数据结构如下图。

按4照Mongodb默认的配置,WiredTiger的写操作会先写入Cache,并持久化到WAL(Write ahead log),每60s或log文件达到2GB时会做一次Checkpoint,将当前的数据持久化,产生一个新的快照。Wiredtiger连接初始化时,首先将数据恢复至最新的快照状态,然后根据WAL恢复数据,以保证存储可靠性。

在这里插入图片描述
(1)Wiredtiger的Cache采用Btree的方式组织,每个Btree节点为一个page,root page是btree的根节点,internal page是btree的中间索引节点,leaf page是真正存储数据的叶子节点;btree的数据以page为单位按需从磁盘加载或写入磁盘。

在这里插入图片描述

(2)Wiredtiger采用Copy on write的方式管理修改操作(insert、update、delete),修改操作会先缓存在cache里,持久化时,修改操作不会在原来的leaf page上进行,而是写入新分配的page,每次checkpoint都会产生一个新的root page。
在这里插入图片描述

(3)Checkpoint时,wiredtiger需要将btree修改过的PAGE都进行持久化存储,每个btree对应磁盘上一个物理文件,btree的每个PAGE以文件里的extent形式(由文件offset + size标识)存储,一个Checkpoit包含如下元数据:

  • root page地址,地址由文件offset,size及内容的checksum组成

  • alloc extent list地址,存储从上次checkpoint起新分配的extent列表

  • discard extent list地址,存储从上次checkpoint起丢弃的extent列表

  • available extent list地址,存储可分配的extent列表,只有最新的checkpoint包含该列表

  • file size 如需恢复到该checkpoint的状态,将文件truncate到file size即可

    (4) Mongodb里一个典型的Wiredtiger数据库存储布局大致如下:

$tree

.

├── journal

│   ├── WiredTigerLog.0000000003

│   └── WiredTigerPreplog.0000000001

├── WiredTiger

├── WiredTiger.basecfg

├── WiredTiger.lock

├── WiredTiger.turtle

├── admin

│   ├── table1.wt

│   └── table2.wt

├── local

│   ├── table1.wt

│   └── table2.wt

└── WiredTiger.wt
  • WiredTiger.basecfg存储基本配置信息
  • WiredTiger.lock用于防止多个进程连接同一个Wiredtiger数据库
  • table*.wt存储各个tale(数据库中的表)的数据
  • WiredTiger.wt是特殊的table,用于存储所有其他table的元数据信息
  • WiredTiger.turtle存储WiredTiger.wt的元数据信息
  • journal存储Write ahead log

在这里插入图片描述

一次Checkpoint的大致流程如下

对所有的table进行一次Checkpoint,每个table的Checkpoint的元数据更新至WiredTiger.wt
对WiredTiger.wt进行Checkpoint,将该table Checkpoint的元数据更新至临时文件WiredTiger.turtle.set
将WiredTiger.turtle.set重命名为WiredTiger.turtle
上述过程如中间失败,Wiredtiger在下次连接初始化时,首先将数据恢复至最新的快照状态,然后根据WAL恢复数据,以保证存储可靠性。

3.3、内存调整

官网1:https://docs.mongodb.com/v4.2/reference/configuration-options/#storage.wiredTiger.engineConfig.cacheSizeGB

官网2:https://docs.atlas.mongodb.com/sizing-tier-selection/

WiredTiger数据引擎内存缓存限制,推荐大于8(GB)

storage:
	wiredTiger:
		engineConfig:
			cacheSizeGB: 8

官网:https://docs.mongodb.com/v4.2/reference/parameters/#param.maxIndexBuildMemoryUsageMegabytes

索引内存限制,推荐大于300(MB)

setParameter:
	maxIndexBuildMemoryUsageMegabytes: 300

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值