2013-05-20 100 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算法更有效。 –