在听到MongoDB性能的诸多好消息之后,我们决定让Mongodb尝试解决我们遇到的问题。我开始将我们在多个mysql数据库中的所有记录移动到mongodb中的单个集合中。这导致收集了29百万个文件(其中每个文件至少有20个字段),这需要大约100 GB的空间。我们决定将它们全部放在一个集合中,因为所有文档具有相同的结构,并且我们要查询并汇总所有这些文档的结果。MongoDB在聚合查询方面的表现
我创建了一些索引来匹配我的查询,否则即使简单count()也需要很长时间。但是,诸如distinct()和group()之类的查询仍然需要很长时间。
实施例:
// creation of a compound index
db.collection.ensureIndex({'metadata.system':1, 'metadata.company':1})
// query to get all the combinations companies and systems
db.collection.group({key: { 'metadata.system':true, 'metadata.company':true }, reduce: function(obj,prev) {}, initial: {} });
我把一看的mongod日志和它有很多这样的线(在执行上述查询):
Thu Apr 8 14:40:05 getmore database.collection cid:973023491046432059 ntoreturn:0 query: {} bytes:1048890 nreturned:417 154ms
Thu Apr 8 14:40:08 getmore database.collection cid:973023491046432059 ntoreturn:0 query: {} bytes:1050205 nreturned:414 430ms
Thu Apr 8 14:40:18 getmore database.collection cid:973023491046432059 ntoreturn:0 query: {} bytes:1049748 nreturned:201 130ms
Thu Apr 8 14:40:27 getmore database.collection cid:973023491046432059 ntoreturn:0 query: {} bytes:1051925 nreturned:221 118ms
Thu Apr 8 14:40:30 getmore database.collection cid:973023491046432059 ntoreturn:0 query: {} bytes:1053096 nreturned:250 164ms
...
Thu Apr 8 15:04:18 query database.$cmd ntoreturn:1 command reslen:4130 1475894ms
此查询了1475894ms其比我想象的要长(结果列表大约有60个条目)。首先,鉴于我收藏的大量文件,这是否是预期的?一般来说聚合查询在MongoDB中会如此缓慢?关于如何改善表现的任何想法?
我正在一台双核和10GB内存的单机上运行mongod。
谢谢。
那么这个问题太老了,当你搜索MongoDB聚合框架时,仍然会涉及搜索引擎。马里奥你没有提到你的MongoDB版本,因为他们在2.4中改进了很多AF,而且我在一个蹩脚的m1上做了这个。 EC2与3.7G内存在一个69米的集合,它的速度比以前更快。你有没有尝试过新版本,或者你有不同的方法?当然,AF和MapReduce有很多基准,但看看10Gen的最新版本http://blog.mongodb.org/post/62900213496/qaing-new-code-with-mms-map-reduce-vs -aggregation tnx – Maziyar 2013-11-03 02:16:08
感谢您的评论。这是在2010年,我相信我们正在使用MongoDB 1.4.0之类的东西。已经有一段时间了,我相信很多事情在MongoDB中都有变化,但自那年晚些时候以来我一直没有在这个项目中工作:) – 2013-11-05 17:34:54
感谢Mario的回复。我刚开始使用MongoDB(大约一年),只是想知道你的项目发生了什么。无论如何祝你好运:) – Maziyar 2013-11-06 03:19:07