Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何衡量MongoDB与CouchDB的大数据平均值?_Mongodb_Mapreduce_Couchdb_Bigdata_Nosql - Fatal编程技术网

如何衡量MongoDB与CouchDB的大数据平均值?

如何衡量MongoDB与CouchDB的大数据平均值?,mongodb,mapreduce,couchdb,bigdata,nosql,Mongodb,Mapreduce,Couchdb,Bigdata,Nosql,我正在看这个图表 …上面说: 查询方法 CouchDB-映射/减少javascript函数,以便为每个查询惰性地构建索引 MongoDB-动态;基于对象的查询语言 这到底意味着什么?例如,如果我想取100000000个值的平均值,CouchDB是否会以MapReduce的方式自动执行 有人能告诉我如何在两个系统中取100000000个平均值吗。。。这将是一个非常有启发性的例子 谢谢。我不能谈论MongoDB,但我可以告诉你CouchDB。CouchDB只能通过Map/Reduce视图引擎进行本

我正在看这个图表

…上面说:

查询方法

CouchDB-映射/减少javascript函数,以便为每个查询惰性地构建索引

MongoDB-动态;基于对象的查询语言

这到底意味着什么?例如,如果我想取100000000个值的平均值,CouchDB是否会以MapReduce的方式自动执行

有人能告诉我如何在两个系统中取100000000个平均值吗。。。这将是一个非常有启发性的例子


谢谢。

我不能谈论MongoDB,但我可以告诉你CouchDB。CouchDB只能通过Map/Reduce视图引擎进行本机查询。事实上,这是一个很好的开始

视图包含一个映射功能和一个可选的减少功能。编写这些函数的典型语言是JavaScript,但有一个可用的Erlang选项,可以用几乎任何其他编程语言构建视图引擎

map函数用于构建数据库中文档的数据集。reduce函数用于聚合该数据集。因此,创建视图后,映射函数将在数据库中的每个文档上运行。(并首先查询)创建后,该函数仅在新创建或修改/删除的文档上运行。因此,视图索引是以增量方式而不是动态地构建的

在100000000个值的情况下,CouchDB不需要每次请求时都计算查询结果。相反,它将只报告它存储的视图索引的值,该索引本身仅在创建/更新/删除文档时更改

至于编写Map/Reduce函数,很多工作留给程序员完成,因为没有内置的Map函数。(即,它不是“自动的”)但是,有一些(
\u sum
\u count
\u 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
      }
    }
  ]
}

从这里计算平均值很简单,只需将总和除以计数即可。如果你想在视图中计算平均值,你可以查看。

CouchDB的视图是一个奇怪而迷人的野兽

CouchDB进行增量映射/缩减,也就是说,一旦指定了“视图”,它的工作方式就有点像关系数据库中的物化视图。无论你的平均文档数是30亿还是30亿,这都无关紧要。结果就在那里

但这里有三重陷阱

1) 创建和更新视图后,查询速度很快。如果您有很多小文档(如果可能,请使用更胖的文档),则视图创建可能会很慢。创建视图后,中间缩减步骤将存储在B树节点中,您不必重新计算它们

2) 当您进行查询时,视图会延迟更新。为了获得可预测的性能,您最好设置某种作业来定期更新它们。

3) 您需要非常清楚如何使用组合键、范围和分组查询数据。CouchDB不擅长做临时查询。

我相信很快会有人发布关于如何在两个数据库中平均处理100000000个项目的详细信息,但您必须了解CouchDB会让您做更多的前期工作,以便从它的增量方法中获益。这确实是一种非常独特的方法,但并不真正适用于对特定查询数据进行平均或任何操作的场景

在Mongo中,您可以使用map/reduce(不是增量的。不管您的平均文档数是30亿还是30亿,Mongo都很重要,但由于其内存映射I/O方法,Mongo被认为速度非常快)或其聚合功能