如何在mongodb中更快地进行独特的操作

时间:2014-03-13 10:10:37

标签: mongodb distinct

一个集合中有30,000,000条记录。 当我在java上对此集合使用distinct命令时,大约需要4分钟,结果的计数大约为40,000。 mongodb的独特运作是如此低效吗? 我怎样才能提高效率呢?

2 个答案:

答案 0 :(得分:1)

  

mongodb的独特操作是否效率低下?

30米记录?我会说4分钟实际上相当不错,我认为这一点同样快,可能比SQL快一点。

我可能会在说它效率低之前在其他数据库中对此进行测试。

然而,查看性能的一种方法是查看字段是否首先被索引,以及该索引是否在RAM中,或者是否可以在没有页面抖动的情况下加载。只要字段具有索引,Distinct()就可以使用索引。

  

如何才能提高效率呢?

您可以使用以下两种方法:

  • 增量地图减少到每个主要集合,例如5分钟到一个独特的集合
  • 通过保存为两个集合,一个详细信息和一个唯一
  • ,预先汇总保存的唯一集合

这是两种最可行的解决方法。

修改

Distinct()不会过时,如果符合您的需求,实际上比$ group更高效,因为它可以使用索引。

答案 1 :(得分:0)

.distinct()操作是旧操作,.group()也是如此。一般来说,这些已经被.aggregate()所取代,这些应该优先于这些行为使用:

db.collection.aggregate([
    { "$group": { 
       "_id": "$field",
       "count": { "$sum": 1 }
    }
)

"$field"替换为您希望从中得到明确计数的任何字段。 $前缀字段名称以指定值。

查看文档,特别是$group以获取更多信息。