2013-02-21 1 views
2

У меня около 15000 записей в формате xml в uri, скажем: «documents/products/specs/*.xml». Каждый xml имеет размер около 25 килобайт байтов. Я подключен к этому серверу MarkLogic uisng удаленный Apache Tomcat сервер, который имеет XCC client (Java), который пытается выполнить AdHocQuery, который напоминает что-то вроде этого:Marklogic: Время ответа ответа очень высокое

let $a := cts:uri-match('documents/products/specs/*.xml') 
      for $xml in $a 
      return fn:doc($a) 

(цикл реализуется в Java).

Это прекрасно работает. Но для записей с большим количеством отсчетов, скажем, для записи 15000, это занимает 60 минут, когда все серверные и интернет-скорости очень хороши. (Общий размер всего документа в uri составит около 20 МБ, который не должен занимать более 20 минут).

Есть ли обходной путь?

+1

15.000 * 25 = 375.000 не 20-МБ. – mblakele

ответ

1

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

Какова цель вашего запроса? Если вы хотите получить все документы, вы должны либо сбросить их с помощью программы, например, mlcp, либо получить их в меньших партиях, сначала собирая URI, а затем извлекая документы. Это можно ускорить, выполнив параллельный сбор документов. Вы можете увидеть примеры источника Java в xmlsh, который показывает, как получать документы в XCC параллельно

http://xmlsh.svn.sourceforge.net/viewvc/xmlsh/extensions/marklogic/src/org/xmlsh/marklogic/get.java?revision=792&view=markup 

Моя догадка (поправьте меня, если я ошибаюсь) это вы просто экспериментируете и фактическ не нужны все документы. В этом случае следует попробовать более реалистичный запрос.

+0

Требование состоит в том, чтобы создавать совместимые с MS-excel файлы csv, представляющие все файлы в каталоге. –

+0

Так что задайте этот вопрос: «Как мне лучше всего создать файл csv, совместимый с MS-excel, представляющий все документы в каталоге MarkLogic?» – mblakele

+0

@mblakele: http://stackoverflow.com/questions/15016876/ms-excel-compatible-csv-file-representing-all-documents-in-a-marklogic-directory –

0

Причина, по которой запрос занимает много времени, заключается в том, что для большинства этих файлов сервер Marklogic читает форму на диске. Если у вас нет действительно большого размера кеша дерева. Что вам нужно сделать, это уменьшить объем вашего запроса. Возможно, добавьте некоторые индексы в файлы.

Все, что сказано, если все, что вы хотите сделать, это ETL, то данные из этого вы можете захотеть выполнить пакет.

2

Попробуйте это:

cts:search(
    fn:doc(), 
    cts:document-query(
     cts:uri-match('documents/products/specs/*.xml') 
    ), "unfiltered" 
)