私はmongo dbから始めて、いくつかの簡単なことをしようとしています。「アイテム」プロパティを含むデータのコレクションでデータベースをいっぱいにしました。すべてのアイテムがコレクションにある時間を数えてみたかった
ドキュメントの例:
{ "_id" : ObjectId("50dadc38bbd7591082d920f0"), "item" : "Pons", "lines" : 37 }
そこで、MapReduce を実行するためにこれら 2 つの関数を設計しました (pymongo を使用して python で記述)。
all_map = Code("function () {"
" emit(this.item, 1);"
"}")
all_reduce = Code("function (key, values) {"
" var sum = 0;"
" values.forEach(function(value){"
" sum += value;"
" });"
" return sum;"
"}")
これは魔法のように機能したので、コレクションを埋め始めました。約 30.000 ドキュメントで、mapreduce はすでに 1 秒以上続きます... NoSQL は速度を自慢しているので、何か間違ったことをしているに違いないと思いました!
Stack Overflow での質問のおかげで、mongodb の集約機能について調べてみました。そこで、グループ + 合計 + ソートを使用しようとしました。これを思いついた:
db.wikipedia.aggregate(
{ $group: { _id: "$item", count: { $sum: 1 } } },
{ $sort: {count: 1} }
)
このコードは問題なく動作し、mapreduce セットと同じ結果が得られますが、速度は同じです。私は何か間違ったことをしていますか?パフォーマンスを向上させるために、hadoopなどの他のツールを使用する必要はありますか?