• MongoDB存储引擎(中)——WiredTiger


      上一篇博文介绍了MongoDBMMAPv1存储引擎,本文接着介绍MongoDB另一个存储引擎——WiredTigerWiredTiger是在MongoDB3.0版本引入的,并且在MongoDB3.2版本开始成为MongoDB默认的存储引擎。相比较MMAPv1WiredTiger功能更强大,而且具有更高的性能。

      相对于MMAPv1WiredTiger进行了一系列改进:

    1. 文件空间分配方式改进

      MMAPv1存储引擎是在数据库级别分配文件的,将每个数据库中所有的集合和索引都混合存储在数据库文件中,即使删除了某个集合或索引,其占用的磁盘空间也很难及时自动回收。WiredTIger则在集合和索引级别分配文件,将每个数据库中所有的集合和索引都存储在单独的文件中,集合或索引删除后,其对应文件即可删除,磁盘空间回收方便。

    WiredTiger的一些数据文件:

    mongod.lock:用于防止多个进程连接同一个WiredTiger数据库

    .wt文件:存储各个集合的数据,每个文件100MB

    WiredTiger.wt:用于存储所有集合的元数据信息

    WiredTiger.turtle:用于存储WiredTiger.wt的元数据信息

    journal文件夹:用于存储日志文件(Write ahead log

    2. 文档级别的并发控制

      WiredTiger存储引擎使用文档级别锁,同一时刻多个写操作可以修改同一个集合中不同的文档,但不能修改同一个文档。这使得WiredTiger存储引擎的并发处理能力比MMAPv1更好。

    3. 通过检查点和预写日志实现数据持久化

      按照MongoDB默认的配置,WiredTiger的写操作会先写入CacheBTree构),Cache大小达到128KB时便将其久化到预写日志文件(Write ahead log)WiredTiger60s或日志文件大小达到2GB时会做一次检查点Checkpoint,产生指定时间点的数据库快照(内存中数据的一致性视图),将快照中的所有数据以一致性方式持久化到数据文件中,保证数据文件和内存数据是一致的。Wiredtiger连接初始化时,首先将数据恢复至最新的快照状态,然后根据预写日志文件恢复数据,以保证存储可靠性。

    4. 内存使用上限可配置

      使用WiredTiger存储引擎时,MongoDB数据缓存分两部分:内部缓存和文件系统缓存。内部缓存大小可以使用--wiredTigerCacheSizeGB参数来设置,默认值为:1GBRAM60%1GB之间,取两值中较大者。文件系统缓存大小则不固定,MongoDB自动使用系统空闲的内存,且数据在文件系统缓存中是压缩存储的。

    5. 数据压缩

      使用WiredTiger存储引擎时,数据库的集合与索引、日志文件都是压缩存储的,节省了磁盘空间。WiredTiger默认情况下,集合数据使用块压缩算法,索引数据则使用前缀压缩算法。这使得数据占用磁盘空间少,读写速度快,花费I/O时间少。

      集合中数据比较少时,压缩和无压缩的写性能相单,无压缩读性能反而比压缩读性能好。当集合数据很多时,压缩的读写性能则都要比无压缩的读写性能好。

     

    一篇剖析WiredTiger数据组织结构的文章:http://mini.eastday.com/mobile/160630190233714.html

     

  • 相关阅读:
    461.mysql数据的备份和恢复
    thinkcmf安装遇到的问题【服务器rewrite】未开启
    navicat for mysql 中文破解版(无需激活码)
    centos7--docker安装gitlab时权限异常
    Cenos7 ++Zabbix监控(同个节点)
    Centos-第一次机子遭受黑客入侵??很鸡冻
    Linux运维--企业sudo权限规划详解 (实测一个堆命令搞定)
    Centos7--sudo的使用和配置
    网络技术--IPv4子网掩码的理解和计算。
    CentOS7--部署JSP网站项目(环境架构jsp+mysql+tomcat)
  • 原文地址:https://www.cnblogs.com/wujuntian/p/8458402.html
Copyright © 2020-2023  润新知