如何提高mongodb组查询性能

时间:2014-09-16 11:48:25

标签: mongodb solr aggregation-framework

我目前正在使用solr来存储公共推文信息。我有内容,情感,关键字,tstamp,语言,tweet_id等字段来捕捉推文的精髓。我也在评估Mongodb的相同用例。我正在尝试对每个一百万条记录的mongodb和solr进行基准测试。

我观察到的是mongodb中的组查询比solr的facet查询慢2.5到3倍。

以下mongodb查询

db.tweets.aggregate(
 [
   {
     $group : {
       _id : "$sentiment", 
       total : { $sum : 1 }
     }
   }
 ]
)

需要481毫秒。我已将索引应用于情绪领域。

然而,使用facet查询的solr中的相同内容需要93ms。

是否需要设置mongodb中的其他配置以提高mongodb中的组查询性能?

1 个答案:

答案 0 :(得分:0)

$group operation和方面搜索不是真正可比的操作,$group不会使用索引。您似乎正在尝试计算每个不同值sentiment的文档数。 MongoDB没有特定的功能。对于特定值,获得计数的更好操作将是

db.collection.count({ "sentiment" : sentiment })

您可以使用

获取所有不同的值
db.collection.distinct("sentiment")

这两个都可以使用索引{ "sentiment" : 1 }。您将需要多个查询来获取sentiment的多个值的计数,因此它不如Solr方便。分面搜索是全文搜索引擎的核心竞争力,因此在Solr中比MongoDB更容易实现这一点并不奇怪。 MongoDB和Solr意味着完全不同的用途,所以我不能说我会明白你为什么要对其他人进行基准测试。这就像在一辆汽车上撞船一样。