如何在mongodb中更快地进行区分操作

如何在mongodb中更快地进行区分操作,mongodb,distinct,Mongodb,Distinct,一个集合中有30000000条记录。 当我用java对这个集合使用distinct命令时,大约需要4分钟,结果的计数大约是40000。 mongodb独特的运营是否如此低效? 我怎样才能提高效率呢 mongodb独特的运营是否如此低效 以3000万的记录?我想说4分钟实际上相当不错,我认为这和SQL一样快,可能比SQL快一点 在说它效率低下之前,我可能会在其他数据库中测试它 但是,查看性能的一种方法是查看字段是否首先被索引,以及该索引是否在RAM中,或者是否可以在没有页面抖动的情况下加载。只要字

一个集合中有30000000条记录。 当我用java对这个集合使用distinct命令时,大约需要4分钟,结果的计数大约是40000。 mongodb独特的运营是否如此低效? 我怎样才能提高效率呢

mongodb独特的运营是否如此低效

以3000万的记录?我想说4分钟实际上相当不错,我认为这和SQL一样快,可能比SQL快一点

在说它效率低下之前,我可能会在其他数据库中测试它

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

我怎样才能提高效率呢

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

  • 增量映射每5分钟对一个唯一集合进行一次主集合的区分
  • 并在保存时通过保存为两个集合(一个细节集合和一个唯一集合)预聚合唯一集合
这是两种最可行的有效解决方法

编辑 Distinct()并没有过时,而且如果它符合您的需要,实际上比$group性能更好,因为它可以使用索引。

该操作是一个旧操作,就像现在一样。一般来说,这些已被取代,通常应优先于这些行动使用:

db.collection.aggregate([
    { "$group": { 
       "_id": "$field",
       "count": { "$sum": 1 }
    }
)
将“$field”替换为希望从中获得不同计数的任何字段。
$
在字段名的前面加上前缀以分配值


查看文档,特别是了解更多信息。

好的,我将在字段上添加索引,然后重试。非常感谢。