如何在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