【问题标题】:Is there any limit on the number of Scheduled Tasks that can be created in MarkLogic?MarkLogic 中可以创建的计划任务的数量是否有限制?
【发布时间】:2014-10-27 07:48:11
【问题描述】:

有没有限制:

  1. 可以在 MarkLogic 中创建的计划任务数
  2. 可以同时运行计划任务数

注意:我花了大约 20 分钟在 MarkLogic 7 中在 16 GB RAM 机器上创建 1000 个计划任务。

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

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 定义了这些限制,请告诉我。 谢谢!

【问题讨论】:

    标签: scheduled-tasks marklogic


    【解决方案1】:

    如果这些是一次性任务,为什么不直接致电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

    【讨论】:

    • 根据您建议的代码,现在在同一台机器上创建 1000 个计划任务大约需要 6 分钟。但确切的情况是,每当插入新文档时,我都会尝试从 CPF 操作模块中创建计划任务。 stackoverflow.com/questions/26493186/…
    • 我要解决的问题是:我有多个文档一次进入 MarkLogic 数据库,比如 T1,每个文档都有一个 execute-on 节点,它定义了该文档的时间戳需要释放,比如T2。因此,我们需要找到一种方法来保存 MarkLogic 中的特定文档,直到该文档的 execute-on 时间尚未到来。如果有有效的方法来实现这一点,请告诉我。
    • 这是一个单独的问题,我无法用 600 个字符回答。我不知道这是延迟处理场景还是禁运内容场景,还是其他什么情况。尝试在一个新问题中陈述问题,有人可能有更有效的方法。如果是禁运内容,通常的方法是建立一个日期时间范围索引,并将其作为查询词包含在每个查询中。
    • 我已经发布了一个单独的问题here
    猜你喜欢
    • 2017-05-09
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多