我有一个用例,我希望从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)))
它每次都给我一个超时异常,并且永远不会返回结果。您能否解释一下如何在这里实现数据的一致性以及为什么它总是给我超时异常。
StackTrace:
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)
感谢任何帮助。!
答案 0 :(得分:2)
某些版本的SDK在版本2.2.0
之前为N1QL引入了实验性支持,这是第一个在非beta状态下正式支持N1QL的版本(也就是说,与Couchbase Server 4.0配对。)
我注意到您没有使用这样的版本,因为QueryParams
在2.2.0中已重命名为N1qlParams
。所以你需要升级到最新的SDK 2.2.x(2.2.5应该会在几天内发布)。
此外,您可以设置服务器端超时(在您的示例中也是如此),但总是有客户端超时(至少在您使用{{时) 1}} api)。如果你没有根据你设置的服务器端超时增加它,你将收到Bucket
包裹RuntimeException
(客户端超时将触发)。