View 在MapReduce实现中,reduce函数的索引是否与map函数类似?

View 在MapReduce实现中,reduce函数的索引是否与map函数类似?,view,mapreduce,couchdb,View,Mapreduce,Couchdb,如果我在沙发上放了两个像这样的文件: { "_id": "be890e3ee1457e920f12722c44001b0e", // Or whatever auto ID "_rev": "7-74d1787aa3ca6d2526c4436577da660f", // Or whatever auto rev "type_": "count", "value": -1, "time": 1485759832925 // This is an Epoch time,

如果我在沙发上放了两个像这样的文件:

{
   "_id": "be890e3ee1457e920f12722c44001b0e", // Or whatever auto ID
   "_rev": "7-74d1787aa3ca6d2526c4436577da660f", // Or whatever auto rev
   "type_": "count",
   "value": -1,
   "time": 1485759832925 // This is an Epoch time, the result of this JavaScript: var x = (new Date()).getTime(), that I calculate in the console just before saving the doc
}
然后我创建了一个map函数来检索这些文档,如下所示(在创建了几个文档后直接运行):

功能(doc){
如果(单据类型){
如果(单据时间){
var datetime=(new Date()).getTime();
var docTime=doc.time;
var docAge=datetime-docTime;
//仅发射小于1分钟的文档
如果(docAge/1000您的视图本身没有被“缓存”。CouchDB视图背后的想法是它们是确定性的,因此不应该受到文档之外的任何影响

在视图中使用
new Date()
意味着您引入了一个外部资源(时钟),这意味着您的视图索引将以您不打算基于您的问题的方式计算

映射函数必须处理绝对值,因此它应该输出时间戳,而不考虑重建视图索引的时间。从应用程序中,您可以将要查询的时间作为参数传递给视图查询

例如,考虑这个视图函数:

function (doc) {
  if (doc.type_ && doc.time) {
    emit(doc.time);
  }
}
它将输出所有文档的时间。然后,您将查询传入预期时间范围的视图

?start_key=<timestamp from 1 minute ago>
?启动键=
然后您将获得时间戳在最后一分钟内的文档。您可以包括
end\u key
来指定上限


CouchDB中的MapReduce视图如何工作,需要克服一些心理障碍,因此我强烈建议他们开始使用(事实上,他们的最新文档非常好,我强烈建议通读所有文档)

如果你说视图不是“缓存”的,那么输出存储在哪里?如何存储?我知道如何使用视图查询coach,以上是一个理论示例来突出我的问题。这基本上是“coach如何处理视图输出”我的意思是,您的视图正在被计算和存储,这与缓存不同。缓存意味着它是临时的,可能会过期,而coach构建的索引是确定性的。(这就是为什么coach使用的MapReduce范式中不适合“当前时间”等外部因素的原因)谢谢。你知道视图输出存储在哪里吗?只是出于兴趣…它是在db文件中还是在单独的文件中?啊,是的,如果你查看
/var/lib/couchdb
,你会发现扩展名为
.view
的文件,这些是存储计算视图索引的文件。具体位置可能因平台而异,例如,它可以位于
/usr/local/var/lib/couchdb
中。您可以在同一位置找到数据库文件,它们有
.coach
扩展名。
?start_key=<timestamp from 1 minute ago>