mongodb如何应对高并发


mongodb应对高并发的方法:1、采用批量数据方式操作MongoDB,定时定量获取查询结果;2、在mongodb中设置一个库一个文件;3、mongodb存储引擎选择WiredTiger;4、增加mongodb最大连接数;5、优化mongodb中的写策略;6、优化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)写比读多


          上一篇:win如何查看mongodb是否安装成功

          下一篇:linux如何远程连接mongodb


          mongodb
Copyright © 2002-2019 测速网 www.inhv.cn 皖ICP备2023010105号
测速城市 测速地区 测速街道 网速测试城市 网速测试地区 网速测试街道
温馨提示:部分文章图片数据来源与网络,仅供参考!版权归原作者所有,如有侵权请联系删除!

热门搜索 城市网站建设 地区网站制作 街道网页设计 大写数字 热点城市 热点地区 热点街道 热点时间 房贷计算器