MarkLogic - 是否可以配置每分钟运行一次直到作业完成的每周调度程序
MarkLogic - Is it possible to configure Weekly scheduler which runs every minute until the job completes
我们正在使用 MarkLogic v9.0-10.4
我们创建了 6 个调度程序(每个节点一个,6 个节点集群)每 1 分钟 运行s 并批量删除版本化文档。一批是 20000 份文件。这意味着它每分钟删除 120k 个文档。
现在我们想再次安排 activity 每周一次。让我们说在上午 9 点。因此,每周周六上午 9 点,这 6 个调度程序应该 运行 每 1 分钟,直到有版本化文档。 (通常,调度程序需要 5-7 分钟才能删除版本化文档)
像这样的模块安装了 URI /tasks/delete-versions.xqy
:
declare variable $URIS external;
declare variable $BATCH-SIZE external;
declare variable $SLEEP external := 1000;
declare variable $MODULES-DB external;
let $head := fn:subsequence($URIS, 1, $BATCH-SIZE)
let $tail := fn:subsequence($URIS, $BATCH-SIZE + 1)
return (
xdmp:log("deleting " || count($head) || " of " || count($URIS)),
for $uri in $head
return xdmp:document-delete($uri),
if (count($tail) gt 0) then
let $params := map:map()
=> map:with(xs:QName("URIS") => xdmp:key-from-QName(), $tail)
=> map:with(xs:QName("BATCH-SIZE") => xdmp:key-from-QName(), $BATCH-SIZE)
=> map:with(xs:QName("SLEEP") => xdmp:key-from-QName(), $SLEEP)
=> map:with(xs:QName("MODULES-DB") => xdmp:key-from-QName(), $MODULES-DB)
let $options := map:map() => map:with("modules", $MODULES-DB)
return
(xdmp:sleep($SLEEP), xdmp:spawn("/tasks/delete-versions.xqy", $params, $options))
else ()
)
您可以按如下方式创建计划任务,每周计划一次,用您的逻辑替换 URI 查询以 select 要删除的版本,并指定安装递归删除模块的模块数据库:
xquery version "1.0-ml";
let $uris := cts:uris("", (), cts:true-query())
let $modules-db := xdmp:modules-database()
return
xdmp:spawn("/tasks/delete-versions.xqy",
map:map()
=> map:with(xs:QName("URIS") => xdmp:key-from-QName(), $uris)
=> map:with(xs:QName("BATCH-SIZE") => xdmp:key-from-QName(), 20000)
=> map:with(xs:QName("SLEEP") => xdmp:key-from-QName(), 60000)
=> map:with(xs:QName("MODULES-DB") => xdmp:key-from-QName(), $modules-db),
map:map() => map:with("modules", $modules-db)
)
我们正在使用 MarkLogic v9.0-10.4
我们创建了 6 个调度程序(每个节点一个,6 个节点集群)每 1 分钟 运行s 并批量删除版本化文档。一批是 20000 份文件。这意味着它每分钟删除 120k 个文档。
现在我们想再次安排 activity 每周一次。让我们说在上午 9 点。因此,每周周六上午 9 点,这 6 个调度程序应该 运行 每 1 分钟,直到有版本化文档。 (通常,调度程序需要 5-7 分钟才能删除版本化文档)
像这样的模块安装了 URI /tasks/delete-versions.xqy
:
declare variable $URIS external;
declare variable $BATCH-SIZE external;
declare variable $SLEEP external := 1000;
declare variable $MODULES-DB external;
let $head := fn:subsequence($URIS, 1, $BATCH-SIZE)
let $tail := fn:subsequence($URIS, $BATCH-SIZE + 1)
return (
xdmp:log("deleting " || count($head) || " of " || count($URIS)),
for $uri in $head
return xdmp:document-delete($uri),
if (count($tail) gt 0) then
let $params := map:map()
=> map:with(xs:QName("URIS") => xdmp:key-from-QName(), $tail)
=> map:with(xs:QName("BATCH-SIZE") => xdmp:key-from-QName(), $BATCH-SIZE)
=> map:with(xs:QName("SLEEP") => xdmp:key-from-QName(), $SLEEP)
=> map:with(xs:QName("MODULES-DB") => xdmp:key-from-QName(), $MODULES-DB)
let $options := map:map() => map:with("modules", $MODULES-DB)
return
(xdmp:sleep($SLEEP), xdmp:spawn("/tasks/delete-versions.xqy", $params, $options))
else ()
)
您可以按如下方式创建计划任务,每周计划一次,用您的逻辑替换 URI 查询以 select 要删除的版本,并指定安装递归删除模块的模块数据库:
xquery version "1.0-ml";
let $uris := cts:uris("", (), cts:true-query())
let $modules-db := xdmp:modules-database()
return
xdmp:spawn("/tasks/delete-versions.xqy",
map:map()
=> map:with(xs:QName("URIS") => xdmp:key-from-QName(), $uris)
=> map:with(xs:QName("BATCH-SIZE") => xdmp:key-from-QName(), 20000)
=> map:with(xs:QName("SLEEP") => xdmp:key-from-QName(), 60000)
=> map:with(xs:QName("MODULES-DB") => xdmp:key-from-QName(), $modules-db),
map:map() => map:with("modules", $modules-db)
)