MongoDB存储引擎

1.那几种存储引擎

    WiredTiger MMAPv1  In-Memory


2.WiredTiger优势

    最大化使用缓存:文件系统缓存  WiredTiger内部缓存
    
    高吞吐量:写时复制
    
    多核的可扩展性


3.WiredTiger特性

    文档级别的并发控制 MVCC 多版本并发控制机制

    快照与检查点 创建Checkpoint时间间隔60s  或产生2GBJournal日志文件    

    预写日志  journal预写事务日志,不开启 每分钟做全量checkpoint (storage.syncPeriodSecs 默认一分钟  即有一分钟数据会丢失) 

    journal开启参数  storage.journal.enabled:true
    storage.journal.commitlneternalMs 刷盘时间 100ms

    事务 
        存储使用 B-树  

    内存使用  缓存策略 : Read/Write Through 模式 
        内部内存    max(0.5*(ram-1GB),256M)
        缓存淘汰策略: 阈值控制


参数阀值含义
80后台evict线程淘汰cleanpage
95用户线程加入evict的任务
5后台evict线程淘汰dirtypage
20用户线程加入evict的任务

磁盘空间回收  remove  drop (空间会立即回收,磁盘整理)
                显示开启 compact free碎片空间 db.runCommand({compact:"collection"})
                副本集上 db.runCommand({compact:"collection",force:true})
                compact 会在db上加互斥写锁
                将文件往前面空闲空间写,逐步truancate文件回收物理空间, 前面80%空间有无20%用于写入后面20%的数据| 90% 10% 10%

索引压缩 前缀压缩算法

压缩算法(重点 wiredTiger)
    snappy  zlib  zstd
    性能 none>zstd>=snappy>zlib
    压缩比 zstd > zlib > snappy > none
    默认使用 snappy
  storage:
    wiredTiger:
        engineConfig:
            cacheSizeGB:<number>
            journalCompressor: none|snappy|zlib|zstd
            directoryForLndexes:<boolean>
        collectionConfig:
            blockCompressor: none|snappy|zlib|zstd
        indexConfig:
            prefixCompression:<boolean>


    集合聚合管道(重点)
    
    部署集群分片(重点)

image

  • 写策略
{w:<value>,j:<boolean>,wtimeout:<number>}

Unacknowledged: 客户端发到socket就返回

Acknowledged: 客户端发送接口等待服务器确认

Journaled: 服务器写入硬盘文件后返回

ReplicaAcknowledged: 类似于Acknowledged,等待多个机器返回响应

客户端指定:至少写入两个节点,超时时间5s
    db.products.insert({item:"abc",qty:100,type:"xyz"},
                       {writeConcern:{w:2,wtimeout:5000}})
  • 读策略
local : 本地
majority:绝大部分节点  replication.enableMajorityReadConcern
linearizable: 大同与 majority 对于同一文档的并发读、写操作是线性的
snapshot: 事务开始时创建快照,保存当前引擎所有事务的状态,确定哪些可见不可见,在事务中使用快照提供事务读

版权声明:本文为qq_24434491原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。