2014-10-27 25 views
0

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

  1. 数量可在MarkLogic创建计划任务的?
  2. 定时任务数那可以同时运行

注意:我花了大约20分钟,MarkLogic创建16 GB内存的机器上的1000个计划任务7.

下面的脚本是用来插入计划任务:

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定义这些限制。 谢谢!

回答

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

+0

根据您的建议代码,现在需要大约6分钟时间才能在同一台计算机上创建1000个计划任务。但确切的情况是,我试图在插入新文档时从CPF操作模块中创建计划任务。 http://stackoverflow.com/questions/26493186/unable-to-create-mark-logic-scheduled-tasks-from-within-cpf-action-module/26494107#26494107 – Rahul 2014-10-28 06:47:13

+0

我试图解决的问题是:我有多个文档同时进入MarkLogic数据库,比如T1,每个文档都有一个'execute-on'节点,它定义了文档需要释放的时间戳,比如T2。因此,我们需要找到一种方法在MarkLogic中保存特定的文档,直到文档的“执行时间”尚未到达。请让我知道,如果有一个有效的方法来实现这一点。 – Rahul 2014-10-28 09:58:39

+0

这是一个单独的问题,我无法用600个字符来回答。我无法分辨这是延迟处理场景还是禁止内容场景,或其他。尝试在一个新问题中陈述问题,并且有人可能有更高效的方法。如果它是禁止的内容,通常的做法是构建一个dateTime范围索引,并将其作为查询术语包含在每个查询中。 – mblakele 2014-10-28 16:27:11

相关问题