2013-05-20 54 views
0

我试图工作台3点的方法对数据进行分组:天然JS(用下划线),groupAggregate with $group

我使用these datas(类型/位置”树木在巴黎)(237个168行,35Mo)

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

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

为什么使用group进行分组的速度比Aggregation慢10倍? 什么是“组”? 如何再次优化我的请求?

谢谢。

+0

集团可能会比较慢,由于减少的功能需要被称为FR集合中的每个文件。最好的优化是直接或通过MapReduce预先计算组。 – WiredPrairie

+0

它也可以指出,在group()中,在MongoDB版本中使用大于2.1 – Sammaye

回答

1

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

查看详情这里MongoDB aggregation comparison: group(), $group and MapReduce

+0

的“group()”可能是一个不错的主意。但它仍然比本机慢2.3%! – PierrickP

+0

@lemulot不是group()大于300%慢吗?虽然汇总框架比本机快120%? – Sammaye

+0

@lemulot它比较慢,因为MongoDB必须将bson转换为json在单独的线程中执行该组,然后返回结果。 “native”可能会更快地进行json的序列化,并且您的算法可能比group算法更有效。 –