MarkLogi c CORB - Как избежать таймаута при запуске corb - PullRequest
1 голос
/ 19 февраля 2020

Как избежать превышения тайм-аута CORB при запуске большого пакета данных, превышающего 10 миллионов документов pdf / xml? Нужно ли уменьшать количество потоков и размер пакета.

uris-модуль:

let $uris := cts:uris(
(),
(),
cts:and-query((
    cts:collection-query("/sites"),
    cts:field-range-query("cdate","<","2019-10-01"),
    cts:not-query(
        cts:or-query((
            cts:field-word-query("dcax","200"),
            more code...,
            ))
    )
))
return (fn:count($uris), $uris)

process.xqy :

declare variable $URI as xs:string external;
let $uris := fn:tokenize($URI,";")
let $outputJson := "/output/json/"
let $outputPdf := "/output/pdf/"

for $uri1 in $uris
let $accStr := fn:substring-before(fn:substring-after($uri1,"/sites/"),".xml")
let $pdfUri := fn:concat("/pdf/iadb/",$accStr,".pdf")
let $doc := fn:doc($uri1)
let $obj := json:object()
let $_ := map:put($obj,"PaginationOrMediaCount",fn:number($doc/rec/MediaCount))
let $_ := map:put($obj,"Abstract",fn:replace($doc/rec/Abstract/text(),"[^a-zA-Z0-9 ,.\-\r\n]",""))
let $_ := map:put($obj,"Descriptors",json:to-array($doc/rec/Descriptor/text()))
    let $_ := map:put($obj,"FullText",fn:replace($doc/rec/FullText/text(),"[^a-zA-Z0-9 ,.\-\r\n]",""))
let $_ := xdmp:save(
    fn:concat($outputJson,$accStr,".json"),
    xdmp:to-json($obj)
)
let $_ := if (fn:doc-available($pdfUri))
    then xdmp:save(
        fn:concat($outputPdf,$accStr,".pdf"),
        fn:doc($pdfUri)
    )
    else ()

return $URI

1 Ответ

0 голосов
/ 20 февраля 2020

Было бы проще диагностировать и предлагать улучшения, если бы вы поделились параметрами задания CoRB и кодом для МОДУЛЯ URIS и МОДУЛЯ ПРОЦЕССА

Общая концепция задания CoRB заключается в том, что он разделяет работу на выполнение нескольких модулей, а не на попытки выполнить всю работу за одно выполнение, чтобы избежать проблем с тайм-аутом и чрезмерного потребления памяти.

Для Например, если вы хотите загрузить 10 миллионов документов, URIS-MODULE выберет URI всех этих документов, а затем каждый URI будет отправлен в PROCESS-MODULE , который будет нести ответственность за его получение. В зависимости от THREAD-COUNT вы можете загружать несколько документов одновременно, но все они должны возвращаться очень быстро.

Является ли выполнение модуля URI тайм-аутом, или модуль процесса?

Вы можете увеличить предел времени ожидания от предела по умолчанию до максимального времени ожидания, используя: xdmp:request-set-time-limit()

Как правило, модули процесса должны выполнить быстро и не должно быть время ожидания. Одной из возможных причин может быть выполнение слишком большого количества работы в преобразовании (т. Е. Установка BATCH-SIZE действительно большим и слишком много одновременного выполнения) или, возможно, неверная конфигурация или плохо написанный запрос (т. Е. Вместо выборки одного do c со значением $ URI, выполняя поиск и извлекая все документы каждый раз, когда выполняется модуль процесса).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...