Расширенное исключение полного кэша дерева при выполнении XQuery для огромного количества документов - PullRequest
2 голосов
/ 29 мая 2019

Я пытаюсь получить значение XPath из нескольких документов. В моем случае примерно 800к документов. Я получаю и исключение называется

Кэш расширенного дерева заполнен.

Тот же запрос дает ожидаемый результат при меньшем количестве документов, т. Е. На 400 000 документов.

Ниже приведен запрос, используемый для получения значения XPath из коллекций: collection1 и collection2 :

cts:search(doc(),
  cts:and-query((
    cts:collection-query("collection1"), 
    cts:collection-query("collection2")
  ))
)/xpath/text()

Ответы [ 2 ]

3 голосов
/ 29 мая 2019

Каждый документ, который вы возвращаете из запроса, должен быть загружен в память полностью - это кэш расширенного дерева. Поэтому один запрос ограничен количеством документов, которые он может поместить в память.

Для запросов, которые должны прочитать всю базу данных - или большое подмножество - вы должны реализовать разбиение на страницы или пакетирование, чтобы предотвратить ошибку. Если вы пытаетесь экспортировать документы из базы данных MLCP автоматически выполнит пакетирование для вас.

3 голосов
/ 29 мая 2019

Пожалуйста, посмотрите, поможет ли вам ответ здесь: https://help.marklogic.com/Knowledgebase/Article/View/9/16/resolving-xdmp-expntreecachefull-errors.

Когда запрос должен фактически получить элементы, значения или иным образом просмотреть содержимое одного из этих фрагментов,фрагмент распакован и кэшируется в расширенном кеше дерева.

Итак, попробуйте переписать запрос, чтобы получить меньшее количество документов.Если у вас достаточно памяти, увеличение размера кэша расширенного дерева также может вам помочь.

...