如何增加N1QL索引扫描超时?



作为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 Admin UI中集群设置的索引设置部分,但我在任何地方都找不到这个设置。我如何将索引扫描超时设置为更长的查询值,我希望做一个完整的索引扫描?

在Couchbase论坛帖子中发现,需要向http://<server>:9102/settings发送一个包含{"indexer.settings.scan_timeout": <new_timeout_in_milliseconds>}内容的HTTP post。

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

最新更新