【问题标题】:Why emit(meta.id, NULL)为什么发出(meta.id,NULL)
【发布时间】:2013-08-23 04:20:01
【问题描述】:

我阅读了一些示例代码(尤其是来自 Couchbase Model Views 演示项目link)并意识到 map() 函数是如此奇怪。

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

为什么emit函数的值为null,而GetView("beers", "beer")的结果却是完美获取值???

请帮帮我!

【问题讨论】:

  • 其实因为javascript的性质,你可以直接调用emit(doc.name)

标签: map couchbase emit


【解决方案1】:

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

function(doc, meta) {
   emit(doc.name, doc);
}

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

所以在 map 函数中使用 null 是为了防止磁盘空间的使用,同时也提高了索引过程的速度。

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

【讨论】:

    猜你喜欢
    • 2011-03-09
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    • 2011-01-12
    • 2011-01-28
    • 2018-11-22
    相关资源
    最近更新 更多