本篇文章带大家了解关于mongodb的相关知识,介绍一下MongoDB中的存储引擎,希望对大家有所帮助!
简单回顾
上次我们说到了关于 mongodb 的集群,分为主从集群和分片集群,对于分片集群中的分片这里需要注意如下几点,一起来回顾一下:
- 对于热点数据
某些分片键(分片键是集合中每个文档中存在的索引字段或复合索引字段)会导致所有的 读或者写请求 都操作在单个数据块或者分片上,这样就会导致单个分片服务器负荷过重,那么自增长的分片键容易导致写的问题【推荐:MongoDB视频教程】
- 对于不可分割的数据块
对于粗粒度的分片键,可能会导致许多文档使用相同的分片键
这样的话这些文档就不能被分割为多个数据块,这就会限制了mongodb 的均匀分布数据能力
- 对于查询障碍
分片键与查询是没有关联的,这样会造成糟糕的查询性能
对于以上注意点,咱们做到心中有数,实际工作中遇到类似的问题,就可以尝试学着处理了
今天我们简单了解一下 mongodb 的存储引擎是个啥
存储引擎
说到 mongodb 的存储引擎,我们要知道是在 mongodb 3.0 的时候引入了可插拔存储引擎的概念
现在主要有这几个引擎:
- WiredTiger 存储引擎
- inMemory 存储引擎
在存储引擎刚出来的时候,默认是使用的 MMAPV1 存储引擎的
MMAPV1 引擎,看名字我们大概就知道他是使用的是 mmap 来做的,运用的是 linux 内存映射的原理
现在不使用 MMAPV1 引擎,是因为 WiredTiger 存储引擎更优,例如对比一下 WiredTiger 就有如下优势:
- WiredTiger 读写操作性能更好
WiredTiger 能更好的发挥多核系统的处理能力
-
WiredTiger 锁的粒度更小
MMAPV1引擎使用表级锁,当某个单表上有并发的操作,吞吐就会受到限制
而 WiredTiger 使用文档级的锁 ,这就带来并发及吞吐的提高
- WiredTiger 压缩方式更好
WiredTiger 使用前缀压缩,比起 MMAPV1 更节省对内存空间的损耗
并且 WiredTiger 还提供压缩算法, 这样就可以大大降低对硬盘资源的消耗
WiredTiger 引擎 的写入原理
通过上图我们可以看出, WiredTiger 写入磁盘的原理也是很简单的
- 应用请求来到 mongodb ,mongodb 做处理,并将结果存入缓存中
- 当缓存中达到 2 个 G 的时候,或者 当 60 s 定时器到时间的时候,就会将缓存中的数据刷到磁盘中去
细心的 xdm 就知道,那么如果现在正好是 59 秒,1个多 G 的时候,缓存中的数据还没有同步到磁盘中,mongodb 就异常挂掉了,那么 mongodb 岂不是会丢失数据?
我们用手指头都可以想到,mongodb 的设计者怎么会让这种情况存在,那么必然会有解决方案,如下
如上图,图中多了一个 journaling buffer
和 journal 文件
- journaling buffer
存放 mongodb 增删改 指令的缓冲区
- journal 文件
类似于关系数据库中的事务日志
引入 Journaling 的目的是:
Journaling 能够使 mongodb 数据库由于意外故障后快速恢复
Journaling 日志功能
Journaling 的日志功能,看上去有点像是 redis 中的 aof 持久化一样,也只能说是类似
在 mongodb 2.4 的时候,就已经是 默认会开启 Journaling日志功能 的,我们启动 mongod 实例的时候,服务就会去检查是否需要恢复数据
因此就不会有上述 mongodb 丢数据的情况了
另外这里我们要知道,journaling 的日志功能,当 mongodb 需要进行写操作的时候,也就是 增,删,改的时候,journaling 是会写日志的,这会影响性能
但是 mongodb 读取操作的时候,是不会记录到缓存中的,因此也不会记录到 journaling 日志中,因此读操作没有影响
今天就到这里,学习所得,若有偏差,还请斧正
以上是一文深析MongoDB存储引擎(附原理图)的详细内容。更多信息请关注PHP中文网其他相关文章!

MongoDB适合处理大规模非结构化数据,Oracle适用于需要事务一致性的企业级应用。 1.MongoDB提供灵活性和高性能,适合处理用户行为数据。 2.Oracle以稳定性和强大功能着称,适用于金融系统。 3.MongoDB使用文档模型,Oracle使用关系模型。 4.MongoDB适合社交媒体应用,Oracle适合企业级应用。

MongoDB在扩展性和性能方面的考虑包括水平扩展、垂直扩展和性能优化。1.水平扩展通过分片技术实现,提高系统容量。2.垂直扩展通过增加硬件资源提升性能。3.性能优化通过合理设计索引和优化查询策略实现。

MongoDB是一种NoSQL数据库,因其灵活性和可扩展性在现代数据管理中非常重要。它采用文档存储,适合处理大规模、多变的数据,并提供强大的查询和索引能力。

MongoDB 中批量删除文档可以使用以下方法:1. $in 操作符指定要删除的文档列表;2. 正则表达式匹配符合条件的文档;3. $exists 操作符删除具有指定字段的文档;4. find() 和 remove() 方法先获取再删除文档。请注意,这些操作无法使用事务,并可能删除所有匹配的文档,因此使用时需谨慎。

要设置MongoDB数据库,可以使用命令行(use和db.createCollection())或mongo Shell(mongo、use和db.createCollection())。其他设置选项包括查看数据库(show dbs)、查看集合(show collections)、删除数据库(db.dropDatabase())、删除集合(db.<collection_name>.drop())、插入文档(db.<collecti

部署 MongoDB 集群分五步:部署主节点,部署辅助节点,添加辅助节点,配置复制,验证集群。包括安装 MongoDB 软件、创建数据目录、启动 MongoDB 实例、初始化复制集、添加辅助节点、启用副本集功能、配置投票权,并验证集群状态和数据复制。

MongoDB 广泛应用于以下场景:文档存储:管理用户资料、内容、产品目录等结构化和非结构化数据。实时分析:快速查询和分析日志、监控仪表盘展示等实时数据。社交媒体:管理用户关系图谱、活动流和消息传递。物联网:处理设备监控、数据收集和远程管理等海量时间序列数据。移动应用:作为后端数据库,同步移动设备数据、提供离线存储等。其他领域:电子商务、医疗保健、金融服务和游戏开发等多样化场景。

如何查看 MongoDB 版本:命令行:使用 db.version() 命令。编程语言驱动程序:Python:print(client.server_info()["version"])Node.js:db.command({ version: 1 }, (err, result) => { console.log(result.version); });


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

Atom编辑器mac版下载
最流行的的开源编辑器