Nice!! You should start a parallel companyŠI suggest the name "MikeLogic"

Šand you should hire Gary Vidal as the co-founder. Between the two of you,
technology will become indistinguishable from magic ;-)

-----Original Message-----
From: Michael Blakeley <[email protected]>
Reply-To: MarkLogic Developer Discussion <[email protected]>
Date: Monday, April 14, 2014 11:46 PM
To: MarkLogic Developer Discussion <[email protected]>
Subject: [MarkLogic Dev General] meet taskbot

MarkLogic 7 includes support for anonymous functions, plus a new builtin
called xdmp:spawn-function. I've been using these to put the Task Manager
to work, and https://github.com/mblakele/taskbot is the result.

Taskbot is basically a map-reduce utility. Start with an anonymous
function, and a list of stuff: document URIs, or anything else. Taskbot
spawns a task for each segment of the list, using a size you specify. You
provide an anonymous function that processes each segment. The Task
Manager queue and thread pool manage the work, providing as much
data-driven parallelism as the configuration and the workload allow.

If the anonymous function updates the database, your work is done. If your
function returns results, supply $tb:OPTIONS-SYNC and reduce the results
however you like.

All that might sound a little too abstract, so here's a quick example.
Inserting 1M documents in a single transaction can be painful, but it's
easy with tasks of 500 documents each.

(: This inserts 1M simple test documents,
 : in segments of 500 documents each.
 : Extend as needed.
 :)
tb:list-segment-process(
  (: Total size of the job. :)
  1 to 1000 * 1000,
  (: Size of each segment of work. :)
  500,
  "test/",
  (: This anonymous function will be called for each segment. :)
  function($list as item()+, $opts as map:map?) {
    (: Any chainsaw should have a safety. Check it here. :)
    tb:maybe-fatal(),
    for $i in $list return xdmp:document-insert(
      "test/"||$i,
      element test { attribute id { 'test-'||$i }, $i }),
    (: This is an update, so be sure to commit. :)
    xdmp:commit() },
  (: options - not used in this example. :)
  map:new(map:entry('testing', '123...'),
  (: This is an update, so be sure to say so. :)
  $tb:OPTIONS-UPDATE)

There are more examples in the README at
https://github.com/mblakele/taskbot - plus xray test cases.

I hope it's useful.

-- Mike
_______________________________________________
General mailing list
[email protected]
http://developer.marklogic.com/mailman/listinfo/general


_______________________________________________
General mailing list
[email protected]
http://developer.marklogic.com/mailman/listinfo/general

Reply via email to