0

我有一个用例,我想从 Couchbase 更新数据,所以当我查询 couchbase 的数据时,就像:

bucket.get.query(Query.simple(query))

它在一段时间内为我提供了更新的数据,但随着数据库大小的增加,它并没有为我提供更新和一致的数据。在这里,查询正在扫描索引并相应地提供所需的数据。因此,为了获得一致的数据,我按照couchbase 文档的建议使用了 ScanConsistency.REQUESTPLUS。但是一旦我更改代码并执行以下操作:

bucket.get.query(Query.simple(query, QueryParams.build().consistency(ScanConsistency.REQUEST_PLUS)
        .serverSideTimeout(10000, TimeUnit.SECONDS)))

它每次都给我一个超时异常,并且永远不会返回结果。您能否解释一下如何在这里实现数据的一致性以及为什么它总是给我超时异常。

堆栈跟踪:

java.lang.RuntimeException: java.util.concurrent.TimeoutException
[error]     at com.couchbase.client.java.util.Blocking.blockForSingle(Blocking.java:93)
[error]     at com.couchbase.client.java.CouchbaseBucket.query(CouchbaseBucket.java:548)
[error]     at com.couchbase.client.java.CouchbaseBucket.query(CouchbaseBucket.java:491)

任何帮助表示赞赏。!

4

1 回答 1

2

SDK 的某些版本在 version 之前引入了对 N1QL 的Experimental支持2.2.0,这是第一个正式支持 N1QL 处于非 beta 状态(即与 Couchbase Server 4.0 配对)的版本。

我注意到您没有使用这样的版本,因为在 2.2.0 中QueryParams已重命名为。N1qlParams所以你需要升级到最新的 SDK 2.2.x (2.2.5 应该在几天后出来)。

您还可以设置服务器端超时(您在示例中做了),但始终存在客户端超时(至少在您使用Bucketapi 时)。如果你不按照你设置的服务器端超时增加它,你会收到一个RuntimeException包装 a TimeoutException(客户端超时会触发)。

于 2016-02-29T09:02:33.410 回答