MarkLogic中可以创建的计划任务数量是否有限制?

时间:2014-10-27 07:48:12

标签: scheduled-tasks marklogic

是否有任何限制:

  1. 可以在MarkLogic中创建的计划任务数
  2. 可以同时运行的计划任务数
  3. 注意:在MarkLogic 7中,在16 GB RAM计算机上创建1000个计划任务花了大约20分钟。

    以下脚本用于插入计划任务:

    xquery version "1.0-ml";
    
    import module namespace admin = "http://marklogic.com/xdmp/admin" 
                      at "/MarkLogic/admin.xqy";
    
    for $i in 1 to 1000
    
    let $config := admin:get-configuration()
    let $group := admin:group-get-id($config, "Default")
    
    let $new-task :=
      admin:group-one-time-scheduled-task(
        "/tasks/write-log.xqy",
        "/",
        xs:dateTime("2014-10-27T11:40:00"),
        xdmp:database("SampleDB"),
        xdmp:database("Modules"),
        xdmp:user("admin"), 
        (),
        "normal")
    
    let $addTask := admin:group-add-scheduled-task($config, $group, $new-task)
    
    return admin:save-configuration($addTask)
    

    如果MarkLogic定义了这些限制,请告诉我。 谢谢!

1 个答案:

答案 0 :(得分:0)

如果这些是一次性任务,为什么不直接拨打xdmp:spawn

计划任务在任务服务器上运行,因此在运行时它们受到与普通任务相同的因素的限制:线程计数和队列大小。

您的代码似乎要拨打admin:save-configuration 1000次,所以我觉得它的速度很慢并不让我感到惊讶。您还获得了1000次初始配置,这是次优的。请记住,FLWOR表达式会计算输入序列中每个项的返回表达式,并由任何where表达式过滤。

创建计划任务的瓶颈可能是管理API本身,它对新配置进行了大量内部验证。在创建十几个新森林时这很好,但它并不是为快速执行数百个配置更改而设计的。

假设有理由创建计划任务而不是调用xdmp:spawn,请尝试以下操作:

xquery version "1.0-ml";

import module namespace admin = "http://marklogic.com/xdmp/admin" 
  at "/MarkLogic/admin.xqy";

let $config := admin:get-configuration()
let $group := admin:group-get-id($config, "Default")
let $now := current-dateTime()
let $db := xdmp:database("SampleDB")
let $modules := xdmp:database("Modules")
let $user := xdmp:user("admin")
let $_ :=
  for $i in 1 to 1000
  let $new-task := admin:group-one-time-scheduled-task(
    "/tasks/write-log.xqy", "/", $now,
    $db, $modules, $user,
    (), 'normal')
  return xdmp:set($config, admin:group-add-scheduled-task($config, $group, $new-task))
return admin:save-configuration($config)

但由于这些是一次性任务,因此xdmp:spawn可能会更好。您也可以考虑使用https://github.com/mblakele/taskbot