WiredTiger
- 提供document级的锁。
- 以B-tree方式存放数据。
- 以Collection为单位生成数据文件。
- 每50ms或者达到100MB 从内存把数据同步到 journal 。每份journal 大约100MB.。
- 每60秒(或者3.6版本以前,2GB文件大小为标准)创建一个checkpoint,把数据以snapshot的方式存放到硬盘上。
- 工作的时候,先写到unused-data 文件,之后再后台放入数据文件中。
- upate时,实际上是写入一个新的doucument 而不是覆盖原有的数据 (MMAPV1为覆盖),也就是说旧数据会删除但空间不会被释放
- 4.0 版本开始,replica set成员必须启动journal
Cache
wiredTiger cache :
- Collection 数据,Uncompressed 与硬盘上存放格式不同
- Index存放格式也不同,但是压缩了,可以利用prefix 压缩的特性,节省RAM
- 默认WT cache大小(RAM-1)*50%,最小256MB
File system cache
- 存储数据为compressed,且于硬盘上存储格式相同。 存在的意义是操作系统为了降低磁盘I/O
- WT cache没有使用的剩余内存空间,会被FS cache利用。

压缩
每个collection和index 可以使用不同压缩方式
数据压缩:
WT engine 默认启用对于所有collection的压缩
- snappy, 快,压缩率低 (默认压缩算法)
- zlib,压缩率高,慢
- none,不压缩
索引前缀压缩
索引默认使用前缀压缩
MMAPv1 —4.0开始被官方淘汰,以后版本会被正式移除
- collection级锁
- Writes 原子性由journal提供
- 每60秒 把数据直接存放到硬盘上。
- 每100ms 从private-view把数据同步到 journal 。
Padding
数据的存储在硬盘是连续的。padding的目的是为已存储的数据增加提供空间。
Padding存储时,每个文档占用的空间计算:
- 小于2MB时,使用2的次方倍为单位(Power of 2 sized allocations)
- 大于等于2MB,每次增加2MB。最大容量64MB。
padding前:

这时候如果d2需要修改,且占用的空间发生增加。就需要移动D2来满足存储,原来D2存储的位置就会空出来。同时还需要修改index对应D2的物理地址。

原D2占用的空间,可以在以后被新的且小于该容量的document占用

padding后:





