我刚开始使用 mongo db 并尝试做一些简单的事情。我用包含“item”属性的数据集合填充了我的数据库。我想尝试计算每个项目在集合中的时间
文档示例:
{ "_id" : ObjectId("50dadc38bbd7591082d920f0"), "item" : "Pons", "lines" : 37 }
所以我设计了这两个函数来做 MapReduce(使用 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 的持续时间已经超过一秒……因为 NoSQL 吹嘘速度,我想我一定是做错了什么!
Stack Overflow 上的一个问题让我查看了 mongodb 的聚合功能。所以我尝试使用 group + sum + sort thingies。想出了这个:
db.wikipedia.aggregate(
{ $group: { _id: "$item", count: { $sum: 1 } } },
{ $sort: {count: 1} }
)
这段代码工作得很好,给了我与 mapreduce 集相同的结果,但它同样慢。难道我做错了什么?我真的需要使用像hadoop这样的其他工具来获得更好的性能吗?