开发者社区> 问答> 正文

大数据下MongoDB的性能问题

因为MongoDB有数组内嵌文档的数据结构非常适合我们,准备上MongoDB,现在在测试中。发现MongoDB在大数据下性能急剧下降的问题。如我的数据结构:
1
上面清楚的看到我测试的数据是500W+,我关心的数据类型如里面的Friends的数组,正式上线了会改成如下类型:
"friends": [ {"friendId" : id, "optDate": date, "enable":true},
...
{"friendId" : id, "optDate": date, "enable":true} ]
我现在随机的写了一些数据,friend也建立了索引,对单个的查询{“friends” : {“$in”:["1234567"]}}都很快[100ms+],但是用两个以上的数值{“friends” : {“$in”:["1234567", “9876543”]}}会非常的慢[8分钟],而且结合其它条件查询的话都非常的慢。我在单台计算机上测试的,正式的数据大约1000W以上。
像这个的数据量需要多少台机器? 我需要注意哪些问题?求助各位讲解一下

展开
收起
落地花开啦 2016-02-07 09:42:43 4016 0
1 条回答
写回答
取消 提交回答
  • 喜欢技术,喜欢努力的人

    先查询语句 db.coll.find().explain()
    看看是否使用索引。另外充足的内存也是必须的。
    而且你现在只是测试,应该不存在其写入锁的问题。当然如果你的应用写入比重比较大的话,
    可以考虑shared
    另外建议你在 查询过程中使用 mongostat 观察状态
    在查询是要写入数据比重比较大的话,你真的要考虑shard了。
    写入会锁住整个db(希望mongodb尽快把锁粒度降低一些),索引数据是必须要保存在
    内存中的,如果虚拟内存这部分数据都装不下,频繁的页面交换会大大影响性能的。
    不过按照你的描述不是这个方面的问题。
    单个数据查询很快,组合查询就慢,这个就有点难以理解了。
    你试试仅仅查询,没有插入操作的时候速度如何?
    `db.coll.find({'friends':'1234567'})
    db.coll.find({'friends':{'$in':['', '']}}) `

    2019-07-17 18:38:51
    赞同 1 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Data as a Service - 数据即服务 -- MongoDB⾼级应⽤模式 立即下载
阿里云MongoDB云服务构建 立即下载
饿了么高级架构师陈东明:MongoDB是如何逐步提高可靠性的 立即下载