1

作为 ETL 过程的一部分,我正在尝试从 Couchbase 存储桶(Couchbase Enterprise 4.5)中读取所有文档密钥 ID。这个桶可能有几千万个文档。为了测试这一点(在这个阶段,我只是想看看这种方法是否足够快以满足我们的需求),我使用如下代码设置一个大的 serverSideTimeout 值:

final N1qlParams n1qlParams = N1qlParams.build().serverSideTimeout(1L, TimeUnit.DAYS);
aBucket.query(N1qlQuery.simple("select meta(b).id from `my_bucket` as b", n1qlParams))

这开始执行,我的订阅者开始从查询中获取 id,但随后我收到此错误:

{"msg":"Index scan timed out - cause: Index scan timed out","code":12015}

我对它需要进行索引扫描并不感到惊讶,因为我实际上是在尝试读取主索引中的所有内容。这里关于“索引扫描超时”的明显相关问题在评论中提到有一个设置来调整索引扫描超时值,但我找不到这个设置在哪里。我查看了 N1qlParams 对象、CouchbaseEnvironment 以及 Couchbase 管理 UI 中集群设置的索引设置部分,但在任何地方都找不到此设置。对于希望进行全索引扫描的查询,如何将索引扫描超时设置为更长的值?

4

1 回答 1

3

正如在Couchbase 论坛帖子中发现的那样,需要向其发送http://<server>:9102/settings带有内容的 HTTP POST {"indexer.settings.scan_timeout": <new_timeout_in_milliseconds>}

似乎有许多可以使用此/settings页面配置的低级索引服务设置;发送 aGET将使用它们的当前值检索它们。

于 2016-11-16T20:27:46.780 回答