【问题标题】:Why Group is slower than $group from Aggregate? [duplicate]为什么 Group 比 Aggregate 中的 $group 慢? [复制]
【发布时间】:2017-06-24 05:35:44
【问题描述】:

我尝试了 3 种方法来分组数据:原生 js(带下划线)、groupAggregate with $group

我使用these datas(巴黎的流派/位置'树)(237 168 行,35Mo)

这是我的script test,结果有点令人惊讶!

┌─────────────┬───────────────┐
│ Method      │ avg time (ms) │
├─────────────┼───────────────┤
│ Pure js     │ 897           │
├─────────────┼───────────────┤
│ Group       │ 3863          │
├─────────────┼───────────────┤
│ Aggregation │ 364           │
└─────────────┴───────────────┘

为什么用 group 分组比聚合慢 10 倍? 用于什么“组”? 我怎样才能再次优化我的请求?

谢谢。

【问题讨论】:

  • Group 可能会更慢,因为需要在集合中的每个文档中调用 reduce 函数。最好的优化是直接或通过 MapReduce 预先计算组。
  • 还需要注意的是,在 2.1 以上的 MongoDB 版本中不鼓励使用 group() 可能是个好主意

标签: node.js mongodb aggregation-framework


【解决方案1】:

Group 命令使用与 mapreduce 相同的框架,并且有很多资源可以解释为什么 MR 比聚合框架慢。主要是它运行在一个单独的 JS 线程中,其中 agg 框架在服务器上本地运行。

在此处查看详细信息MongoDB aggregation comparison: group(), $group and MapReduce

【讨论】:

  • 适合 group()。但它仍然比原生慢 2.3%!
  • @lemulot group() 不是比 300% 慢吗?虽然聚合框架比原生框架快 120%?
  • @lemulot 它更慢,因为 MongoDB 必须将 bson 转换为 json 在单独的线程中执行组,然后返回结果。 “本机”可能会更快地序列化为 json,并且您的算法可能比组算法更有效。
猜你喜欢
  • 1970-01-01
  • 2014-10-23
  • 1970-01-01
  • 2019-05-24
  • 1970-01-01
  • 1970-01-01
  • 2010-11-12
  • 2020-01-20
  • 2017-01-06
相关资源
最近更新 更多