为什么 ScanConsistency 在 couchbase 中给出 TimeOutExection?
Why ScanConsistency gives TimeOutExection in couchbase?
我有一个用例,我想从 Couchbase 更新数据,所以当我查询 Couchbase 的数据时,就像这样:
bucket.get.query(Query.simple(query))
它给了我更新的数据,直到一段时间,但随着数据库大小的增加,它并没有为我提供更新的和一致的数据。
这里的查询正在扫描索引并相应地提供所需的数据。
因此,为了获得一致的数据,我按照 couchbase documentation. 的建议使用了 ScanConsistency.REQUESTPLUS 但是一旦我更改代码并执行如下操作:
bucket.get.query(Query.simple(query, QueryParams.build().consistency(ScanConsistency.REQUEST_PLUS)
.serverSideTimeout(10000, TimeUnit.SECONDS)))
它每次都给我一个超时异常,但从来没有 returns 我得到结果。能否请您解释一下我如何才能在这里实现数据的一致性以及为什么它总是给我超时异常。
堆栈跟踪:
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)
感谢任何帮助!
某些版本的 SDK 在版本 2.2.0
之前引入了对 N1QL 的 实验性 支持,这是第一个在非 Beta 状态下正式支持 N1QL 的版本(即也就是说,与 Couchbase Server 4.0 配对)。
我注意到你没有使用这样的版本,因为 QueryParams
在 2.2.0 中被重命名为 N1qlParams
。所以你需要升级到最新的SDK 2.2.x(2.2.5应该过几天就出来了)。
你也可以设置一个服务器端超时(你在你的例子中做了)但是总是有一个客户端超时(至少当你使用 Bucket
api 时)。如果您不根据您设置的服务器端超时增加它,您将收到一个 RuntimeException
包装一个 TimeoutException
(客户端超时将触发)。
我有一个用例,我想从 Couchbase 更新数据,所以当我查询 Couchbase 的数据时,就像这样:
bucket.get.query(Query.simple(query))
它给了我更新的数据,直到一段时间,但随着数据库大小的增加,它并没有为我提供更新的和一致的数据。 这里的查询正在扫描索引并相应地提供所需的数据。 因此,为了获得一致的数据,我按照 couchbase documentation. 的建议使用了 ScanConsistency.REQUESTPLUS 但是一旦我更改代码并执行如下操作:
bucket.get.query(Query.simple(query, QueryParams.build().consistency(ScanConsistency.REQUEST_PLUS)
.serverSideTimeout(10000, TimeUnit.SECONDS)))
它每次都给我一个超时异常,但从来没有 returns 我得到结果。能否请您解释一下我如何才能在这里实现数据的一致性以及为什么它总是给我超时异常。
堆栈跟踪:
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)
感谢任何帮助!
某些版本的 SDK 在版本 2.2.0
之前引入了对 N1QL 的 实验性 支持,这是第一个在非 Beta 状态下正式支持 N1QL 的版本(即也就是说,与 Couchbase Server 4.0 配对)。
我注意到你没有使用这样的版本,因为 QueryParams
在 2.2.0 中被重命名为 N1qlParams
。所以你需要升级到最新的SDK 2.2.x(2.2.5应该过几天就出来了)。
你也可以设置一个服务器端超时(你在你的例子中做了)但是总是有一个客户端超时(至少当你使用 Bucket
api 时)。如果您不根据您设置的服务器端超时增加它,您将收到一个 RuntimeException
包装一个 TimeoutException
(客户端超时将触发)。