MongoDB存储引擎
一. WiredTiger引擎
1. MongoDB3.2版本以上,设置为存储引擎。
2. 基于文档级别的并发控制功能(锁机制)
(1). 锁级别:文档级别
(2). 如何监控锁的信息
db.serverStatus().lock
db.currentOp()
mongotop
mongostat
(前两条在MongoDB里执行,后两条在bin目录下执行)
测试数据:for(var i=1;i<=1000000;i++){
db.testlock.insert({"_id":i,"action":"Write new documentatition","currentNumber":i});
}
3.检查点机制:checkpoint
(1). 当MongoDB发生检查点以后,以一致性的方式(快照)把内存中所有的脏数据写到数据文件上
(2). 什么时候发生检查点
a.时间间隔:60秒
b.日志文件大小(journal日志):2G
MongoDB存储过程
正常流程:客户端插入文档------->内存中保存文档,并将对应的操作写入journal日志中------->产生检查点------->内存中数据写入磁盘
服务器宕机:当服务器挂掉以后内存中未被保存的数据丢失,MongoDB到journal日志中查找日志内容,找回丢失的数据,待到检查点产生以后在写入磁盘。
4.预写日志,数据压缩,数据加密
(1). 预写日志:当插入数据的时候,首先将数据信息对应的日志写到日志文件中(journal);一旦产生检查点,将内存中的数据写入到数据文件中
(2). 数据压缩:3.0后版本中,提供三个压缩选项
*无压缩
*Snappy:默认压缩方式
*zlib:类似gzip
一个小栗子:db.createCollection("email",{storageEngine:{wiredTiger:{configString:'block_compressor='zlib''}}})
5.其他功能:
(1).设置有效内存使用:
(*)内部缓存: 大小: 默认 1G或者 50% RAM ~ 1G
--wiredTigerCacheSizeGB arg maximum amount of memory to allocate
for cache; defaults to 1/2 of physical RAM
(*)文件系统缓存
(2)空间的回收
(*)当删除数据(文档、集合)后,MongoDB并不会将空间释放会OS
(*)会在数据文件中,维护空的列表信息(当下次再这个集合中进行添加操作时,MongoDB不需要再去OS请求内存空间,可以直接使用维护的的空列表信息,这样就提升了性能)
(*)使用命令:compact 回收空间
db.runCommand({compact:'集合'})
一个?:对员工表回收空间: db.runCommand({compact:'emp'})
二、MongoDB也会将对应的日志存入Journal日志中,防止数据的丢失。
1、以WiredTiger进行介绍
2、每个Journal日志大小:100M
3、启动MongoDB的时候,默认启用日志记录 参数:--journal