代码之家  ›  专栏  ›  技术社区  ›  thichxai

MarkLogic CORB-如何避免运行CORB时超时

  •  0
  • thichxai  · 技术社区  · 5 年前

    当运行大量数据拉取超过1000万个pdf/xml文档时,如何避免CORB超时?我需要减少线程数和批量大小吗。

    uri模块:

    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)
    

    过程.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
    
    0 回复  |  直到 5 年前
        1
  •  1
  •   Mads Hansen    5 年前

    如果您共享CoRB作业选项和您的代码,则更容易诊断和提出改进建议 uri模块 进程模块

    CoRB作业的一般概念是将工作拆分为执行多个模块执行,而不是试图在一次执行中完成所有工作,以避免超时问题和过度的内存消耗。

    例如,如果你想下载1000万份文档 uri模块 将选择所有这些文档的URI,然后将每个URI发送到 进程模块 ,它将负责检索它。取决于 螺纹安装 ,您可以一次下载多个文档,但它们都应该很快返回。

    URI模块的执行是超时,还是流程模块?

    您可以使用以下命令将超时限制从默认限制增加到最大超时限制: xdmp:request-set-time-limit()

    一般来说,流程模块应该快速执行,不应该超时。一个可能的原因是在转换中执行了太多的工作(即设置 批量大小 非常大,一次做得太多),或者可能是配置错误或编写不当的查询(即,不是用$URI值获取单个文档,而是在每次执行流程模块时执行搜索并检索所有文档)。