我有一个必须将集合设置为现有文档的要求。问题是我有大约2000万条记录。我正在从查询控制台运行以下查询。它抛出超时错误。 我还在下面的查询中尝试了limit = N选项。在最大程度上,我能够达到N = 40000,此后又引发超时错误。 请以任何更快的查询或方法帮助我。
for $each in cts:uri-match("/data/employee/*")
return xdmp:document-set-collections($each, "employee")
答案 0 :(得分:1)
ml-gradle为此提供了OOTB支持,不需要任何代码。请参见https://github.com/marklogic-community/ml-gradle/wiki/DMSDK-Tasks#trying-it-out并查看“ mlAddCollections”。
答案 1 :(得分:0)
分批处理是执行此类任务的正确选项。使用xdmp:spawn-function()
函数一次将多个任务放在任务服务器上。您只需要确定查询中可以在10分钟或1小时内完成的记录数即可。
例如,如果查询可以在10分钟内执行5000条记录:
let $total-records := xdmp:estimate(collection())
let $batch-size := 5000
let $pagination := 0
for $records in 1 to fn:ceiling($total-records div $batch-size )
let $start := fn:sum($pagination + 1)
let $end := fn:sum($batch-size + $pagination)
let $_ := xdmp:set($pagination, $end)
return
xdmp:spawn-function
(
function(),
for $each in cts:uri-match("/data/employee/*")[$start to $end]
return xdmp:document-set-collections($each, "employee")
)