Couchbase开发视图在发布到生产之前不会显示结果

时间:2014-10-22 02:05:53

标签: couchbase couchbase-view

我在生产 Couchbase服务器

上创建了一个非常简单的开发视图
function (doc, meta) {
  if (meta.id.indexOf("user:") == 0) emit(meta.id, doc);
}

此视图不会返回任何结果。在我的本地couchbase服务器上测试相同的视图效果很好。

将此视图作为生产视图发布可以正常工作。

可能有什么不对?我使用的是Couchbase版本:2.2.0社区版(build-837)

1 个答案:

答案 0 :(得分:0)

在开发视图时,Couchbase将仅使用存储桶中的一部分数据来获取结果。 IIRC这是一个vBucket的数据。它使用数据子集,因为某些视图可能非常大,而在开发新视图时,您不希望陷入整个群集。因此,虽然很少见,但是当您运行开发视图时,在该一个集群上拾取的数据子集可能没有匹配的结果。一旦将该索引提升为生产视图,即您已完成开发并准备在prod中使用它,那么它将使用该桶中的整个数据集。

在相关的说明中,如果我没有弄错的话,看起来你正在发出整个文件。根据您的数据集和此视图对该数据的选择性,随着数据的增长,这可能会非常昂贵。所以你必须要看这个。确保你有足够的磁盘空间和足够的操作系统RAM(不被Couchbase占用),以便在内存中保留尽可能多的索引,因为它的处理方式与Couchbase对象不同。发送大量数据也会降低重新平衡速度,尤其是在使用默认内部设置(如索引感知重新平衡)时。我显然不知道你的用例,但最好只发出ID然后批量获取这些ID或其他东西。这可能是视图可以做到这一点的情况之一,是的,但是它们应该是否有更好的方法来解决同样的问题。无论如何,只需要考虑一下。