zoukankan      html  css  js  c++  java
  • 浅谈mongodb内存

      本文仅限于mongodb3.0.0(wiredtiger引擎)

    一.mongodb内存使用

    1.热数据

    这一点是SQL和nosql之间的巨大差距,将热数据存在内存相当于自带cache,若wiredtigercache大小控制合理,此处内存性价比相当高。

    2.索引

    跟热数据同样

    3.连接所消耗内存

    这里算是与SQL基本相同的一部分

    二.监控

    1.wiredtigercache

    2.mongodb所占用内存

    3.mongodb读取数据与IO数据

    三.优化

    1.热数据

    上面说此处占用内存为cache,可以通过wiredtigercache进行上限的调节,与memcache或redis做缓存时候调节相同,将命中和大小控制在合理范围

    2.索引

    mongodb会将全部索引读入内存中,所以这里优化相当重要,

    建议花精力去整理索引,如果可以做到索引恰好覆盖热数据为最佳,

    四.其他注意事项

    1.杜绝依靠重启来释放内存,这时释放掉的是热数据,得不偿失

    2.可以禁止swap,

    3.不要将mongodb与其他吃内存的服务部署到同一机器上

    4.重视对mongodb内存监控,避免oom

    5.重视oplog,oplog大小应定期调整,若oplog过小,对热数据部分将是灾难

    6.关闭NUMA

    7.安装在x64机器上(貌似是句废话)

    8.根据wiredtigercache,索引,连接,来调整内存

    9.有条件最好SSD

    10.找一个懂mongodb的人解决具体问题,不要遇到问题就说mongodb不好

    最后说一下个人对mongodb的看法,

    1.从架构来讲,可切片,有副本集,mongos,保证了高可用性和可伸缩性

    2.副本集可以做读写分离,

    3.热数据和索引在内存,保证了高速

    本人觉得mongodb是一个好东西,有不适合场景,也有适合场景,应该根据项目实际情况来使用,不能一味在不了解情况下跟风评价。

  • 相关阅读:
    【机器学习笔记】EM算法及其应用
    【机器学习笔记】循环神经网络RNN
    【caffe范例详解】
    Caffe on Windows (Visual Studio 2015+CUDA8.0+cuDNNv5)
    【Keras案例学习】 CNN做手写字符分类(mnist_cnn )
    Celery分布式文件队列
    通过nginx+lua或openresty实现web站点的waf功能
    使用docker hub获取kubernetes各个组件的镜像
    使用Ansible快速构建kubernetes1.10.4HA高可用集群
    创建私服maven服务
  • 原文地址:https://www.cnblogs.com/flyr/p/6013831.html
Copyright © 2011-2022 走看看