Почему ScanConsistency дает TimeOutExection на диване?

У меня есть вариант использования, в котором я хочу обновить данные из Couchbase, поэтому, когда я запрашиваю Couchbase для данных, просто введите:

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

Он дает мне обновленные данные до некоторого времени, но по мере увеличения размера базы данных он не предоставляет мне обновленные и непротиворечивые данные. Здесь запрос сканирует индекс и предоставляет необходимые данные соответственно. Поэтому для получения согласованных данных я использовал 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)

Любая помощь приветствуется.!


person Shiv4nsh    schedule 22.02.2016    source источник
comment
по использованию QueryParams я вижу, что вы используете устаревшую версию SDK. Пожалуйста, используйте поколение 2.2 и Couchbase Server 4.0 или выше для официальной стабильной поддержки N1QL.   -  person Simon Baslé    schedule 23.02.2016
comment
Также вы увеличили время ожидания на стороне сервера, но вы также можете попробовать увеличить время ожидания на стороне клиента, указав продолжительность и TimeUnit в вызове Bucket.get.query   -  person Simon Baslé    schedule 23.02.2016
comment
Привет @simon, не могли бы вы ответить на это. Спасибо.   -  person geraldss    schedule 28.02.2016


Ответы (1)


В некоторых версиях SDK была введена экспериментальная поддержка N1QL до версии 2.2.0, которая была первой версией, которая официально поддерживала N1QL не в бета-версии (то есть в паре с Couchbase Server 4.0).

Я заметил, что вы не используете такую ​​версию, потому что QueryParams был переименован в N1qlParams в 2.2.0. Поэтому вам необходимо обновиться до последней версии SDK 2.2.x (версия 2.2.5 должна выйти через несколько дней).

Также вы можете установить тайм-аут на стороне сервера (что вы и сделали в своем примере), но всегда есть тайм-аут на стороне клиента (по крайней мере, когда вы используете Bucket API). Если вы не увеличите его в соответствии с установленным тайм-аутом на стороне сервера, вы получите RuntimeException, обертывающий TimeoutException (сработает тайм-аут на стороне клиента).

person Simon Baslé    schedule 29.02.2016