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>
集合聚合管道(重点)
部署集群分片(重点)
- 写策略
{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版权协议,转载请附上原文出处链接和本声明。