如何在MongoDB和CouchDB中获取大数据的平均值?
我正在看这张图表......
http://www.mongodb.org/display/DOCS/MongoDB,+CouchDB,+MySQL+Compare+Grid
说:
查询方法
CouchDB - 映射/减少javascript函数来为每个查询延迟建立一个索引
MongoDB - 动态; 基于对象的查询语言
这到底是什么意思? 例如,如果我想平均获取1,000,000,000个值,CouchDB是否会以MapReduce方式自动执行此操作?
有人可以通过这两个系统平均获得1,000,000,000个值来引导我...这将是一个非常有启发性的例子。
谢谢。
CouchDB的观点是一种奇怪而迷人的野兽。
CouchDB执行增量式映射/减少,也就是说,一旦指定了“视图”,它就会像关系数据库中的物化视图一样工作。 如果您平均使用三十或三十亿份文件,则无关紧要。 结果就在那里。
但是那里有三重陷阱
1)一旦视图被创建并更新,查询就很快。 如果您有很多小文件(如果可能,请使用较胖的文件),创建视图可能会很慢。 一旦创建了视图,中间缩减步骤将存储在B树节点内,您不必重新计算它们。
2)当您查询时,视图会延迟更新。 要获得可预测的性能,您最好设置一些工作来定期更新它们。 如何在CouchDB中安排索引更新
3)您需要对如何使用组合键,范围和分组查询数据有个很好的想法。 CouchDB在做临时查询时很勉强。 http://wiki.apache.org/couchdb/Introduction_to_CouchDB_views
我相信有人会很快发布如何在两个数据库中平均处理1,000,000,000个项目的细节,但是您必须了解CouchDB使您能够从事更多的前期工作,以便从其增量方法中受益。 这确实是非常独特的东西,但是当您对平均值或任何特定查询数据执行任何操作时,并非真正用于场景。
在Mongo中,您可以使用map / reduce(不是增量式,它是平均3或30亿个文档,但由于其内存映射I / O方法,mongo被认为是非常快的)或它们的聚合特性。 http://www.mongodb.org/display/DOCS/Aggregation
我无法谈论MongoDB,但我可以告诉你关于CouchDB的信息。 CouchDB只能通过Map / Reduce View Engine本地查询。 实际上,一个伟大的地方就是维基的这一部分。
一个视图包含一个map函数和一个可选的reduce函数。 编写这些函数的典型语言是JavaScript,但是有一个Erlang选项可用,并且可以在任何其他编程语言中构建视图引擎。
map函数用于从数据库中的文档中构建数据集。 reduce函数用于聚合该数据集。 因此,一旦创建视图,map函数就会在数据库中的每个文档上运行。 (和第一个查询)创建后,该函数仅运行在新创建的文档上,或者被修改/删除。 因此,视图索引是逐步构建的,而不是动态构建的。
在1,000,000,000个值的情况下,CouchDB将不需要每次请求时计算查询结果。 相反,它只会报告它存储的视图索引的值,只有当文档被创建/更新/删除时,它本身才会更改。
至于编写Map / Reduce函数,很多工作都留给程序员,因为没有内置的地图函数。 (即它不是“自动的”)但是,有一些本地reduce函数( _sum
, _count
, _stats
)可用。
这里有一个简单的例子,我们将计算一些人的平均身高。
// sample documents
{ "_id": "Dominic Barnes", "height": 64 }
{ "_id": "Some Tall Guy", "height": 75 }
{ "_id": "Some Short(er) Guy", "height": 58 }
// map function
function (doc) {
// first param is "key", which we do not need since `_id` is stored anyways
emit(null, doc.height);
}
// reduce function
_stats
该视图的结果如下所示:
{
"rows": [
{
"key": null
"value": {
"sum": 197,
"count": 3,
"min": 58,
"max": 75,
"sumsqr": 13085
}
}
]
}
从这里计算平均值就像将总和除以计数一样简单。 如果你想在视图本身内计算出平均值,你可以查看这个例子。
链接地址: http://www.djcxy.com/p/86421.html上一篇: How to take the average of big data in MongoDB vs CouchDB?
下一篇: Middleware for MongoDB or CouchDB with jQuery Ajax/JSON frontend