<html><body><div style="color:#000; background-color:#fff; font-family:times new roman, new york, times, serif;font-size:12pt"><div style="font-family: 'times new roman', 'new york', times, serif; font-size: 12pt; "><span>Hi Geert,</span></div><div style="font-family: 'times new roman', 'new york', times, serif; font-size: 16px; color: rgb(0, 0, 0); background-color: transparent; font-style: normal; "><span><br></span></div><div style="font-family: 'times new roman', 'new york', times, serif; font-size: 16px; color: rgb(0, 0, 0); background-color: transparent; font-style: normal; "><span>I need to know when is finished as other logic depends on it and this is why I cannot use spawn for now.&nbsp;</span></div><div style="background-color: transparent; "><span>Could you explain why there will be more disk writes if I am using separate transaction for each document?&nbsp;</span></div><div style="background-color: transparent; color: rgb(0, 0, 0); font-size:
 16px; font-family: 'times new roman', 'new york', times, serif; font-style: normal; "><span><br></span></div><div style="background-color: transparent; color: rgb(0, 0, 0); font-size: 16px; font-family: 'times new roman', 'new york', times, serif; font-style: normal; "><span>Thanks,</span></div><div style="background-color: transparent; color: rgb(0, 0, 0); font-size: 16px; font-family: 'times new roman', 'new york', times, serif; font-style: normal; "><span>Tomo</span></div><div style="font-family: 'times new roman', 'new york', times, serif; font-size: 12pt; "><br></div>  <div style="font-family: 'times new roman', 'new york', times, serif; font-size: 12pt; "> <div style="font-family: 'times new roman', 'new york', times, serif; font-size: 12pt; "> <div dir="ltr"> <font size="2" face="Arial"> <hr size="1">  <b><span style="font-weight:bold;">From:</span></b> Geert Josten &lt;geert.josten@dayon.nl&gt;<br> <b><span style="font-weight:
 bold;">To:</span></b> Tomo Simeonov &lt;tomosimeonov@yahoo.com&gt;; MarkLogic Developer Discussion &lt;general@developer.marklogic.com&gt; <br> <b><span style="font-weight: bold;">Sent:</span></b> Thursday, August 30, 2012 8:17 PM<br> <b><span style="font-weight: bold;">Subject:</span></b> RE: [MarkLogic Dev General] How to improve performance of update query?<br> </font> </div> <br>
<div id="yiv2130690314"><style><!--
#yiv2130690314  
 _filtered #yiv2130690314 {font-family:Calibri;panose-1:2 15 5 2 2 2 4 3 2 4;}
 _filtered #yiv2130690314 {font-family:Tahoma;panose-1:2 11 6 4 3 5 4 4 2 4;}
#yiv2130690314  
#yiv2130690314 p.yiv2130690314MsoNormal, #yiv2130690314 li.yiv2130690314MsoNormal, #yiv2130690314 div.yiv2130690314MsoNormal
        {margin:0cm;margin-bottom:.0001pt;font-size:12.0pt;font-family:"Times New Roman", "serif";}
#yiv2130690314 a:link, #yiv2130690314 span.yiv2130690314MsoHyperlink
        {color:blue;text-decoration:underline;}
#yiv2130690314 a:visited, #yiv2130690314 span.yiv2130690314MsoHyperlinkFollowed
        {color:purple;text-decoration:underline;}
#yiv2130690314 span.yiv2130690314E-mailStijl17
        {font-family:"Calibri", "sans-serif";color:#1F497D;}
#yiv2130690314 .yiv2130690314MsoChpDefault
        {font-size:10.0pt;}
 _filtered #yiv2130690314 {margin:70.85pt 70.85pt 70.85pt 70.85pt;}
#yiv2130690314 div.yiv2130690314WordSection1
        {}
--></style><div><div class="yiv2130690314WordSection1"><div class="yiv2130690314MsoNormal"><span lang="EN-US" style="font-size:11.0pt;color:#1f497d;">Hi Tomo,</span></div>
<div class="yiv2130690314MsoNormal"><span lang="EN-US" style="font-size:11.0pt;color:#1f497d;">&nbsp;</span></div><div class="yiv2130690314MsoNormal"><span lang="EN-US" style="font-size:11.0pt;color:#1f497d;">I think xdmp:spawn is indeed the way to go, certainly if you don’t need to wait for response from xdmp:eval. Spawned tasks are typically processed in parallel in bunches of 16 or 32. I’d also recommend not creating a separate task for each document, but do so for let’s say batches of a 100. That reduced the total number of disk writes. You might also want to push calculation work into the spawned tasks, doing as little as possible in the main task. That makes sure as much as possible is done in parallel..</span></div>
<div class="yiv2130690314MsoNormal"><span lang="EN-US" style="font-size:11.0pt;color:#1f497d;">&nbsp;</span></div><div class="yiv2130690314MsoNormal"><span lang="EN-US" style="font-size:11.0pt;color:#1f497d;">Kind regards,</span></div>
<div class="yiv2130690314MsoNormal"><span lang="EN-US" style="font-size:11.0pt;color:#1f497d;">Geert</span></div><div class="yiv2130690314MsoNormal"><span lang="EN-US" style="font-size:11.0pt;color:#1f497d;">&nbsp;</span></div>
<div><div style="border:none;border-top:solid #b5c4df 1.0pt;padding:3.0pt 0cm 0cm 0cm;"><div class="yiv2130690314MsoNormal"><b><span lang="EN-US" style="font-size:10.0pt;">Van:</span></b><span lang="EN-US" style="font-size:10.0pt;"> gener</span><span style="font-size:10.0pt;"><a rel="nofollow" ymailto="mailto:al-bounces@developer.marklogic.com" target="_blank" href="mailto:al-bounces@developer.marklogic.com">al-bounces@developer.marklogic.com</a> [mailto:<a rel="nofollow" ymailto="mailto:general-bounces@developer.marklogic.com" target="_blank" href="mailto:general-bounces@developer.marklogic.com">general-bounces@developer.marklogic.com</a>] <b>Namens </b>Tomo Simeonov<br>
<b>Verzonden:</b> donderdag 30 augustus 2012 21:02<br><b>Aan:</b> <a rel="nofollow" ymailto="mailto:General@developer.marklogic.com" target="_blank" href="mailto:General@developer.marklogic.com">General@developer.marklogic.com</a><br><b>Onderwerp:</b> [MarkLogic Dev General] How to improve performance of update query?</span></div>
</div></div><div class="yiv2130690314MsoNormal">&nbsp;</div><div><div><div class="yiv2130690314MsoNormal" style="background:white;"><span style="color:black;">Hi,</span></div></div><div><div class="yiv2130690314MsoNormal" style="background:white;"><span style="color:black;">&nbsp;</span></div>
</div><div><div class="yiv2130690314MsoNormal"><span style="color:black;">I have been working on a query for updating elements in the database.</span></div></div><div><div class="yiv2130690314MsoNormal"><span style="color:black;">I am providing many values and then &nbsp;for the elements that have any of this values I am doing node-replace. Those elements can be in any of the documents in the database not in just one.</span></div>
</div><div><div class="yiv2130690314MsoNormal"><span style="color:black;">It doesn't run very fast if I want to update more than 100 elements in one go and this is just a test, later one a could end up updating&nbsp;thousands.</span></div></div>
<div><div class="yiv2130690314MsoNormal"><span style="color:black;">&nbsp;</span></div></div><div><div class="yiv2130690314MsoNormal"><span style="color:black;">What I am doing&nbsp;</span></div></div><div><div class="yiv2130690314MsoNormal"><span style="color:black;">1) Search for elements that have one of those values - it has good performance as it uses indexes&nbsp;</span></div>
</div><div><div class="yiv2130690314MsoNormal"><span style="color:black;">2) I am creating map in which I am storing maps - each stored map contains the nodes that need to be changed in one specific document</span></div></div><div><div class="yiv2130690314MsoNormal">
<span style="color:black;">3) For each document to be updated I am creating&nbsp;separate&nbsp;transaction with xdmp:eval and provide the correct map, in the transaction I am doing the node-replaces as I do not want to lock all the documents I am searching through.</span></div>
</div><div><div class="yiv2130690314MsoNormal"><span style="color:black;">&nbsp;</span></div></div><div><div class="yiv2130690314MsoNormal"><span style="color:black;">This works almost perfectly&nbsp;until&nbsp;xdmp:eval part is reache. All evals are executed in serial not in parallel which is causing the bad performance.</span></div>
</div><div><div class="yiv2130690314MsoNormal"><span style="color:black;">My question is - is there a way to execute does&nbsp;dmp:evals in parallel ( xdmp:spawn is not &nbsp;an option for now)?</span></div></div><div><div class="yiv2130690314MsoNormal"><span style="color:black;">Also is&nbsp;there&nbsp;&nbsp;a better way to do many updates to nodes across many documents?&nbsp;</span></div>
</div><div><div class="yiv2130690314MsoNormal"><span style="color:black;">&nbsp;</span></div></div><div><div class="yiv2130690314MsoNormal"><span style="color:black;">Thank you,&nbsp;</span></div></div><div><div class="yiv2130690314MsoNormal"><span style="color:black;">Tomo&nbsp;</span></div>
</div></div></div></div>
</div><br><br> </div> </div>  </div></body></html>