2014-10-27 77 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

相關問題