1

我在生产Couchbase 服务器上创建了一个非常简单的开发视图

function (doc, meta) {
  if (meta.id.indexOf("user:") == 0) emit(meta.id, doc);
}

此视图不返回任何结果。在我的本地 couchbase 服务器上测试相同的视图可以正常工作。

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

有什么问题?我正在使用 Couchbase 版本:2.2.0 社区版(build-837)

4

1 回答 1

0

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

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

于 2014-10-22T16:50:48.750 回答