2016-11-16 4 views
0

Как часть процесса ETL, я пытаюсь прочитать все идентификаторы ключевых документов из ковша Couchbase (Couchbase Enterprise 4.5). Это ведро может содержать десятки миллионов документов. Чтобы проверить это (на данном этапе я просто пытаюсь увидеть, если этот подход будет достаточно быстро для наших нужд), я устанавливаю большое значение serverSideTimeout используя такой код:Как увеличить тайм-аут сканирования индекса N1QL?

final N1qlParams n1qlParams = N1qlParams.build().serverSideTimeout(1L, TimeUnit.DAYS); 
aBucket.query(N1qlQuery.simple("select meta(b).id from `my_bucket` as b", n1qlParams)) 

Это начинает выполняться, и мой абонент начинает получать идентификаторы обратно из запроса, но я получаю эту ошибку:

{"msg":"Index scan timed out - cause: Index scan timed out","code":12015} 

Я не удивлен, что это необходимости делать индексное сканирование, так как я на самом деле пытаюсь прочитать все, в первичный индекс. obvious related question here about "Index scan timed out" упоминает в комментариях, что существует настройка для настройки значения тайм-аута сканирования индекса, но я не могу найти, где этот параметр. Я просмотрел объект N1qlParams, CouchbaseEnvironment и в разделе «Параметры индекса» параметров кластера в пользовательском интерфейсе Couchbase Admin, и я не могу найти этот параметр нигде. Как установить тайм-аут сканирования индекса на более длинное значение для запросов, где я ожидаю выполнить полное сканирование индекса?

ответ

1

Как найдено в Couchbase forum post, необходимо отправить HTTP-сообщение POST на адрес http://<server>:9102/settings с контентом {"indexer.settings.scan_timeout": <new_timeout_in_milliseconds>}.

Похоже, что существует множество этих низкоуровневых сервисных параметров индекса, которые могут быть сконфигурированы с использованием этой страницы /settings; отправка GET будет извлекать их всех с их текущими значениями.