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

 

posted @   疯一样的狼人  阅读(1240)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示