今天看了mongodb的官方文档中的WiredTiger Storage Engine ,说说我对WiredTiger Storage Engine 的理解!

  在mongodb3.2版本以后,wiredTiger 存储引擎为默认的储存引擎。

Document Level Concurrency

  WiredTiger 的写操作使用了Document 级别的并发控制,因此多个clients可以同时同一个collection 中的不同的document  进行修改。

  为了尽可能多的读和写操作,WiredTiger 使用了optimistic  concurrency control(乐观的并发控制),相当于乐观锁,WiredTiger的全局的专一的锁,仅仅存在于database 和 collections 级别,例如:drop 一个collections,需要一个database级别的锁。当存储引擎在database 和collection的锁之间发生冲突时,其中的一个将会引发数据库写的冲突导致mongdb 去重新进行此操作。

Snapshots and Checkpoints

  WiredTiger 使用 多版本并发控制(MVCC)。再开始的操作中,WiredTiger 为这个事务提供一个数据的时间点的快照(snapshot),一个快照呈现一组在内存中的数据的视图。

  当写进磁盘时,WiredTiger 把所有的在snapshot中的数据通过相同的方法传递到磁盘中的数据文件。把在数据文件中的久经耐用的数据作为一个检查站(checkpoint),这个检查站确保数据文件和上一个检查站的数据是一致的,包括最后一个检查站。eg:检查站可以作为数据的恢复的点。mongodb配置的WiredTiger 去创建的站点是在间隔60秒或者2 GB的日志数据。

  在写一个新的站点期间,如果前面一个站点仍然是有效的,就这点而论,如果mongodb 意外结束或者突然遇到一个错误,再重新开始之前,mongodb 可以从上一个有效的checkpoint恢复数据。

  当WiredTiger 元数据的表被原子性的更新到新的检查站点的说明文档时,这个新的站点变得可用和稳定,一但新的站点变的可用,WiredTiger会释放pages从旧的检查站点。

Journal

  WiredTiger 使用一个write-ahead 处理log, 并且结合检查站点去确保数据的耐久性。

  WiredTiger 日志呈现了所有的数据在检查站点之间的变化,如果mongodb在检查站点之间退出,它使用日志去重新从上一个检查站点更新所有的被修改的数据,信息更新的频率和mongodb把日志数据写到磁盘的频率相同。WiredTiger 的日志是使用了快速压缩库被压缩,如果自己想指定一个混合的压缩运算或者不压缩使用 storage.wiredTiger.engineConfig.journalCompressor 

  WiredTiger的最小的log 记录大小是128 bytes。如果一个log 记录小于等于128 bytes, WiredTiger 不会压缩这个log 记录。

Compression

  在mongodb中,使用WiredTiger ,mongodb 支持压缩为所有的collection 和index ,压缩是使用额外CPU的开支减少存储空间。默认的情况下,WiredTiger使用块级别的压缩,所有的collections 被使用快速压缩库,所有的索引(index)被使用前缀压缩。在压缩collections 的时候 ,块级别的压缩用 zlib  也是可用的,去指定一个轮流的压缩运算或者不压缩,使用storage.wiredTiger.collectionConfig.blockCompressor ,假如你不想去压缩index,你可以看下storage.wiredTiger.indexConfig.prefixCompression

  对于大多数工作的负载,默认的压缩设置平衡了存储效率和处理要求。

Memory Use

  mongodb 使用WiredTiger,mongodb 利用WiredTiger内部的cache和文件系统的cache。

  在mongdb 3.4 的版本以后,WiredTiger 内部的cache将变得更大:50%内存减去1GB 或者是256MG,通过文件系统的cache ,mongodb 自动的使用所有的空闲的内存,这些内存是不被WiredTiger cache 或者其他进程使用的。数据是在文件系统的cache里被压缩的。去调整WiredTiger内部cache 的大小可以看storage.wiredTiger.engineConfig.cacheSizeGB

切记 ,不要调整WiredTiger内部cache的大小超过默认值。

[mongodb] WiredTiger Storage Engine的更多相关文章

  1. [mongodb] MMAPv1 Storage Engine

    MMAPv1 是mongodb 在3.2以前默认的存储引擎,在3.2 之后默认的存储引擎为WiredTiger,MMAPv1存储引擎基于内存映射文件,它擅长高容量的插入,读取和更新. Journal ...

  2. storage engine option for directoryPerDB

    Requested option conflicts with current storage engine option for directoryPerDB; you requested true ...

  3. MongoDB出现The default storage engine 'wiredTiger' is not available之问题解决

    问题描述:低版本MongoDB存在该问题(版本为3.x),高版本则无该问题. 参考解决问题链接:MongoDB学习—(1)安装时出现The default storage engine ‘wiredT ...

  4. MySQL报错:Got error 28 from storage engine

    今天碰到数据库出错: Got error 28 from storage engine 查了一下,数据库文件所在的盘应该没事,应该是数据库用的临时目录空间不够 问题原因: 磁盘临时空间不够导致. 解决 ...

  5. MySQL - 问题集 - "Got error 28 from storage engine"

    数据库的临时目录空间不够,修改配置文件中的tmpdir,指向一个硬盘空间很大的目录即可. windows下,找到配置文件my.ini. [mysqld] tmpdir=D:/work/tool/mys ...

  6. Mysql: ERROR 1030 (HY000): Got error 28 from storage engine

    今天帮同事解决一个问题的时候,遇到了下面的异常: ERROR 1030 (HY000): Got error 28 from storage engine 我们的数据库是mysql,我们的sql语句是 ...

  7. MEMORY Storage Engine MEMORY Tables TEMPORARY TABLE max_heap_table_size

    http://dev.mysql.com/doc/refman/5.7/en/create-table.html You can use the TEMPORARY keyword when crea ...

  8. mysql 1030 Got error 28 from storage engine

    mysql 1030 Got error 28 from storage engine 错误原因:磁盘临时空间不够. 解决办法:df -h 查看设备存储的使用情况 du -h --max-depth= ...

  9. 在phpmyadmin中执行sql语句出现的错误:Unknown storage engine 'InnoDB'

    在phpmyadmin中执行sql语句出现的错误:Unknown storage engine 'InnoDB' 解决方法:解决方法:             1.关闭MySQL数据库       2 ...

随机推荐

  1. MySQL数据库中的存储引擎

    1.认识存储引擎 存储引擎指定了表的类型,即如何存储和索引数据.是否支持事务等,同时存储引擎也决定了表在计算中的存储方式. 存储引擎是以插件的形式被MySQL软件引入的,所以可以根据应用.实际的领域来 ...

  2. nginx已经启动 无法访问页面

    通过IP访问,可以看到  welcome nginx 的提示 下面我重启linux服务器,重启后通过ip访问,死活连接不上了?没办法了,只有在百度和google 最后发现问题不是出在nginx上,而是 ...

  3. Java Tomcat7性能监控与优化详解

    1.   目的 通过优化tomcat提高网站的并发能力. 2.   服务器资源 服务器所能提供CPU.内存.硬盘的性能对处理能力有决定性影响. 3.   优化配置 3.1. 配置tomcat管理员账户 ...

  4. [Go语言]从Docker源码学习Go——结构和函数的定义

    Docker在最近很火,而作为Docker的开发语言-Go也再次被大家提到. 已经使用Docker一段时间了,但是对于源码,尤其是其开发语言Go却一直是一知半解. 最近准备利用空余时间从Docker源 ...

  5. 服务器1M带宽同时能承受多少人在线

    最近网站的流量一直在增长,这个肯定是好事.不过也有个麻烦的问题,目前本站用的的虚拟空间,每月流量30G,虽然95%的图片都已外链,但流量还是很吃紧,日均2000ip,4月份流量34g左右,单JS的响应 ...

  6. linux7开机自启动东方通tongweb

    自启动服务: 可以通过把TongWeb设置为系统服务来实现. 具体实现: 以root用户进行操作,在/etc/init.d目录下编写TongWeb的服务脚本tongweb,用来控制TongWeb的启动 ...

  7. SQL小练习

    1.现在有两张表订单表TB_ORDER,包括字段:order_id(订单号),username(用户名),amount(订单金额),order_time(下单时间), product_id(商品ID) ...

  8. Shell下syntax error: operand expected (error token is “-”)

    在这个监控实时网口速率的脚本中,第21,22行存在错误: #!/bin/bash #Modified by lifei4@datangmobile.cn echo ===DTmobile NetSpe ...

  9. Django之html-模板继承

    在编程的过程中,我们经常会重复性的写了很多的代码,比如一个页面的框架部分,这样我又多少个页面就得写上多少次,这样既不好维护,也不够高效,所以我们引出了html的模板继承部分. 1.写好一个html文件 ...

  10. Java线程安全和非线程安全

    ArrayList是非线程安全的,Vector是线程安全的:HashMap是非线程安全的,HashTable是线程安全的:StringBuilder是非线程安全的,StringBuffer是线程安全的 ...