MarkLogic—是否可以配置每周计划程序,在作业完成前每分钟运行一次

MarkLogic—是否可以配置每周计划程序,在作业完成前每分钟运行一次,marklogic,Marklogic,我们使用的是MarkLogicV9.0-10.4 我们已经创建了6个调度程序(每个节点一个,6个节点集群),每1分钟运行一次,并批量删除版本化文档。一批为20000份文件。这意味着它每分钟删除120k个文档 现在我们想再次安排每周的活动。比如说上午9点。所以,每周六上午9点,这6个调度程序应该每1分钟运行一次,直到有版本化的文档。(通常,调度器需要5-7分钟来删除版本化的文档)这样的模块安装了URI/tasks/delete versions。xqy: declare variable $URI

我们使用的是MarkLogicV9.0-10.4

我们已经创建了6个调度程序(每个节点一个,6个节点集群),每1分钟运行一次,并批量删除版本化文档。一批为20000份文件。这意味着它每分钟删除120k个文档


现在我们想再次安排每周的活动。比如说上午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查询以选择要删除的版本,并指定安装递归删除模块的模块数据库:

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)  
  )

如果在上午9点启动一个每周计划的任务,它会选择所有版本的URI,然后用这些URI生成一个函数的执行,删除第一批。如果你在意休息时间,它可以睡上一分钟。然后,如果有剩余的URI要删除,它将生成另一个包含剩余URI的任务。当URI用完时,它停止生成更多的工作。我尝试了这种方法,得到了所有版本的URI(500万),创建了批,一批10k URI,现在我将这些10k URI传递给一个函数,该函数将删除它们。将函数调用放在xdmp:spawn函数中,但它似乎是按顺序运行的,我没有看到队列大小增加