是否有任何限制:
注意:在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定义了这些限制,请告诉我。 谢谢!
答案 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