V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
frostfall
V2EX  ›  程序员

mongoDB 百万量级是否需要做集群?

  •  
  •   frostfall · 2017-03-27 14:09:07 +08:00 · 8179 次点击
    这是一个创建于 2798 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前公司 MongoDB ( Version:2.6)单机运行,大并发查询与写入的时候性能很低

    想到的解决方法:

    1 、据说 3.X 版本性能有很大提升,但是测试环境升到 3.4 直接好多方法已废弃,代码上要进行大量修改,这条路貌似走不通

    2 、另一个方法就是集群,但是感觉百万量级上集群是不是杀鸡用牛刀了?

    所以有两个问题想请教各位

    Q1 :尽量不大量修改代码的情况下, MongoDB 3.X 哪个版本可用?

    Q2 :上集群是否大材小用,毕竟在 MongoDB 上没有太多经验

    22 条回复    2017-03-28 13:57:28 +08:00
    suren1986
        1
    suren1986  
       2017-03-27 14:14:42 +08:00
    1. 大量查询为啥不做 replica?
    2. 写入性能低的原因是什么?只是磁盘么?换 SSD ?
    scofieldpeng
        2
    scofieldpeng  
       2017-03-27 14:18:14 +08:00
    连接池和异步有试过么?大并发查询每次都打到数据库?有考虑过热点缓存么?
    scofieldpeng
        3
    scofieldpeng  
       2017-03-27 14:18:38 +08:00
    我觉得把这个做好了,你应该能撑一段时间了
    we3613040
        4
    we3613040  
       2017-03-27 14:20:44 +08:00
    只是百万级别的就不行了?不是吧
    zacard
        5
    zacard  
       2017-03-27 14:43:15 +08:00
    其实想问,这个量级为何不用 mysql 。

    然后,你们应该先测试下单纯写的效率。读的话索引是否合理等。
    集群也可以啊, mongodb 上集群简单。只是还是觉得你们这条路走下去很可能还是得回到 mysql 。。。
    frostfall
        6
    frostfall  
    OP
       2017-03-27 14:43:23 +08:00
    @suren1986 之前因为大并发下硬盘太慢, page faults 太多,于是换了一台新服务器,只跑 MongoDB 。平时内存占用只在 1GB 左右, 但是并发测试下依旧很慢,这时 Mongostat 查看 page faults 并不多,内存占用升到 4GB 左右
    icegreen
        7
    icegreen  
       2017-03-27 15:07:55 +08:00
    百万量级应该单机是能抗住的, 建议分析一下瓶颈在哪里, 优化一下程序;
    sampeng
        8
    sampeng  
       2017-03-27 17:06:58 +08:00
    超过十万就需要,不仅仅是扛量,更多的是主从,挂了还能接着用。。。

    另外。。。为毛不用 mysql 。。。 mongodb 我知道的都切回了 mysql 。。。量越大切的越早。还是有这么多要当小白鼠的
    sampeng
        9
    sampeng  
       2017-03-27 17:08:35 +08:00
    没有经验还要去趟雷。。
    frostfall
        10
    frostfall  
    OP
       2017-03-27 17:29:09 +08:00
    测试环境模拟并发,几乎不能复现,推测应该不是性能问题,看来现在要转变思路解决问题了
    tinybaby365
        11
    tinybaby365  
       2017-03-27 18:14:30 +08:00
    写入是修改,还是新插入?修改如果超过原 doc 的 size ,就会新开辟空间并产生碎片。

    查询,可以加索引,组合索引。

    卡的时候最好用 MMS 看看。
    popbones
        12
    popbones  
       2017-03-27 18:18:32 +08:00
    每个月都要被 MongoDB 坑一次的来围观
    mathgl
        13
    mathgl  
       2017-03-27 18:54:12 +08:00
    mongodb 2.6 问题挺多的。不推荐使用。

    mongodb 就我使用经验而言,查询和插入的性能和 pg 比较并没有优势。
    imzshh
        14
    imzshh  
       2017-03-27 19:38:34 +08:00
    百万量级是个什么概念?百万并发请求?
    rrfeng
        15
    rrfeng  
       2017-03-27 20:02:42 +08:00
    page faults 太多是内存配的太小吧?
    mmap 还是 wt 引擎?

    我们集群过亿的 collection 有好几个,也就 2 节点读 1 primary 写。

    根据我的经验,大部分性能问题是因为没有 mongodb 经验,从根本上来说除了因为实现不同导致一些差异(例如没有事务)外,性能上都有解决方案。只是 mysql 现成文档多, mongodb 需要自己钻研。
    rrfeng
        16
    rrfeng  
       2017-03-27 20:02:59 +08:00
    另外单机你不怕丢么?
    suyuanhxx
        17
    suyuanhxx  
       2017-03-27 22:28:15 +08:00
    面试时被问到 mongodb 的使用业务场景,我瞬间懵逼了......我回答的是用户无规律行为(如点击链接,数据统计分类不明确时)
    sujin190
        18
    sujin190  
       2017-03-27 23:51:51 +08:00
    也从 2.6 升级到 3.2 ,没遇到什么不兼容问题啊。。
    不过话说用了许久 mongodb 整体感觉确实有点怪,压力不高但是慢查询一堆,整体性能还是很靠谱的,不过 3 的 wt 引擎感觉性能更稳定一些,用来做日志缓冲,每天写几千万也毫无压力
    FrankFang128
        19
    FrankFang128  
       2017-03-28 00:47:12 +08:00
    少用 mongodb 啊,被坑过
    zaishanfeng
        20
    zaishanfeng  
       2017-03-28 07:18:38 +08:00 via Android
    mongo 优化的好比 mysql 方便的多, 问题是版本更新太快,兼容性不好,网上的资料又比较杂,用起来比较费劲。那些说 mongo 坑的, 估计是习惯了关系数据库那一套,不想折腾吧
    wakaka
        21
    wakaka  
       2017-03-28 09:47:37 +08:00
    集群都不做,看来数据不重要
    frostfall
        22
    frostfall  
    OP
       2017-03-28 13:57:28 +08:00
    之前发的不知道为什么没有了,测试环境模拟大并发不能复现,看样子不是性能问题,已经考虑做 replica 实现容灾了,谢谢各位
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2166 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 01:10 · PVG 09:10 · LAX 17:10 · JFK 20:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.