高并发操作MongoDB性能优化

高并发操作MongoDB性能优化

一,代码层级优化

采用批量数据方式操作MongoDB。将数据信息存放在消息队列中进行缓存,然后定时定量的去获取队列消息,触发连接MongoDB获取查询结果。

 所谓定时定量是指每一段时间或消息队列达到某一数值。示例:每10秒或队列消息数达到200时提交一次统计事件。

优点:减少网络传输的IO,同时减少SQL语句解析的次数。降低MongoDB日志刷盘的数据量和频率,从而提高效率。

缺点:有一定的消息延时(具体延时时间可调整队列消息提交频率和消息数大小来控制)。

二,MongoDB优化

1,MongoDB设置一个库一个文件,即设置directoryPerDB为true;将索引也按数据库名单独存储,即directoryForIndexes: true。

2,MongoDB存储引擎选择WiredTiger。

目前MongoDB的存储引擎主要有MMAPV1、WiredTiger。在3.2版本之前MMAPV1是默认的存储引擎,其采用linux操作系统内存映射技术,但一直饱受诟病;3.4以上版本默认的存储引擎是wiredTiger,相对于MMAPV1其有如下优势:

  • 读写操作性能更好,WiredTiger能更好的发挥多核系统的处理能力;
  • MMAPV1引擎使用表级锁,当某个单表上有并发的操作,吞吐将受到限制。WiredTiger使用文档级锁,由此带来并发及吞吐的提高
  • 相比MMAPV1存储索引时WiredTiger使用前缀压缩,更节省对内存空间的损耗;
  • 提供压缩算法,可以大大降低对硬盘资源的消耗,节省约60%以上的硬盘资源;

3,增加MongoDB最大连接数(connectionsPerHost),有效利用CPU资源。

4,MongoDB写策略配置优化:{ w: , j: , wtimeout: }

  • w: 数据写入到number个节点才向用客户端确认

    {w: 0} 对客户端的写入不需要发送任何确认,适用于性能要求高,但不关注正确性的场景
    {w: 1} 默认的writeConcern,数据写入到Primary就向客户端发送确认
    {w: “majority”} 数据写入到副本集大多数成员后向客户端发送确认,适用于对数据安全性要求比较高的场景,该选项会降低写入性能

  • j: 写入操作的journal持久化后才向客户端确认,默认为{j: false},如果要求写入持久化了才向客户端确认,则指定该选项为true

  • wtimeout: 写入超时时间,仅w的值大于1时有效

当指定{w: }时,数据需要成功写入number个节点才算成功,如果写入过程中有节点故障,可能导致这个条件一直不能满足,从而一直不能向客户端发送确认结果,针对这种情况,客户端可设置wtimeout选项来指定超时时间,当写入过程持续超过该时间仍未结束,则认为写入失败。
5,MongoDB查询优化(大概分三步)

  • 开启内置的查询分析器,找出慢查询语句
  • 分析慢查询语句。
  • 解读explain结果。

关于索引的建议:

1.索引很有用,但是它也是有成本的——它占内存,让写入变慢;

2.mongoDB通常在一次查询里使用一个索引,所以多个字段的查询或者排序需要复合索引才能更加高效;

3.在生成环境构建索引往往开销很大,时间也不可以接受,在数据量庞大之前尽量进行查询优化和构建索引;

4.避免昂贵的查询,使用查询分析器记录那些开销很大的查询便于问题排查;

5.通过减少扫描文档数量来优化查询,使用explain对开销大的查询进行分析并优化;

6.索引是用来查询小范围数据的,不适合使用索引的情况:
   1)每次查询都需要返回大部分数据的文档,避免使用索引
   2)写比读多  
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MongoDB是一个流行的NoSQL数据库,提供了许多高级操作来处理和管理数据。以下是一些MongoDB的高级操作: 1. 聚合操作MongoDB的聚合操作可以对集合中的文档进行复杂的数据处理和分析。它包括管道操作符,可以进行排序、筛选、分组、映射、限制和计算等操作,以生成所需的结果。 2. 索引优化:索引是MongoDB中优化查询性能的重要工具。通过为经常查询的字段创建索引,可以加快查询速度。MongoDB支持多种类型的索引,如单字段索引、组合索引、文本索引和地理空间索引等。 3. 事务处理:MongoDB从版本4.0开始支持事务处理。事务是一组关联操作的集合,要么全部成功执行,要么全部失败回滚。事务处理可确保在并发环境下数据的一致性和完整性。 4. 数据备份和恢复:MongoDB提供了多种备份和恢复数据的方式。可以使用mongodump和mongorestore命令行工具进行全量备份和恢复,也可以使用Oplog来进行增量备份和恢复。 5. 数据迁移:当需要将数据从一个MongoDB实例迁移到另一个实例时,可以使用mongodump和mongorestore命令行工具来执行全量数据迁移。同时,还可以使用MongoDB的复制集和分片集群功能来实现数据的高可用和水平扩展。 6. 数据加密:MongoDB提供了字段级别的数据加密功能。可以使用客户端端到端加密的方式来保护敏感数据,确保数据在存储和传输过程中的安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值