作为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}
我对它需要进行索引扫描并不感到惊讶,因为我实际上是在尝试读出主索引中的所有内容。 obvious related question here about "Index scan timed out"在评论中提到有一个设置来调整索引扫描超时值,但我无法找到此设置的位置。我查看了N1qlParams对象,CouchbaseEnvironment以及Couchbase管理界面中群集设置的索引设置部分,我无法在任何地方找到此设置。 如何在我希望进行完整索引扫描的查询中将索引扫描超时设置为更长的值?
答案 0 :(得分:1)
在Couchbase forum post中找到,需要向内容为http://<server>:9102/settings
的{{1}}发送HTTP POST。
似乎可以使用此{"indexer.settings.scan_timeout": <new_timeout_in_milliseconds>}
页面配置许多这些低级索引服务设置;发送/settings
将使用其当前值检索所有值。