<!-- 
RSS generated by JIRA (9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66) at Thu Feb 08 03:01:43 UTC 2024

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary append 'field=key&field=summary' to the URL of your request.
-->
<rss version="0.92" >
<channel>
    <title>MongoDB Jira</title>
    <link>https://jira.mongodb.org</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-us</language>    <build-info>
        <version>9.7.1</version>
        <build-number>970001</build-number>
        <build-date>13-04-2023</build-date>
    </build-info>


<item>
            <title>[SERVER-2976] add a pure JS mode to map reduce to get improved performance for light jobs</title>
                <link>https://jira.mongodb.org/browse/SERVER-2976</link>
                <project id="10000" key="SERVER">Core Server</project>
                    <description>&lt;p&gt;mongod will pick mode based on:&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;by default use pure JS&lt;/li&gt;
	&lt;li&gt;if emit key is object, switch to C++ mode right away&lt;/li&gt;
	&lt;li&gt;if hashmap gets more than 1m keys, switch to C++ mode&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;On Thu, Apr 21, 2011 at 2:41 PM, Antoine Girbal &amp;lt;antoine@10gen.com&amp;gt; wrote:&lt;br/&gt;
&amp;gt; &amp;gt; That seems reasonable.&lt;br/&gt;
&amp;gt; &amp;gt; But:&lt;br/&gt;
&amp;gt; &amp;gt; 1) it&apos;s kind of pain to switch in the middle of process from full js to&lt;br/&gt;
&amp;gt; &amp;gt; C++.&lt;br/&gt;
&amp;gt; &amp;gt; 2) there is still the limitation of key being a primitive value&lt;br/&gt;
&amp;gt; &amp;gt;&lt;br/&gt;
&amp;gt; &amp;gt; For #1:&lt;br/&gt;
&amp;gt; &amp;gt; We would have to decide when to break off from JS, dump the map into C&lt;br/&gt;
&amp;gt; &amp;gt; ++, then use regular emits and process. This is kind of a pain code&lt;br/&gt;
&amp;gt; &amp;gt; wise. We could try to base it off the # of input keys as unreliable&lt;br/&gt;
&amp;gt; &amp;gt; ballpark to choose process at beginning, but that may not be always&lt;br/&gt;
&amp;gt; &amp;gt; known in case there is filter.&lt;br/&gt;
&amp;gt; &amp;gt;&lt;br/&gt;
&amp;gt; &amp;gt; For #2:&lt;br/&gt;
&amp;gt; &amp;gt; I think it&apos;s not a big limitation, since in most cases the _id of output&lt;br/&gt;
&amp;gt; &amp;gt; is a string or number. Even if someone wants to use an object as id,&lt;br/&gt;
&amp;gt; &amp;gt; they can make up a unique string from object and carry over any field&lt;br/&gt;
&amp;gt; &amp;gt; they need in the value (tried it, works fine and still fast). If we want&lt;br/&gt;
&amp;gt; &amp;gt; to support full objects as key in JS, we would need to add a hashmap&lt;br/&gt;
&amp;gt; &amp;gt; class and a object &quot;equals&quot; method. An alternative would be to serialize&lt;br/&gt;
&amp;gt; &amp;gt; object to JSON, use that as key, then deserialize later on in C++ (but&lt;br/&gt;
&amp;gt; &amp;gt; some field types cannot be serialized).&lt;br/&gt;
&amp;gt; &amp;gt;&lt;br/&gt;
&amp;gt; &amp;gt; I think it would be good at first to let user choose between modes&lt;br/&gt;
&amp;gt; &amp;gt; depending on use case, since it would solve #1 and #2.&lt;br/&gt;
&amp;gt; &amp;gt; Then once we fully understand the pros/cons of both methods we can add a&lt;br/&gt;
&amp;gt; &amp;gt; heuristic in code.&lt;br/&gt;
&amp;gt; &amp;gt; In any case it&apos;s good to have a flag to give a hint on mode to use in&lt;br/&gt;
&amp;gt; &amp;gt; case the heuristic is wrong.&lt;br/&gt;
&amp;gt; &amp;gt;&lt;br/&gt;
&amp;gt; &amp;gt; On Thu, 2011-04-21 at 14:20 -0400, Eliot Horowitz wrote:&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; So maybe if keys are less than 1M we do full js.&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; On Thu, Apr 21, 2011 at 1:20 PM, Antoine Girbal &amp;lt;antoine@10gen.com&amp;gt; wrote:&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt; right in this case the # unique keys is 364434&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt; On Thu, 2011-04-21 at 12:15 -0400, Eliot Horowitz wrote:&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; I meant # of keys.&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; i.e. number of documents in output collection.&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; the total # of docs doesn&apos;t matter.&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; On Thu, Apr 21, 2011 at 12:13 PM, Antoine Girbal &amp;lt;antoine@10gen.com&amp;gt; wrote:&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; for roundup.js on my tiny laptop, it was still much faster (over 5x) for&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; 1 million docs, and memory usage did not shoot up.&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; Where it breaks down maybe 10m or more, but it may also depend on some&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; other factors.&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; Also that&apos;s where we may see some big diff between v8 and SM since the&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; object implementation matters a lot.&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; To save memory we can easily make code reduce each key when they get too&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; big, but we would not dump to temp collection.&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; I think if our goal is to make MR 5x faster or more so that people&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; consider it a viable option, we need to provide the &quot;pure JS&quot; execution&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; process.&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; We could make it an option within the MR options, like &quot;fast&quot; or&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; &quot;pureJS&quot;.&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; I know we dont want new options but then ppl could choose pureJS for&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; quick jobs and the standard for real heavy duty stuff.&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; Also in pureJS mode the emit key would have to be a value not an object.&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; going to start committing v8 stuff but without that mode the improvement&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; will not be significant (about 20% improvement).&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; AG&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; On Wed, 2011-04-20 at 19:33 -0400, Eliot Horowitz wrote:&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; Yes.&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; For small things it worked well.&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; The problem was with large amounts of keys you can&apos;t fit it all in js,&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; which then makes it a lot more expensive.&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; If we could determine how man keys there are...&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; So we could start all in JS, and once you hit 1000 unique keys, you&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; fall back to current method...&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; Maybe its really 100k, not sure&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; On Wed, Apr 20, 2011 at 7:26 PM, Antoine Girbal &amp;lt;antoine@10gen.com&amp;gt; wrote:&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; so 1 way to get massive improvement with map/reduce, about 5x, is to&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; keep the data in js during the whole MR.&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; Right now we do:&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; - map converts all objects from bson to JS&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; - emit is called, converts objects from JS to bson, inserted in C++ map.&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; - reduce is called, objects converted from bson to JS&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; - then result of reduce converted from JS to bson and output&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; Basically there is a lot of back and forth JS/BSON, and many objects are&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; created / translated.&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; Did experiment with following:&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; - map converts all objects from bson to JS&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; - emit just stores object in JS map&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; - reduce is called, objects get reduced in JS&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; - then result of reduce converted from JS to bson and output&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; for mr1.js this brings execution from 1sec to 200ms.&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; for roundup.js it brings emit time from 40s to 15s.&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; If modify roundup to emit a string instead of object for key, gets it&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; down to 20s instead of 60s.&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; There are problems though:&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; - works if keys are string/numbers, but doesnt work if key is object.&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; This would require a real js hashmap and object comparison (not native&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; to js).&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; - potentially more memory consumption at 1 point in time (but much less&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; churning of objects overall).&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; did you guys look at this solution?&lt;br/&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; AG&lt;/p&gt;</description>
                <environment></environment>
        <key id="16252">SERVER-2976</key>
            <summary>add a pure JS mode to map reduce to get improved performance for light jobs</summary>
                <type id="4" iconUrl="https://jira.mongodb.org/secure/viewavatar?size=xsmall&amp;avatarId=14710&amp;avatarType=issuetype">Improvement</type>
                                            <priority id="3" iconUrl="https://jira.mongodb.org/images/icons/priorities/major.svg">Major - P3</priority>
                        <status id="6" iconUrl="https://jira.mongodb.org/images/icons/statuses/closed.png" description="The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.">Closed</status>
                    <statusCategory id="3" key="done" colorName="success"/>
                                    <resolution id="9">Done</resolution>
                                        <assignee username="antoine">Antoine Girbal</assignee>
                                    <reporter username="antoine">Antoine Girbal</reporter>
                        <labels>
                    </labels>
                <created>Thu, 21 Apr 2011 18:59:53 +0000</created>
                <updated>Tue, 12 Jul 2016 00:20:28 +0000</updated>
                            <resolved>Mon, 27 Jun 2011 21:30:48 +0000</resolved>
                                                    <fixVersion>1.9.1</fixVersion>
                                    <component>MapReduce</component>
                                        <votes>2</votes>
                                    <watches>3</watches>
                                                                                                                <comments>
                            <comment id="78786" author="eliot" created="Tue, 10 Jan 2012 15:50:06 +0000"  >&lt;p&gt;Please open a new ticket if you are having trouble sharded.&lt;/p&gt;</comment>
                            <comment id="78750" author="juhibhatia" created="Tue, 10 Jan 2012 09:17:54 +0000"  >&lt;p&gt;I get the same error for sharded enviornment, the stack trace being:&lt;/p&gt;

&lt;p&gt; com.mongodb.CommandResult$CommandFailure: command failed [command failed &lt;span class=&quot;error&quot;&gt;&amp;#91;mapreduce&amp;#93;&lt;/span&gt; &lt;/p&gt;
{ &quot;serverUsed&quot; : &quot;localhost:27017&quot; , &quot;ok&quot; : 0.0 , &quot;errmsg&quot; : &quot;unknown m/r field for sharding: jsMode&quot;}
&lt;p&gt;        at com.mongodb.CommandResult.getException(CommandResult.java:75)&lt;br/&gt;
        at com.mongodb.CommandResult.throwOnError(CommandResult.java:121)&lt;br/&gt;
        at com.mongodb.DBCollection.mapReduce(DBCollection.java:1055)&lt;/p&gt;

&lt;p&gt;Is jsMode : true not supported in sharded enviornment?&lt;/p&gt;
</comment>
                            <comment id="61123" author="nehresma" created="Tue, 18 Oct 2011 14:23:34 +0000"  >&lt;p&gt;Is there a reason that this isn&apos;t supported in a sharded environment?  When I attempt it I get: &quot;unknown m/r field for sharding: jsMode&quot;.&lt;/p&gt;</comment>
                            <comment id="39438" author="antoine" created="Mon, 27 Jun 2011 21:30:48 +0000"  >&lt;p&gt;this mode is fully working but not sure it&apos;s a good idea to make it default for now.&lt;br/&gt;
We may want to wait until we switch to v8 which has higher default heap limit.&lt;br/&gt;
This mode can be used today with the flag &quot;jsMode&quot;: true&lt;/p&gt;</comment>
                            <comment id="32693" author="auto" created="Fri, 13 May 2011 23:25:51 +0000"  >&lt;p&gt;Author:&lt;/p&gt;
{u&apos;login&apos;: u&apos;agirbal&apos;, u&apos;name&apos;: u&apos;agirbal&apos;, u&apos;email&apos;: u&apos;antoine@10gen.com&apos;}
&lt;p&gt;Message: &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-2976&quot; title=&quot;add a pure JS mode to map reduce to get improved performance for light jobs&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-2976&quot;&gt;&lt;del&gt;SERVER-2976&lt;/del&gt;&lt;/a&gt;: added fallback to mixed mode in case an emit key is an object&lt;br/&gt;
Branch: master&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/mongo/commit/51011c187b5c5b5fe50d7b6f09b7c12dae2c3de7&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo/commit/51011c187b5c5b5fe50d7b6f09b7c12dae2c3de7&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="32687" author="auto" created="Fri, 13 May 2011 22:00:27 +0000"  >&lt;p&gt;Author:&lt;/p&gt;
{u&apos;login&apos;: u&apos;agirbal&apos;, u&apos;name&apos;: u&apos;agirbal&apos;, u&apos;email&apos;: u&apos;antoine@10gen.com&apos;}
&lt;p&gt;Message: &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-2976&quot; title=&quot;add a pure JS mode to map reduce to get improved performance for light jobs&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-2976&quot;&gt;&lt;del&gt;SERVER-2976&lt;/del&gt;&lt;/a&gt;: added fallback from js to mixed mode, added reduce steps within js mode&lt;br/&gt;
Branch: master&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/mongo/commit/0f391def9476c65bf6e901e5e6838ce7cf39e3b1&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo/commit/0f391def9476c65bf6e901e5e6838ce7cf39e3b1&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="32332" author="auto" created="Thu, 12 May 2011 18:16:32 +0000"  >&lt;p&gt;Author:&lt;/p&gt;
{u&apos;login&apos;: u&apos;agirbal&apos;, u&apos;name&apos;: u&apos;agirbal&apos;, u&apos;email&apos;: u&apos;antoine@10gen.com&apos;}
&lt;p&gt;Message: &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-2976&quot; title=&quot;add a pure JS mode to map reduce to get improved performance for light jobs&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-2976&quot;&gt;&lt;del&gt;SERVER-2976&lt;/del&gt;&lt;/a&gt;: fix segv in m/r if ns doesnt exist&lt;br/&gt;
Branch: master&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/mongo/commit/b7509f5433974f36837a07bc8f8f8b3e5893071b&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo/commit/b7509f5433974f36837a07bc8f8f8b3e5893071b&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="32331" author="auto" created="Thu, 12 May 2011 18:16:30 +0000"  >&lt;p&gt;Author:&lt;/p&gt;
{u&apos;login&apos;: u&apos;agirbal&apos;, u&apos;name&apos;: u&apos;agirbal&apos;, u&apos;email&apos;: u&apos;antoine@10gen.com&apos;}
&lt;p&gt;Message: &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-2976&quot; title=&quot;add a pure JS mode to map reduce to get improved performance for light jobs&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-2976&quot;&gt;&lt;del&gt;SERVER-2976&lt;/del&gt;&lt;/a&gt;: jsMode now works with inline output&lt;br/&gt;
Branch: master&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/mongo/commit/fddb4b44db84495c839bb5c0358191f705926308&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo/commit/fddb4b44db84495c839bb5c0358191f705926308&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="32330" author="auto" created="Thu, 12 May 2011 18:16:28 +0000"  >&lt;p&gt;Author:&lt;/p&gt;
{u&apos;login&apos;: u&apos;agirbal&apos;, u&apos;name&apos;: u&apos;agirbal&apos;, u&apos;email&apos;: u&apos;antoine@10gen.com&apos;}
&lt;p&gt;Message: &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-2976&quot; title=&quot;add a pure JS mode to map reduce to get improved performance for light jobs&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-2976&quot;&gt;&lt;del&gt;SERVER-2976&lt;/del&gt;&lt;/a&gt;: cleaner JS&lt;br/&gt;
Branch: master&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/mongo/commit/dad6b228f76b620ccffbb6994226348e263a5281&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo/commit/dad6b228f76b620ccffbb6994226348e263a5281&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="32329" author="auto" created="Thu, 12 May 2011 18:16:26 +0000"  >&lt;p&gt;Author:&lt;/p&gt;
{u&apos;login&apos;: u&apos;agirbal&apos;, u&apos;name&apos;: u&apos;agirbal&apos;, u&apos;email&apos;: u&apos;antoine@10gen.com&apos;}
&lt;p&gt;Message: &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-2976&quot; title=&quot;add a pure JS mode to map reduce to get improved performance for light jobs&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-2976&quot;&gt;&lt;del&gt;SERVER-2976&lt;/del&gt;&lt;/a&gt;: slightly better js function. Cleanup of js objects.&lt;br/&gt;
Branch: master&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/mongo/commit/860369c353452e0b135d7944a84674862136d59a&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo/commit/860369c353452e0b135d7944a84674862136d59a&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="32328" author="auto" created="Thu, 12 May 2011 18:16:23 +0000"  >&lt;p&gt;Author:&lt;/p&gt;
{u&apos;login&apos;: u&apos;agirbal&apos;, u&apos;name&apos;: u&apos;agirbal&apos;, u&apos;email&apos;: u&apos;antoine@10gen.com&apos;}
&lt;p&gt;Message: &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-2976&quot; title=&quot;add a pure JS mode to map reduce to get improved performance for light jobs&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-2976&quot;&gt;&lt;del&gt;SERVER-2976&lt;/del&gt;&lt;/a&gt;: fixed the emit count in js mode&lt;br/&gt;
Branch: master&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/mongo/commit/acb028bdcd34d2908d7f354dd98932213abb6ad1&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo/commit/acb028bdcd34d2908d7f354dd98932213abb6ad1&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="32043" author="antoine" created="Wed, 11 May 2011 03:50:55 +0000"  >&lt;p&gt;some result from current code as of d47de50498be988f3a8b139214a63e80d4d9fac3&lt;/p&gt;

&lt;p&gt;For the M/R of roundup.js (mongo downloads) we get about 2.5x&lt;br/&gt;
&amp;gt; db.runCommand({mapReduce: &quot;downloads&quot;, map: function()&lt;/p&gt;
{ emit( getMonth(this) + &quot;_&quot; + this.ip , 1 ); }
&lt;p&gt;, reduce: function(k,values)&lt;/p&gt;
{ return Array.sum( values); }
&lt;p&gt;, out: &quot;myoutnew&quot;, verbose: true, jsMode: true })&lt;/p&gt;

&lt;p&gt;SM in mixed mode:&lt;br/&gt;
{&lt;br/&gt;
	&quot;result&quot; : &quot;myoutnew&quot;,&lt;br/&gt;
	&quot;timeMillis&quot; : 72510,&lt;br/&gt;
	&quot;timing&quot; : &lt;/p&gt;
{
		&quot;mapTime&quot; : NumberLong(50614),
		&quot;emitLoop&quot; : 65134,
		&quot;total&quot; : 72510
	}
&lt;p&gt;,&lt;br/&gt;
	&quot;counts&quot; : &lt;/p&gt;
{
		&quot;input&quot; : 1036354,
		&quot;emit&quot; : 1036354,
		&quot;output&quot; : 364434
	}
&lt;p&gt;,&lt;br/&gt;
	&quot;ok&quot; : 1&lt;br/&gt;
}&lt;/p&gt;

&lt;p&gt;v8 in mixed mode:&lt;br/&gt;
{&lt;br/&gt;
	&quot;result&quot; : &quot;myoutnew&quot;,&lt;br/&gt;
	&quot;timeMillis&quot; : 53050,&lt;br/&gt;
	&quot;timing&quot; : &lt;/p&gt;
{
		&quot;mapTime&quot; : NumberLong(28193),
		&quot;emitLoop&quot; : 42201,
		&quot;total&quot; : 53050
	}
&lt;p&gt;,&lt;br/&gt;
	&quot;counts&quot; : &lt;/p&gt;
{
		&quot;input&quot; : 1036354,
		&quot;emit&quot; : 1036354,
		&quot;output&quot; : 364434
	}
&lt;p&gt;,&lt;br/&gt;
	&quot;ok&quot; : 1&lt;br/&gt;
}&lt;/p&gt;

&lt;p&gt;v8 in JS mode:&lt;br/&gt;
{&lt;br/&gt;
	&quot;result&quot; : &quot;myoutnew&quot;,&lt;br/&gt;
	&quot;timeMillis&quot; : 30985,&lt;br/&gt;
	&quot;timing&quot; : &lt;/p&gt;
{
		&quot;mapTime&quot; : NumberLong(20077),
		&quot;emitLoop&quot; : 21112,
		&quot;total&quot; : 30985
	}
&lt;p&gt;,&lt;br/&gt;
	&quot;counts&quot; : &lt;/p&gt;
{
		&quot;input&quot; : 1036354,
		&quot;emit&quot; : 0,
		&quot;output&quot; : 364434
	}
&lt;p&gt;,&lt;br/&gt;
	&quot;ok&quot; : 1&lt;br/&gt;
}&lt;/p&gt;

&lt;p&gt;&amp;#8212;&lt;/p&gt;

&lt;p&gt;Test running jstests/mr1.js..&lt;br/&gt;
v8 in mixed mode:&lt;br/&gt;
	&quot;timeMillis&quot; : 1573,&lt;br/&gt;
	&quot;timeMillis&quot; : 1073,&lt;/p&gt;

&lt;p&gt;v8 in pure JS mode:&lt;br/&gt;
	&quot;timeMillis&quot; : 470,&lt;br/&gt;
	&quot;timeMillis&quot; : 447,&lt;/p&gt;</comment>
                            <comment id="31991" author="auto" created="Tue, 10 May 2011 22:30:20 +0000"  >&lt;p&gt;Author:&lt;/p&gt;
{u&apos;login&apos;: u&apos;agirbal&apos;, u&apos;name&apos;: u&apos;agirbal&apos;, u&apos;email&apos;: u&apos;antoine@10gen.com&apos;}
&lt;p&gt;Message: &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-2579&quot; title=&quot;change v8 wrapper to be lazy&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-2579&quot;&gt;&lt;del&gt;SERVER-2579&lt;/del&gt;&lt;/a&gt;: added readonly object for lazy v8 objects, which makes them much faster to access&lt;br/&gt;
&lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-2976&quot; title=&quot;add a pure JS mode to map reduce to get improved performance for light jobs&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-2976&quot;&gt;&lt;del&gt;SERVER-2976&lt;/del&gt;&lt;/a&gt;: further implementation of jsMode for M/R. Can be turned on using temp flag jsMode:true&lt;br/&gt;
Branch: master&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/mongo/commit/13e71279c964fc3f84e682901f37152935557f70&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo/commit/13e71279c964fc3f84e682901f37152935557f70&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="31989" author="auto" created="Tue, 10 May 2011 22:30:18 +0000"  >&lt;p&gt;Author:&lt;/p&gt;
{u&apos;login&apos;: u&apos;agirbal&apos;, u&apos;name&apos;: u&apos;agirbal&apos;, u&apos;email&apos;: u&apos;antoine@10gen.com&apos;}
&lt;p&gt;Message: &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-2976&quot; title=&quot;add a pure JS mode to map reduce to get improved performance for light jobs&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-2976&quot;&gt;&lt;del&gt;SERVER-2976&lt;/del&gt;&lt;/a&gt;: added M/R pure jsMode with collection output&lt;br/&gt;
Branch: master&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/mongo/commit/8d13203c40150d93b5747adf4430a8b6edd21ac9&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo/commit/8d13203c40150d93b5747adf4430a8b6edd21ac9&lt;/a&gt;&lt;/p&gt;</comment>
                    </comments>
                    <attachments>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                <customfield id="customfield_10050" key="com.atlassian.jira.toolkit:comments">
                        <customfieldname># Replies</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>14.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <customfield id="customfield_10055" key="com.atlassian.jira.ext.charting:firstresponsedate">
                        <customfieldname>Date of 1st Reply</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Tue, 10 May 2011 22:30:18 +0000</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10052" key="com.atlassian.jira.toolkit:dayslastcommented">
                        <customfieldname>Days since reply</customfieldname>
                        <customfieldvalues>
                                        12 years, 6 weeks, 1 day ago
    
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_18254" key="com.onresolve.jira.groovy.groovyrunner:scripted-field">
                        <customfieldname>Dependencies</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue><![CDATA[]]></customfieldvalue>


                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_15850" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_10057" key="com.atlassian.jira.toolkit:lastusercommented">
                        <customfieldname>Last comment by Customer</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>true</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_10056" key="com.atlassian.jira.toolkit:lastupdaterorcommenter">
                        <customfieldname>Last commenter</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>ramon.fernandez@mongodb.com</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_11151" key="com.atlassian.jira.toolkit:LastCommentDate">
                        <customfieldname>Last public comment date</customfieldname>
                        <customfieldvalues>
                            12 years, 6 weeks, 1 day ago
                        </customfieldvalues>
                    </customfield>
                                                                                                                        <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons">
                        <customfieldname>Old_Backport</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10000"><![CDATA[No]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                <customfield id="customfield_10051" key="com.atlassian.jira.toolkit:participants">
                        <customfieldname>Participants</customfieldname>
                        <customfieldvalues>
                                        <customfieldvalue>antoine</customfieldvalue>
            <customfieldvalue>auto</customfieldvalue>
            <customfieldvalue>eliot</customfieldvalue>
            <customfieldvalue>juhibhatia</customfieldvalue>
            <customfieldvalue>nehresma</customfieldvalue>
    
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                        <customfield id="customfield_14254" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Product Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>1|hrp14v:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                <customfield id="customfield_12550" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>2|hrieyf:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10558" key="com.pyxis.greenhopper.jira:gh-global-rank">
                        <customfieldname>Rank (Obsolete)</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>21075</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_23361" key="com.onresolve.jira.groovy.groovyrunner:scripted-field">
                        <customfieldname>Requested By</customfieldname>
                        <customfieldvalues>
                                

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <customfield id="customfield_10053" key="com.atlassian.jira.ext.charting:timeinstatus">
                        <customfieldname>Time In Status</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_22870" key="com.onresolve.jira.groovy.groovyrunner:scripted-field">
                        <customfieldname>Triagers</customfieldname>
                        <customfieldvalues>
                                

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                    <customfield id="customfield_14350" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>serverRank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>1|hs24qn:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                    </customfields>
    </item>
</channel>
</rss>