因为MongoDB有数组内嵌文档的数据结构非常适合我们,准备上MongoDB,现在在测试中。发现MongoDB在大数据下性能急剧下降的问题。如我的数据结构:
上面清楚的看到我测试的数据是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以上。
像这个的数据量需要多少台机器? 我需要注意哪些问题?求助各位讲解一下
先查询语句 db.coll.find().explain()
看看是否使用索引。另外充足的内存也是必须的。
而且你现在只是测试,应该不存在其写入锁的问题。当然如果你的应用写入比重比较大的话,
可以考虑shared
另外建议你在 查询过程中使用 mongostat 观察状态
在查询是要写入数据比重比较大的话,你真的要考虑shard了。
写入会锁住整个db(希望mongodb尽快把锁粒度降低一些),索引数据是必须要保存在
内存中的,如果虚拟内存这部分数据都装不下,频繁的页面交换会大大影响性能的。
不过按照你的描述不是这个方面的问题。
单个数据查询很快,组合查询就慢,这个就有点难以理解了。
你试试仅仅查询,没有插入操作的时候速度如何?
`db.coll.find({'friends':'1234567'})
db.coll.find({'friends':{'$in':['', '']}}) `
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。