Warm tip: This article is reproduced from serverfault.com, please click

xquery-MarkLogic:处理文档以添加属性的超时

(xquery - MarkLogic: Timeout for processing document to add properties)

发布于 2020-12-02 06:57:12

MarkLogic:9.8.0

我们大约有20M的数据,现在我们需要将其他数据添加到文档属性中。

所以我们有安装调度程序,下面的代码将被执行

let $Log := xdmp:log("[ Project ][ Scheduler ][ Start ][ ======================== Insert Records Scheduler Start ======================== ]")

for $author in (/author][not(property::root/contributors)])[1 to 500]

let $uri           := $author/base-uri()
let $auth_element  := if ($author/aug)
                      then
                           for $auth in $author/aug/pname
                               let $snm := $auth/snm/text()
                               let $fnm := fn:concat(fn:string-join(for $i in $auth/fnm return $i,' '),'')
                               return
                                     <pname type='author'>{fn:normalize-space(fn:concat($snm,' ',$fnm))}</pname>
                      else if ($author/editg)
                      then
                           for $auth in $author/pname
                               let $snm := $auth/snm/text()
                               let $fnm := fn:concat(fn:string-join(for $i in $auth/fnm return $i,' '),'')
                               return
                                     <pname type='editor'>{fn:normalize-space(fn:concat($snm,' ',$fnm))}</pname>
                      else ()
let $XmlDoc := <root><contributors>{$auth_element}</contributors></root>             
        
return try{
            xdmp:document-add-properties($uri,$XmlDoc),
            xdmp:log("[ InspecDirect ][ Scheduler ][ End ][ ======================== Insert Records Scheduler End ======================== ]")
            }
       catch($e){xdmp:log($e)}

当我们从[1到500]更改为[1到10000]时,这里会出现超时错误。而且,如果我们使用500,那么将需要数周的时间来完成它。

你能否让我知道这种方法是否合适?

Questioner
Manish Joisar
Viewed
0
Michael Gardner 2020-12-02 22:31:00

Corb2可能是更好的解决方案。你可以将当前的XQuery分成两部分。第一部分将收集需要更新的URI。

第二部分将URI作为输入,并进行相应的处理。这允许处理非常大的批次而不会超时。

Corb2 Wiki

Corb2 Github