为什么发出(meta.id,NULL)

时间:2013-08-23 04:20:02

标签: map couchbase emit

我已经阅读了一些示例代码(特别是来自Couchbase模型视图演示项目link)并且意识到map()函数非常奇怪。

function(doc, meta) {
   if (doc.type == "beer" && doc.name){
       emit(doc.name, null);
   }
}

为什么emit函数的值为null,但GetView(“啤酒”,“啤酒”)的结果是完美的值?

请帮帮我!

1 个答案:

答案 0 :(得分:7)

在couchbase中,通常视图的结果集是在后台构建的。如果您有例如每个4Kb大小的100万个文档而没有任何视图,那么它需要~4Gb的磁盘。使用地图功能(如

)创建视图时
function(doc, meta) {
   emit(doc.name, doc);
}

因此,视频结果会在磁盘上额外增加4Gb,因为视图结果是单独存储的。在大多数情况下(如果使用param Stale=Ok查询视图),couchbase将返回“预编译”记录集的结果,couchbase不会扫描每个查询的所有文档。

因此,在map函数中使用null来防止磁盘空间使用,并且还可以提高索引编制过程的速度。

现在关于沙发基地魔术的第二个问题,“来自GetView(”啤酒“,”啤酒“)的结果正在获得完美的价值”。 Couchbase get(key)getMulti(keys)操作非常快。因此,当您查询发出null的视图时,它不仅会返回nulls,还会返回文档ID。然后,您可以为该文档ID数组手动使用getMulti来获取文档的值,或者在某些SDK中,有一个名为IncludeDocs的查询参数将自动执行相同的操作。