<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description></description><title>The MongoDB NoSQL Database Blog</title><generator>Tumblr (3.0; @mongodb)</generator><link>http://blog.mongodb.org/</link><item><title>MongoDB and Twilio Contest</title><description>&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_l7d011cTA61qbihth.jpg"/&gt; MongoDB and &lt;a href="http://contests.twilio.com/"&gt;Twilio&lt;/a&gt; are teaming up this week to do a contest!  You have until midnight on August 22nd to create an application using Twilio and MongoDB.  The best application wins:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;A netbook&lt;/li&gt;
&lt;li&gt;$100 of Twilio credit&lt;/li&gt;
&lt;li&gt;MongoDB Timbuk2 Laptop Bag (the only other ways to get one are to be a major contributor or write a MongoDB book)&lt;/li&gt;
&lt;li&gt;MongoDB T-shirt&lt;/li&gt;
&lt;li&gt;MongoDB Coffee Mug&lt;/li&gt;
&lt;li&gt;MongoDB Stickers&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;It’s a very open ended contest: you can create any application, so long as it uses MongoDB to store some of its data and the Twilio API.  When you’re done, submit it on the &lt;a href="http://contests.twilio.com/submit-your-twilio-project.html"&gt;Twilio website&lt;/a&gt;.  Some resources to get you started:&lt;/p&gt;
&lt;dl&gt;&lt;dt&gt;Twilio&lt;/dt&gt; &lt;dd&gt; 
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.twilio.com/docs/index"&gt;Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.getsatisfaction.com/twilio"&gt;Forums&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/dd&gt; &lt;dt&gt;MongoDB&lt;/dt&gt; &lt;dd&gt; 
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.mongodb.org/display/DOCS/Home"&gt;Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://groups.google.com/group/mongodb-user"&gt;Forums&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/dd&gt; &lt;/dl&gt;&lt;p&gt;Good luck!&lt;/p&gt;</description><link>http://blog.mongodb.org/post/972888997</link><guid>http://blog.mongodb.org/post/972888997</guid><pubDate>Wed, 18 Aug 2010 13:49:00 -0400</pubDate><category>contest</category><category>Twilio</category></item><item><title>MongoDB 1.6 Released</title><description>&lt;p&gt;MongoDB 1.6.0 is the fourth stable major release (even numbers are “stable” : 1.0, 1.2, 1.4, …) and is the culmination of the 1.5 development series.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Scale-out&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The focus of the 1.6 release is scale-out.  &lt;a target="_blank" href="http://www.mongodb.org/display/DOCS/Sharding"&gt;Sharding&lt;/a&gt; is now production-ready.  The combination of sharding and replica sets allows one to build out horizontally scalable data storage clusters with no single points of failure.&lt;/p&gt;
&lt;p&gt;A single instance of mongod can be upgraded to a distributed cluster with zero downtime when the need arises.&lt;/p&gt;
&lt;p&gt;A big thanks to all the 1.5.x beta testers of sharding (including &lt;a target="_blank" href="http://www.foursquare.com"&gt;foursquare&lt;/a&gt; and &lt;a target="_blank" href="http://bit.ly"&gt;bit.ly&lt;/a&gt; who have been using sharding in production for a while now).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Replica Sets&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;Replica sets allow you to setup a high availability cluster with automatic fail over and recovery.  Replica pair users should, when convenient, migrate to replica sets.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Other Improvements in v1.6&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a target="_blank" href="http://www.mongodb.org/display/DOCS/Verifying+Propagation+of+Writes+with+getLastError"&gt;acknowledged replication&lt;/a&gt;: The w option (and wtimeout) force writes to be propagated to N servers before returning success (works well with replica sets).&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24or"&gt;$or&lt;/a&gt; queries&lt;/li&gt;
&lt;li&gt;Up to 64 indexes/collection&lt;/li&gt;
&lt;li&gt;Improved concurrency&lt;/li&gt;
&lt;li&gt;&lt;a title="$slice operator" href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24sliceoperator"&gt;$slice operator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Support for UNIX domain sockets and IPv6&lt;/li&gt;
&lt;li&gt;Windows service improvements&lt;/li&gt;
&lt;li&gt;The C++ client is a separate tarball from the binaries&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Downloads: &lt;a href="http://www.mongodb.org/display/DOCS/Downloads"&gt;&lt;a href="http://www.mongodb.org/display/DOCS/Downloads"&gt;http://www.mongodb.org/display/DOCS/Downloads&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Release Notes: &lt;a href="http://www.mongodb.org/display/DOCS/1.6+Release+Notes"&gt;&lt;a href="http://www.mongodb.org/display/DOCS/1.6+Release+Notes"&gt;http://www.mongodb.org/display/DOCS/1.6+Release+Notes&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://jira.mongodb.org/secure/IssueNavigator.jspa?mode=hide&amp;requestId=10107"&gt;Full change log&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Please report any issues to &lt;a href="http://groups.google.com/group/mongodb-user"&gt;&lt;a href="http://groups.google.com/group/mongodb-user"&gt;http://groups.google.com/group/mongodb-user&lt;/a&gt;&lt;/a&gt; (support forums) or &lt;a href="http://jira.mongodb.org/"&gt;&lt;a href="http://jira.mongodb.org/"&gt;http://jira.mongodb.org/&lt;/a&gt;&lt;/a&gt; (bug/feature db).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What’s Next&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Now that 1.6 is out, we’re going to be focusing on 1.8.  Help us prioritize features for this release by voting for your key needs at &lt;a href="http://jira.mongodb.org/"&gt;jira.mongodb.org&lt;/a&gt;.  The #1 feature queued for v1.8 is single server durability.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;More Information&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Please join 10gen CEO and Co-Founder Dwight Merriman for the webinar &lt;a href="http://www.10gen.com/webinars/mongodb16"&gt;What’s New in MongoDB v1.6&lt;/a&gt; on Tuesday, August 10 at 12:30pm ET / 9:30am PT.&lt;/p&gt;</description><link>http://blog.mongodb.org/post/908172564</link><guid>http://blog.mongodb.org/post/908172564</guid><pubDate>Thu, 05 Aug 2010 12:28:00 -0400</pubDate></item><item><title>Node.js and MongoDB</title><description>&lt;p&gt;Node.js is turning out to be a framework of choice for building real-time applications of all kinds, from analytics systems to chat servers to location-based tracking services. If you’re still new to Node, check out &lt;a title="Node.js is genuinely exciting" href="http://simonwillison.net/2009/Nov/23/node/"&gt;Simon Willison’s excellent introductory post&lt;/a&gt;. If you’re already using Node, you probably need a database, and you just might have considered using MongoDB.&lt;/p&gt;
&lt;p&gt;The rationale is certainly there. Working with Node’s JavaScript means that MongoDB documents get their most natural representation — as JSON — right in the application layer. There’s also significant continuity between your application and the MongoDB shell, since the shell is essentially a JavaScript interpreter, so you don’t have to change languages when moving from application to database.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Node.js MongodB Driver&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Especially impressive to us at 10gen has been the community support for Node.js and MongoDB. First, there’s Christian Kvalheim’s excellent &lt;a title="MongoDB Node Native Driver" href="http://github.com/christkv/node-mongodb-native"&gt;mongodb-node-native project&lt;/a&gt;, a non-blocking MongoDB driver implemented entirely in JavaScript using Node.js’s system libraries. The project is a pretty close port of the &lt;a title="MongoDB Ruby Driver" href="http://www.mongodb.org/display/DOCS/Ruby+Language+Center"&gt;MongoDB Ruby driver&lt;/a&gt;, making for an easy transition for those already used to the 10gen-supported drivers. If you’re just starting, there’s a helpful &lt;a title="MongoDB Node Native Mailing List" href="http://groups.google.com/group/node-mongodb-native"&gt;mongodb-node-native mailing list&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hummingbird&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Need a real-world example? Check out &lt;a title="Hummingbird App" href="http://mnutt.github.com/hummingbird/"&gt;Hummingbird&lt;/a&gt;, Michael Nutt’s real-time analytics app. It’s built on top of MongoDB using Node.js and the mongodb-node-native driver. Hummingbird, which is used in production at &lt;a title="Gilt Groupe" href="http://www.gilt.com/"&gt;Gilt Groupe&lt;/a&gt;, brings together an impressive array of technologies; it uses the &lt;a title="Express.js" href="http://expressjs.com/"&gt;express.js&lt;/a&gt; Node.js app framework and sports a responsive interface with the help of web sockets. Definitely worth checking out.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mongoose&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Of course, one of the admitted difficulties in working with Node.js is dealing with deep callback structures. If this poses a problem, or if you happen to want a richer data modeling library, then &lt;a title="Mongoose" href="http://www.learnboost.com/mongoose/"&gt;Mongoose&lt;/a&gt; is the answer. Created by &lt;a title="Learnboost" href="http://www.learnboost.com/"&gt;Learnboost&lt;/a&gt;, Mongoose sits atop mongodb-node-native, providing a nice API for modeling your application.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Node Knockout&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;All of this just to show that the MongoDB/Node.js ecosystem thrives. If you need a good excuse to jump into Node.js or MongoDB development, be sure to check out next month’s &lt;a title="Node Knockout" href="http://nodeknockout.com/"&gt;Node Knockout&lt;/a&gt;. It’s a weekend app competition for teams up to four, and &lt;a title="Node Knockout Registration" href="http://nodeknockout.com/teams/new"&gt;registration is now open&lt;/a&gt;. &lt;/p&gt;</description><link>http://blog.mongodb.org/post/812003773</link><guid>http://blog.mongodb.org/post/812003773</guid><pubDate>Wed, 14 Jul 2010 15:49:00 -0400</pubDate></item><item><title>Blog Contest Winners!</title><description>&lt;p&gt;We’re pleased to announce the winner’s of the MongoDB &lt;a href="http://blog.mongodb.org/post/607112305/write-a-blog-post-on-mongodb-for-a-chance-to-win-a"&gt;blogging contest&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;Grand Prize&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a target="_blank" href="http://www.mattinsler.com/why-and-how-i-replaced-amazon-sqs-with-mongodb/"&gt;Why (and How) I Replaced Amazon SQS with MongoDB&lt;/a&gt; - Matt Insler&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Runners Up&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.captaincodeman.com/2010/05/24/mongodb-azure-clouddrive/"&gt;Running MongoDb on Microsoft Windows Azure with CloudDrive&lt;/a&gt; - Simon Green&lt;/li&gt;
&lt;li&gt;&lt;a href="http://codesanity.net/2010/05/mongodb-codeigniter-logs/"&gt;Using MongoDB for CodeIgniter Logs&lt;/a&gt; - Tom Schlick&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jbaruch.wordpress.com/2010/04/27/integrating-mongodb-with-spring-batch/"&gt;Integrating MongoDB with Spring Batch&lt;/a&gt; - Baruch Sadogursky&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;The winners should contact meghan@10gen.com to claim their prizes.&lt;/p&gt;
&lt;p&gt;You check out all the awesome entries at &lt;a href="http://mongodb.slinkset.com/"&gt;mongodb.slinkset.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Thanks to everyone who submitted!&lt;/p&gt;</description><link>http://blog.mongodb.org/post/677516152</link><guid>http://blog.mongodb.org/post/677516152</guid><pubDate>Tue, 08 Jun 2010 15:50:04 -0400</pubDate></item><item><title>Highlights from MongoNYC</title><description>&lt;p&gt;On May 21, 10gen organized the second conference dedicated to MongoDB. Like MongoSF, MongoNYC included a great line-up of speakers. One of the more popular talks was Kyle Banker’s Schema Design session, which was so crowded that many attendees sat on the floor! Both the &lt;a target="_blank" href="http://blip.tv/file/3704083"&gt;video&lt;/a&gt; and &lt;a target="_blank" href="http://www.slideshare.net/kbanker/mongodb-schema-design-mongony"&gt;slides&lt;/a&gt; from the talk are now available. &lt;/p&gt;
&lt;p&gt;&lt;img width="250" src="http://media.tumblr.com/tumblr_l3fwofB2dt1qzyevi.jpg"/&gt; &lt;/p&gt;
&lt;p&gt;Also interesting were the many talks on MongoDB production deployments. Kushal Dave, the CTO at Chartbeat, gave an excellent talk on how Chartbeat came to use MongoDB after trying many solutions to store historical data analytics (see &lt;a target="_blank" href="http://bit.ly/chartbeat_mongodb"&gt;slides&lt;/a&gt; &amp; &lt;a target="_blank" href="http://blip.tv/file/3701052"&gt;video&lt;/a&gt;). Jay Ridgeway talked about bit.ly user history, which is auto-sharded using MongoDB (&lt;a target="_blank" href="http://bit.ly/bitly_mongo"&gt;slides&lt;/a&gt; &amp; &lt;a target="_blank" href="http://blip.tv/file/3704043"&gt;video&lt;/a&gt;). Gilt Groupe demoed their real-time analytics tool &lt;a target="_blank" href="http://mnutt.github.com/hummingbird/"&gt;Hummingbird&lt;/a&gt;, which is built with MongoDB and node.js. Avery Rosen, the CTO of ShopWiki, wrote a recap of his talk “Finding a Swiss army data store” on the &lt;a target="_blank" href="http://devblog.shopwiki.com/post/660499806/averys-talk-at-mongonyc"&gt;ShopWiki dev blog&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Another big hit was Harry Heymann’s presentation on MongoDB at foursquare, the video of which is included below.&lt;/p&gt;
&lt;p&gt;&lt;embed allowfullscreen="true" allowscriptaccess="always" height="355" width="425" type="application/x-shockwave-flash" src="http://blip.tv/play/AYHjoCYA"&gt;&lt;/embed&gt;&lt;/p&gt;
&lt;p&gt;Videos from all the talks at MongoNYC are available at &lt;a target="_blank" href="http://mongodb.blip.tv/"&gt;mongodb.blip.tv&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Thanks for making the event such a success! We’re getting really excited about &lt;a href="http://www.10gen.com/conferences/event_mongouk_18june10"&gt;MongoUK&lt;/a&gt; and &lt;a href="http://www.10gen.com/conferences/event_mongofr_21june10"&gt;MongoFR&lt;/a&gt;, which are only a few weeks away.&lt;/p&gt;</description><link>http://blog.mongodb.org/post/673306445</link><guid>http://blog.mongodb.org/post/673306445</guid><pubDate>Mon, 07 Jun 2010 11:15:03 -0400</pubDate></item><item><title>Holy Large Hadron Collider, Batman!</title><description>&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_l3fxep9cOJ1qbihth.jpg" style="float: left; padding: 10px;"/&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.lns.cornell.edu/~vk/"&gt;Valentin Kuznetsov&lt;/a&gt; just presented a paper at the &lt;a href="http://www.iccs-meeting.org/"&gt;International Conference on Computational Science&lt;/a&gt; on CERN’s use of MongoDB for Large Hadron Collider data.  The paper, &lt;em&gt;The CMS Data Aggregation System&lt;/em&gt;, is available as a PDF at &lt;a href="http://www.sciencedirect.com/science?_ob=ArticleURL&amp;_udi=B9865-506HM1Y-63&amp;_user=10&amp;_coverDate=05%2F31%2F2010&amp;_alid=1357020903&amp;_rdoc=1&amp;_fmt=high&amp;_orig=search&amp;_cdi=59117&amp;_sort=r&amp;_docanchor=&amp;view=c&amp;_ct=1&amp;_acct=C000050221&amp;_version=1&amp;_urlVersion=0&amp;_userid=10&amp;md5=095f3839793bb37ca66502f36f81f0c8"&gt;ScienceDirect&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;A summary&lt;/h4&gt;

&lt;p&gt;“CMS” stands for &lt;a href="http://cms.web.cern.ch/cms/index.html"&gt;Compact Muon Solenoid&lt;/a&gt;, a general-purpose particle physics detector built on the Large Hadron Collider.  The CMS project posted a few &lt;a href="http://cms.web.cern.ch/cms/Education/ComicBook/index.html"&gt;comics&lt;/a&gt; which provide a nice, simple (if somewhat cheesy) explanation of what the CMS/LHC does.&lt;/p&gt;

&lt;p&gt;The LHC generates massive amounts of data of all different varieties, which is distributed across a worldwide grid.  It sends status messages to some of the computers, job monitoring info to other computers, bookkeeping info still elsewhere, and so on.&lt;/p&gt;

&lt;p&gt;This means that each location has specialized queries it can do on the data it has, but up until now it’s been very difficult to query across the whole grid.  Enter the Data Aggregation System, designed to allow anything to be queried across all of the machines.&lt;/p&gt;

&lt;h4&gt;How it works&lt;/h4&gt;

&lt;p&gt;The aggregation system uses MongoDB as a cache.  It checks if Mongo has the aggregation the user is asking for and, if it does, returns it, otherwise the system does the aggregation and saves it to Mongo.&lt;/p&gt;

&lt;p&gt;They query the system using a simple, SQL-like language which they transform into a MongoDB query.  So, something like &lt;code&gt;file="abc", run&gt;10&lt;/code&gt; becomes &lt;code&gt;{"file" : "abc", "run" : {"$gt" : 10}}&lt;/code&gt;.  (It’s not the same as SQL, but the code for this might be interesting to people who want to use SQL queries with MongoDB.)&lt;/p&gt;

&lt;p&gt;If the cache does not contain the requested query, the system iterates over all of the places in the world that could have this information and queries them, gathering their results.  It then merges all of the results, doing a sort of “group by” operation based on predefined identifying key and inserts the aggregated information into the cache.&lt;/p&gt;

&lt;p&gt;It was built using the &lt;a href="http://www.mongodb.org/display/DOCS/Python+Language+Center"&gt;Python driver&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;Goals&lt;/h4&gt;

&lt;p&gt;They’re looking forward to field testing it and horizontally scaling the system with sharding.  As this is a general grid aggregation/querying tool, they’re also interested in applying it to problems outside of the LHC and CERN.&lt;/p&gt;

&lt;p&gt;We wish them luck and hope they’ll keep us informed on future progress!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Edit: the slides from Valentin’s presentation are available at &lt;a href="http://www.slideshare.net/vkuznet/das-iccs-2010"&gt;&lt;a href="http://www.slideshare.net/vkuznet/das-iccs-2010"&gt;http://www.slideshare.net/vkuznet/das-iccs-2010&lt;/a&gt;&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;div style="background-color: #EEEEEE;"&gt;&lt;em&gt;Kristina Chodorow maintains the MongoDB PHP and Perl drivers.  She blogs at &lt;a href="http://www.snailinaturtleneck.com"&gt;&lt;a href="http://www.snailinaturtleneck.com"&gt;www.snailinaturtleneck.com&lt;/a&gt;&lt;/a&gt; and tweets as &lt;a href="http://www.twitter.com/kchodorow"&gt;@kchdorow&lt;/a&gt;.&lt;/em&gt;&lt;/div&gt;</description><link>http://blog.mongodb.org/post/660037122</link><guid>http://blog.mongodb.org/post/660037122</guid><pubDate>Thu, 03 Jun 2010 09:53:00 -0400</pubDate><category>CERN</category><category>Caching</category><category>Compact Muon Solenoid</category><category>Large Hadron Collider</category><category>aggregation</category></item><item><title>Write a blog post on MongoDB for a chance to win a ticket to OSCON 2010!</title><description>&lt;p&gt;10gen has a ticket to &lt;a href="http://www.oscon.com/oscon2010"&gt;OSCON&lt;/a&gt; that we’d like to give to a MongoDB user.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;How to Enter&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Write a blog post.  It has to be about MongoDB, but within that it can be anything: a how-to, an experience you had, a review, a rant, a rave, a technical piece, a humorous piece… whatever you want.&lt;/li&gt;
&lt;li&gt;Post your blog at &lt;a href="http://mongodb.slinkset.com/"&gt;mongodb.slinkset.com&lt;/a&gt; and include your contact information in the description.  You must submit by June 1st.  Your post must be publicly accessible (not behind a pay wall or members-only site).&lt;/li&gt;
&lt;li&gt;We’ll announce the winners June 7th.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;span&gt;&lt;em&gt;Prizes&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Grand prize&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;1 ticket to OSCON&lt;/li&gt;
&lt;li&gt;MongoDB swag package: shirt, coffee mug, and stickers&lt;/li&gt;
&lt;li&gt;Option to do a guest post on blog.mongodb.org&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;There will also be 3 runners up who get MongoDB mugs and stickers, as well as mentions/links on blog.mongodb.org.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;Judging&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;50% public judging - vote up your favorite blogs at &lt;a href="http://mongodb.slinkset.com/"&gt;mongodb.slinkset.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;50% will be done by a panel of MongoDB core developers.  We’ll be looking for a really great piece on MongoDB, a piece that is really interesting.  Please don’t forget to proofread!&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;span&gt;&lt;em&gt;Rules&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;It must be written.  No screencasts or podcasts, sorry.  You can use images but no audio or video are allowed.&lt;/li&gt;
&lt;li&gt;It must be posted at &lt;a href="http://mongodb.slinkset.com/"&gt;mongodb.slinkset.com&lt;/a&gt;, and include your contact information in the description.&lt;/li&gt;
&lt;li&gt;Entries will be accepted between Monday May 17 and Tuesday June 1st.&lt;/li&gt;
&lt;li&gt;You must provide for your own travel, we’re just giving you the OSCON ticket. You have to get your own plane ticket, hotel reservation, visa (if you’re outside the US) etc.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;If you don’t have a blog, you can get one in about 3 seconds from &lt;a href="http://posterous.com/"&gt;Posterous&lt;/a&gt; or &lt;a href="http://www.tumblr.com/"&gt;tumblr&lt;/a&gt;.  Make sure you’re identifiable if you go this route!&lt;/p&gt;
&lt;p&gt;Good luck everyone!&lt;/p&gt;</description><link>http://blog.mongodb.org/post/607112305</link><guid>http://blog.mongodb.org/post/607112305</guid><pubDate>Mon, 17 May 2010 11:08:22 -0400</pubDate></item><item><title>MongoSF Slides &amp; Video; Discounts on upcoming MongoDB conferences</title><description>&lt;p&gt;MongoSF, the first full-day conference dedicated to MongoDB, featured 35+ sessions and even produced a few surprises along the way. Over 200 people attended the April 30 conference. Slides and video from many sessions now available on the &lt;a target="_blank" href="http://www.10gen.com/event_mongosf_10apr30"&gt;10gen website&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The Sharding presentation was one of the major highlights of the event. Eliot Horowitz, the CTO of 10gen, demoed a 25-node cluster on EC2. Check out the &lt;a target="_blank" href="http://www.10gen.com/event_mongosf_10apr30#sharding"&gt;video&lt;/a&gt; of the session.&lt;/p&gt;
&lt;p&gt;MongoHQ made a major announcement during their session, launching their add-on to all Heroku users as a public beta. For more details, check out the &lt;a target="_blank" href="http://blog.heroku.com/archives/2010/4/30/mongohq_add_on_public_beta"&gt;Heroku blog&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The conference was held at &lt;a target="_blank" href="http://www.bentlyreserve.com/"&gt;Bently Reserve&lt;/a&gt;, where we hope many future tech conferences will take place. Not only is the venue beautiful and historic, but it is fully equipped for conferences. The wireless actually worked!&lt;/p&gt;
&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_l27gj5Vfku1qzyevi.jpg"/&gt;&lt;br/&gt;&lt;em&gt;The main banking hall at Bently Reserve at 8:30 on the morning of MongoSF - it filled up shortly thereafter!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;More MongoDB conferences coming soon! Use the discount code “blog” when registering.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.10gen.com/event_mongony_10may21"&gt;MongoNYC&lt;/a&gt; - Friday, May 21&lt;br/&gt;&lt;a href="http://www.10gen.com/conferences/event_mongouk_18june10"&gt;MongoUK&lt;/a&gt; - Friday, June 18 &lt;br/&gt;&lt;a href="http://www.10gen.com/conferences/event_mongofr_21june10"&gt;MongoFR&lt;/a&gt; - Monday, June 21 &lt;/p&gt;</description><link>http://blog.mongodb.org/post/586818965</link><guid>http://blog.mongodb.org/post/586818965</guid><pubDate>Mon, 10 May 2010 09:40:17 -0400</pubDate></item><item><title>MongoDB Conferences in London and Paris in June</title><description>&lt;p&gt;MongoDB conferences are coming to Europe! &lt;a target="_blank" href="http://www.10gen.com/conferences/event_mongouk_18june10"&gt;MongoUK&lt;/a&gt; is on Friday, June 18 at Skills Matter and &lt;a target="_blank" href="http://www.10gen.com/conferences/event_mongofr_21june10"&gt;MongoFR&lt;/a&gt; is on Monday, June 21 at La Cantine. Each conference will feature sessions from the 10gen team on schema design, replication, sharding, indexing, and map/reduce. In addition, attendees will learn about MongoDB in production through presentations by companies like Boxed Ice, Silentale, OCW Search, and Novelys.&lt;/p&gt;
&lt;p&gt;10gen is organizing MongoFR in conjunction with the NoSQL Paris User Group, with the help of NoSQL enthusiast Tim Anglade. (Pour les francophones : nous devons vous avertir que certaines sessions de MongoFR seront en anglais et d’autres en français. La journée sera également suivie d’une rencontre spéciale de l’UG — entrée gratuite à partir de 19h à La Cantine. Pour plus d’informations en français, contactez timanglade@gmail.com par email ou @timanglade sur Twitter.)&lt;/p&gt;
&lt;p&gt;We look forward to seeing you there!&lt;/p&gt;</description><link>http://blog.mongodb.org/post/573215976</link><guid>http://blog.mongodb.org/post/573215976</guid><pubDate>Wed, 05 May 2010 06:00:00 -0400</pubDate></item><item><title>MongoDB Q1 Download Numbers</title><description>&lt;p&gt;&lt;span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The MongoDB team is very excited about how the developer community is building around MongoDB, and we wanted to share some numbers.&lt;/p&gt;
&lt;p&gt;These are download numbers for the core server for January through March.  It is exactly the number of downloads of the core database from downloads.mongodb.org minus all bots (all known plus anything with bot in the user-agent) and all other crawlers we determine.  We use these numbers internally, so we do try and keep them accurate.&lt;/p&gt;
&lt;pre&gt;January    15647
February  23226
March      37144
&lt;/pre&gt;
&lt;p&gt;We are very excited about these numbers — please spread the word and help us continue growth of MongoDB!&lt;/p&gt;
&lt;p&gt;-Eliot&lt;/p&gt;</description><link>http://blog.mongodb.org/post/550850783</link><guid>http://blog.mongodb.org/post/550850783</guid><pubDate>Mon, 26 Apr 2010 10:32:11 -0400</pubDate></item><item><title>On Distributed Consistency - Part 6 - Consistency Chart</title><description>&lt;p&gt;See also:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://blog.mongodb.org/post/475279604/on-distributed-consistency-part-1"&gt;Part 1 - Introduction and CAP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.mongodb.org/post/498145601/on-distributed-consistency-part-2-some-eventual"&gt;Part 2 - Eventual Consistency&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.mongodb.org/post/505822180/on-distributed-consistency-part-3-network"&gt;Part 3 - Network Partitions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.mongodb.org/post/516567520/on-distributed-consistency-part-4-multi-data-center"&gt;Part 4 - Multi Data Center&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.mongodb.org/post/520888030/on-distributed-consistency-part-5-many-writer"&gt;Part 5 - Multi Writer Eventual Consistency&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;The following diagram (click for large version) shows the various consistency models that have been discussed in this blog post series.  Stronger consistency modes generally meet the requirements of weaker modes, and are thus shown as subsets in this Venn-like diagram. &lt;/p&gt;
&lt;p&gt;Keep in mind that for many products, consistency is tunable: a product doesn’t necessarily belong to a particular rectangle, but a given operation certainly does.&lt;/p&gt;
&lt;p&gt;&lt;a title="click for larger image" href="http://i44.tinypic.com/2h3vb6p.png"&gt;&lt;img align="middle" src="http://i44.tinypic.com/33af3i9.png" width="320" height="240"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Eventual Consistency - eventual consistency as defined by Amazon in the Dynamo paper.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.mongodb.org/post/498145601/on-distributed-consistency-part-2-some-eventual"&gt;Monotonic read consistency&lt;/a&gt; - a stricter form of eventual consistency.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.mongodb.org/post/498145601/on-distributed-consistency-part-2-some-eventual"&gt;Read-your-own-writes&lt;/a&gt; consistency - a stricter form of eventual consistency.&lt;/li&gt;
&lt;li&gt;MRC + RYOW - a system with both monotonic read plus read-your-own-writes properties.  A master-master replication system, where a given client always interacts with a single master, would have these properties.&lt;/li&gt;
&lt;li&gt;Immediate Consistency - a system which is immediately consistent but which does not support atomic operations.  Strict quorum systems, where R+W&gt;N, meet this criteria (and theoretically could do more, depending on the design).&lt;/li&gt;
&lt;li&gt;Strong Consistency - a system which supports read/write atomic operations on single data entities.  This is the default mode for MongoDB.&lt;/li&gt;
&lt;li&gt;Full Transactions - &lt;a href="https://shop.oracle.com/pls/ostore/f?p=ostore:product:2299037659209236::NO:RP,3:P3_LPI,P3_PROD_HIER_ID:4509382199341805719938,4509958287721805720011"&gt;Oracle&lt;/a&gt;!&lt;/li&gt;
&lt;/ul&gt;</description><link>http://blog.mongodb.org/post/523516007</link><guid>http://blog.mongodb.org/post/523516007</guid><pubDate>Thu, 15 Apr 2010 11:32:12 -0400</pubDate><category>venn diagram</category><category>eventual consistency</category><category>strong consistency</category><category>nosql</category><category>cap theorem</category></item><item><title>On Distributed Consistency - Part 5 - Many Writer Eventual Consistency</title><description>&lt;p&gt;See also:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://blog.mongodb.org/post/475279604/on-distributed-consistency-part-1"&gt;Part 1 - Introduction and CAP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.mongodb.org/post/498145601/on-distributed-consistency-part-2-some-eventual"&gt;Part 2 - Eventual Consistency&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.mongodb.org/post/505822180/on-distributed-consistency-part-3-network"&gt;Part 3 - Network Partitions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.mongodb.org/post/516567520/on-distributed-consistency-part-4-multi-data-center"&gt;Part 4 - Multi Data Center&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.mongodb.org/post/523516007/on-distributed-consistency-part-6-consistency-chart"&gt;Part 6 - Consistency Chart&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;In &lt;a&gt;part 2&lt;/a&gt; we primarily discussed “single writer” eventual consistency.  Here we will discuss many-writer, and define that term more precisely.&lt;/p&gt;
&lt;p&gt;By many-writer, we mean a system where different data servers can receive writes concurrently (and asynchronously).  Examples of many-writer eventually consistent systems include&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Amazon Dynamo&lt;/li&gt;
&lt;li&gt;CouchDB master-master replication&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;With multi-writer eventual consistency, we need to address the phenomenon of conflicting writes. Writes to two servers at the same time may be updates for the same object.  We must resolve the conflict in a way that is acceptable for the use case in question.  Some ways to do this are:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;last write wins&lt;/li&gt;
&lt;li&gt;programmatic merge&lt;/li&gt;
&lt;li&gt;commutative operations&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Last Write Wins&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Last write wins is a popular default in many systems. If we receive an operation that is older, we simply ignore it.  In a distributed system the definition of “last” is hard as clocks can’t be perfectly synchronized.  Thus many systems use &lt;a&gt;vector clocks&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;u&gt;Inserts&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;Surprisingly, a traditional insert operation is tricky with many writers. Consider these operations performed at about the same time at different servers:&lt;/p&gt;
&lt;pre&gt;op1: insert( { _id : 'joe', age : 30 } )
op2: insert( { _id : 'joe', age : 33 } )&lt;/pre&gt;
&lt;p&gt;If we naively apply these two operations in any order, we get an inconsistent result.  insert typically means:&lt;/p&gt;
&lt;pre&gt;if( !already_exists(x._id) ) then set( x );&lt;/pre&gt;
&lt;p&gt;However, with eventual consistency we do not have real-time global state.  Checking already_exists() is thus hard.&lt;/p&gt;
&lt;p&gt;The best solution is to not support insert, but rather set() - i.e. “set a new value”.  Sometimes this is called an upsert.  Then, if we have last-write-wins semantics, everything is fine.&lt;/p&gt;
&lt;p&gt;&lt;u&gt;Deletes&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;Deletes require special handling in cases of object &lt;em&gt;rebirth&lt;/em&gt;.  Consider this sequence:&lt;/p&gt;
&lt;pre&gt;op1: set( { _id : 'joe', age : 40 } }
op2: delete( { _id : 'joe' } )
op3: set( { _id : 'joe', age : 33 } )&lt;/pre&gt;
&lt;p&gt;If op2 and op3 are reversed in execution order, we would have a problem.  Thus we need to remember the delete for a while, and apply last-operation-wins semantics.  Some products call the remembrance of the delete a &lt;em&gt;tombstone&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;u&gt;Updates&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;Updates have a similar issue as insert, so for updates, we use the set() operation we described above instead.&lt;/p&gt;
&lt;p&gt;Note that &lt;a&gt;partial object updates&lt;/a&gt; can be tricky to replicate efficiently.  Consider a set() operation where we wish to update a single field:&lt;/p&gt;
&lt;p&gt;  update users set age=40 where _id=’joe’&lt;/p&gt;
&lt;p&gt;This is no problem with eventual consistency if we replicate a full copy of the object.  However, what if the user object was 1MB in size?  It would be really nice to just send the new age field and the _id, rather than the whole object.  However, this is difficult.  Consider:&lt;/p&gt;
&lt;pre&gt;op1: update users set age=40 where _id='joe'
op2: update users set state='ca' where _id='joe'&lt;/pre&gt;
&lt;p&gt;Wen can’t simply replicate the partial update and use last-write-wins; the database will need more sophistication to handle this efficiently.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Programmatic Merge&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Last-write-wins is great, but is not always sufficient.  Having the client application resolve the conflict via a merge is a fine alternative.  Let’s consider an example mentioned in the Amazon Dynamo paper: manipulations of shopping carts.  With eventual consistency it would not be safe to do something like:&lt;/p&gt;
&lt;pre&gt;update cart set this[our_sku].qty=1 where _id='joe'&lt;/pre&gt;
&lt;p&gt;If there are multiple manipulations of the cart, some may get lost using last-write-wins.  Instead, the Dynamo paper talks of storing the operations in the cart object, rather than the actual data state.  We could store something like:&lt;/p&gt;
&lt;pre&gt;update cart append { time : now(), op : 'addToCart', sku : our_sku, qty : 1 }
  where _id='joe'&lt;/pre&gt;
&lt;p&gt;When a conflict occurs, cart objects can be merged.  We do not lose any operations.  When it is time to check out, we replay all the operations, which might include quantity adjustments and removes from cart.  After replay we have the final cart state.&lt;/p&gt;
&lt;p&gt;Note the above example uses a timestamp field — in a real system a vector clock might be used to order the operations in the cart.&lt;/p&gt;
&lt;p&gt;It’s interesting to note that not only have we avoided conflicts, we are also able to do operations where atomicity would be required.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Commutative Operations&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If all operations are commutative (more precisely, &lt;a href="http://en.wikipedia.org/wiki/Fold_(higher-order_function)"&gt;foldable&lt;/a&gt;), we will never have any conflicts.  Operations can simply be applied in any order, and the result is the same.  For example:&lt;/p&gt;
&lt;pre&gt;// x starts as { }
x.increment('a', 1);
x.increment('a', 3);
x.addToSet('b', 'foo');
x.addToSet('b', 'bar');
result: { a : 4, b : {bar,foo} }

// x starts as { }
x.addToSet('b', 'bar');
x.increment('a', 3);
x.increment('a', 1);
x.addToSet('b', 'foo');
result: { a : 4, b : {bar,foo} }&lt;/pre&gt;
&lt;p&gt;Note however that composition of addToSet and increment would not be foldable; thus, we have to use only one or the other for a particular field of the object.&lt;/p&gt;</description><link>http://blog.mongodb.org/post/520888030</link><guid>http://blog.mongodb.org/post/520888030</guid><pubDate>Wed, 14 Apr 2010 10:18:00 -0400</pubDate><category>eventual consistency</category><category>merging</category><category>conflict resolution</category></item><item><title>On Distributed Consistency - Part 4 - Multi Data Center</title><description>&lt;p&gt;&lt;span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;See also:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://blog.mongodb.org/post/475279604/on-distributed-consistency-part-1"&gt;Part 1 - Introduction and CAP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.mongodb.org/post/498145601/on-distributed-consistency-part-2-some-eventual"&gt;Part 2 - Eventual Consistency&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.mongodb.org/post/505822180/on-distributed-consistency-part-3-network"&gt;Part 3 - Network Partitions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.mongodb.org/post/520888030/on-distributed-consistency-part-5-many-writer"&gt;Part 5 - Multi Writer Eventual Consistency&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.mongodb.org/post/523516007/on-distributed-consistency-part-6-consistency-chart"&gt;Part 6 - Consistency Chart&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Eventual consistency makes multi-data center data storage easier.  There are reasons eventual consistency is helpful for multi-data center that are unrelated to availability and CAP.  And as mentioned in &lt;a href="http://blog.mongodb.org/post/505822180/on-distributed-consistency-part-3-network"&gt;Part 3&lt;/a&gt;, some common types of network partitions, such as loss of an entire data center, are actually &lt;a href="http://i40.tinypic.com/30rxiyu.jpg"&gt;trivial network partitions&lt;/a&gt; and may not even effect availability anyway.&lt;/p&gt;
&lt;p&gt;Here are a few architectures for multi-data center data storage:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;DR&lt;/li&gt;
&lt;li&gt;Single Region&lt;/li&gt;
&lt;li&gt;Local reads, remote writes&lt;/li&gt;
&lt;li&gt;Intelligent Homing&lt;/li&gt;
&lt;li&gt;Eventual consistency&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;DR&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;By DR we mean a traditional disaster recovery / business continuity architecture.  It’s pretty simple: we serve everything from one data center, with replication to a secondary facility that is offline.  In a failure we cut over.&lt;/p&gt;
&lt;p&gt;Availability can be quite high in this model as on any issue with the first data center, including internal network partitions, we cut over, and with the whole first data center disabled, the partition is trivial.&lt;/p&gt;
&lt;p&gt;This model works fine with strong consistency.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Multi Data Center, Single Region&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This option is analogous to using multiple data centers within a single region.  Amazon and DoubleClick have used this scheme in the past.  We have multiple data centers, physically separated, but all within one region (such as the Northwest).  The latency between data centers is then reasonable: if we stay within a 150 mile radius, we can have round trip times of around 5ms.  We might have a fiber ring among say, 3 or 4 data centers.  As the latency is reasonable, for many problems, a WAN operation here is fine.  With a ring topology, a non-trivial network partition is unlikely.&lt;/p&gt;
&lt;p&gt;Single region is useful both for strong consistent and eventually consistent architectures.  With a Dynamo style product, when N=W or N=R, this is a good option, as otherwise when using multiple data centers we will have a long wait time to confirm remote writes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Local Reads, Remote Writes&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For read-heavy use cases, this is a good option.  Here we read eventually consistent data (easy with most database products including RDBMS systems) but do all writes back to the master facility over the WAN.  A dynamo style system in multiple data centers with a very high W value and low R value can be thought of this way also.&lt;/p&gt;
&lt;p&gt;This pattern would work great for traditional content management: publishing is infrequent and reading is very frequent.&lt;/p&gt;
&lt;p&gt;Using a Content Delivery Network (CDN), with a centralized origin web site serving dynamic content, is another example.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Intelligent Homing&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We discussed “Intelligent Homing” a bit in &lt;a href="http://blog.mongodb.org/post/505822180/on-distributed-consistency-part-3-network"&gt;Part 3&lt;/a&gt;.  The idea is to store the master copy of a given data entity near its user.&lt;/p&gt;
&lt;p&gt;This model works quite well if data correlates with the user, such as the user’s profile, inbox, etc.&lt;/p&gt;
&lt;p&gt;We have fast locally confirmed writes.  If a data center goes completely down, we could still fail over master status to somewhere else which has a replica.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Eventual consistency&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Many-writer eventual consistency gives us two benefits with multiple data centers:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;higher availability in the face of network outages;&lt;/li&gt;
&lt;li&gt;fast locally confirmed writes&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;In the diagram below, a client of a dynamo-style system writes the data to four servers (N=4).  However, it only awaits confirmation of the writes from two servers in its local data center, to keep write confirmation latency low.&lt;/p&gt;
&lt;p&gt;&lt;img width="320" height="240" src="http://i43.tinypic.com/2dbtgg5.png"/&gt;&lt;/p&gt;
&lt;p&gt;Note however that if R+W &gt; N, we can’t have both fast local reads and writes at the same time if all the data centers are equal peers.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Combinations&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Combinations often make sense.  For example, it’s common to mix DR and Read Local Write Remote.&lt;/p&gt;</description><link>http://blog.mongodb.org/post/516567520</link><guid>http://blog.mongodb.org/post/516567520</guid><pubDate>Mon, 12 Apr 2010 18:01:00 -0400</pubDate><category>datacenter</category><category>nosql</category></item><item><title>On Distributed Consistency - Part 3 - Network Partitions</title><description>&lt;p&gt;See also:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://blog.mongodb.org/post/475279604/on-distributed-consistency-part-1"&gt;Part 1 - Introduction and CAP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.mongodb.org/post/498145601/on-distributed-consistency-part-2-some-eventual"&gt;Part 2 - Eventual Consistency&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.mongodb.org/post/516567520/on-distributed-consistency-part-4-multi-data-center"&gt;Part 4 - Multi Data Center&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.mongodb.org/post/520888030/on-distributed-consistency-part-5-many-writer"&gt;Part 5 - Multi Writer Eventual Consistency&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.mongodb.org/post/523516007/on-distributed-consistency-part-6-consistency-chart"&gt;Part 6 - Consistency Chart&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;It’s fascinating that the formal theorem statement for CAP, in the first &lt;a href="http://lpd.epfl.ch/sgilbert/pubs/BrewersConjecture-SigAct.pdf"&gt;proof&lt;/a&gt; (that I know of), doesn’t use the word partition!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Theorem 1&lt;/strong&gt; &lt;em&gt;It is impossible in the asynchronous network model to implement a read/write data object that guarantees the following properties:&lt;/em&gt;&lt;br/&gt;&lt;em&gt;• Availability&lt;/em&gt;&lt;br/&gt;&lt;em&gt;• Atomic consistency in all fair executions (including those in which messages are lost).&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;That said, let’s talk about partitions, as “messages lost…in the asynchronous network model” is directly analogous.&lt;/p&gt;
&lt;p&gt;Let’s look at an example:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://i39.tinypic.com/wundjn.jpg"&gt;&lt;img src="http://i39.tinypic.com/30aykvr.png"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In our diagram above, the network is partitioned.  The left and right halves (perhaps these correspond say to two continents) cannot communicate at all.  Four clients and four data server nodes are shown in the diagram.  So what are our options?&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Deny all writes.  If we deny all writes when the network is partitioned, we can still read fully consistent data on both sides.  So this is one option.  We give up write availability, and keep consistency.&lt;/li&gt;
&lt;li&gt;Allow writes on one side.  Via some sort of consensus mechanism, we could let one side of the partition “win” and have a master (as shown by the “M” in the diagram).  In this case, reads and writes could occur on that side.  On the other non-master partitions, we could either (a) be strict and allow no operations, or (b) allow eventually consistent reads, but no writes.  So in this situation we have full consistency in one partition, and partial operation in all others.&lt;/li&gt;
&lt;li&gt;Allow reads and writes in all partitions.  Here, we keep availability, but we must sacrifice strong consistency.  One partition will not see the operations and state from the other until the network is restored.  Once restored, we will need to a method to merge operations that occurred while disconnected.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;A mitigation technique also comes to mind.  Suppose a particular client C has a much higher probability of needing an entity X than other clients.  If we store the master copy of X on a server close to C, we increase the probability that C can read and write X in option (2) above.  Let’s call this “intelligent homing”.  A real world example of this would be to “store master copies of data for east coast users on servers on the east coast”.  Intelligent homing doesn’t solve our problems, but would likely significantly decrease their frequency — that’s good, we just want more nines anyway.&lt;/p&gt;
&lt;p&gt;Hopefully the above is a good informal “proof” of CAP.  It really is pretty simple.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Trivial Network Partitions&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Many common network partitions are what we might term &lt;em&gt;trivial&lt;/em&gt;.  Let’s consider from the perspective of option (2) above. We define a &lt;em&gt;trivial network partition&lt;/em&gt; is one such that on all non-master partitions, there are either&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;no live clients at all, or &lt;/li&gt;
&lt;li&gt;no servers at all&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;For example, if we have many data centers and our clients are Internet web browsers, and one of our data centers goes completely dark (and we have more left), that is a trivial network partition (we assume here that we can fail over master status in such a situation).  Likewise, losing a single rack in its entirety is often a trivial network partition.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://i40.tinypic.com/30rxiyu.jpg"&gt;&lt;img src="http://i43.tinypic.com/9rlwdz.png"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In these situations, we can still be consistent and available.  (Well, for the partitioned client, we are unavailable, but that is of course a certainty if it cannot reach any servers anywhere.)&lt;/p&gt;</description><link>http://blog.mongodb.org/post/505822180</link><guid>http://blog.mongodb.org/post/505822180</guid><pubDate>Thu, 08 Apr 2010 10:46:00 -0400</pubDate></item><item><title>On Distributed Consistency - Part 2 - Some Eventual Consistency Forms</title><description>&lt;p&gt;See Also&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://blog.mongodb.org/post/475279604/on-distributed-consistency-part-1"&gt;Part 1 - Introduction and CAP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.mongodb.org/post/505822180/on-distributed-consistency-part-3-network"&gt;Part 3 - Network Partitions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.mongodb.org/post/516567520/on-distributed-consistency-part-4-multi-data-center"&gt;Part 4 - Multi Data Center&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.mongodb.org/post/520888030/on-distributed-consistency-part-5-many-writer"&gt;Part 5 - Multi Writer Eventual Consistency&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.mongodb.org/post/523516007/on-distributed-consistency-part-6-consistency-chart"&gt;Part 6 - Consistency Chart&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;In &lt;a href="http://blog.mongodb.org/post/475279604/on-distributed-consistency-part-1"&gt;Part 1&lt;/a&gt; we discussed C-class and A-class behaviors.  For A-class, we need to weaken consistency constraints.  This does not mean the system need be completely inconsistent, but it does mean we will need to relax the consistency model to some extent.&lt;/p&gt;
&lt;p&gt;Amazon popularized the concept of “Eventual Consistency”.  &lt;a href="http://queue.acm.org/detail.cfm?id=1466448"&gt;Their definition&lt;/a&gt; is: &lt;/p&gt;
&lt;p&gt;&lt;em&gt;the storage system guarantees that if no new updates are made to the object, eventually all accesses will return the last updated value.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This is not new, but it is great to have the concept formalized/popularized.  A few examples of eventually consistent systems:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;DNS (mentioned in the above paper)&lt;/li&gt;
&lt;li&gt;Asynchronous master/slave replication on an RDBMS (also on MongoDB)&lt;/li&gt;
&lt;li&gt;memcached in front of mysql, caching reads&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Many (not all) traditional examples that come to mind have eventually consistent reads, but a single writer (by “single writer”, we mean a data server, not the clients).  Things get more interesting — and complex — with when there are many writers.  Amazon Dynamo is an example of a “many writer eventually consistent” system.  All of the above are perhaps “single writer eventually consistent”.&lt;/p&gt;
&lt;p&gt;One other traditional technology worth noting is message queues.  It has properties reminiscent of eventual consistency.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Forms of Consistency&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Let’s look at a particular example.  Consider a system using MongoDB in the following configuration:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://i41.tinypic.com/35lw00x.jpg" height="227" width="319" align="middle"/&gt;&lt;/p&gt;
&lt;p&gt;“master”, “slave”, and “slave” could be mongod instances for example — or other databases with asynchronous replication.  Clients randomly read from any slave for a given query, and always write to the master.  Two slaves and two clients are shown, but let’s assume each of those scale out.&lt;/p&gt;
&lt;p&gt;This sort of system we term “single writer eventual consistency”.  So what are its properties?  (1) A client could read stale data. (2) The client could see out-of-order write operations.&lt;/p&gt;
&lt;p&gt;Let’s suppose we are storing some entity &lt;em&gt;x&lt;/em&gt; in the datastore.  Let’s assume entities have an initial value of zero.  There are a series of writes to x by clients:&lt;/p&gt;
&lt;p&gt;  W(x=3), W(x=7), W(x=5)&lt;/p&gt;
&lt;p&gt;Because the system is eventually consistent, if writes to x stop at some point, we know we will eventually read 5 — that is, R(x==5).  However in the short term a client might  for example see:&lt;/p&gt;
&lt;p&gt;  R(x==7), R(x==0), R(x==5), R(x==3)&lt;/p&gt;
&lt;p&gt;(Note more nodes than 2 slaves are needed for this example behavior.)&lt;/p&gt;
&lt;p&gt;So this is our weakest form of consistency - eventually consistent with out of order reads in the short term. &lt;/p&gt;
&lt;p&gt;We can make this stronger.  Consider the &lt;a href="http://compoundthinking.com/blog/index.php/2009/07/16/turbogears-on-sourceforge/"&gt;SourceForge&lt;/a&gt; mongodb configuration (&lt;a href="http://compoundthinking.com/blog/wp-content/uploads/2009/07/sfconsume.png"&gt;larger diagram here&lt;/a&gt;).  This configuration is eventually consistent, but we will not see the result of writes out of order.  It provides &lt;em&gt;monotonic read consistency&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a title="larger version of image" href="http://compoundthinking.com/blog/wp-content/uploads/2009/07/sfconsume.png"&gt;&lt;img src="http://compoundthinking.com/blog/wp-content/uploads/2009/07/sfconsume.png" height="240" width="240" align="middle"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;One possible eventual consistency property is &lt;em&gt;read-your-own-writes&lt;/em&gt; consistency, meaning a process is guaranteed to see the writes it has made when it does reads.  This is a very useful property that makes programming easier. Note that neither of the above examples provide read-your-own-writes consistency.  Also worth considering with this model is the definition of “your”.  On a web application, that might be the user.  If the system’s load balancer sends requests to different app servers, having read-your-own-write consistency for a single app server might not solve the real world consistency need.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;EC Use Case Checklist&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Thus when using eventual consistency, it is good for the architect to ask:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;can my use case tolerate stale reads?&lt;/li&gt;
&lt;li&gt;can it tolerate reading values out of order?  if not, is my configuration monotonic read consistent?&lt;/li&gt;
&lt;li&gt;can it tolerate not reading my own writes?  if not, is my configuration read-your-own-write consistent?&lt;/li&gt;
&lt;/ul&gt;</description><link>http://blog.mongodb.org/post/498145601</link><guid>http://blog.mongodb.org/post/498145601</guid><pubDate>Mon, 05 Apr 2010 09:42:00 -0400</pubDate></item><item><title>On Distributed Consistency -- Part 1</title><description>&lt;p&gt;See also:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://blog.mongodb.org/post/498145601/on-distributed-consistency-part-2-some-eventual"&gt;Part  2 - Eventual Consistency&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.mongodb.org/post/505822180/on-distributed-consistency-part-3-network"&gt;Part 3 - Network Partitions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.mongodb.org/post/516567520/on-distributed-consistency-part-4-multi-data-center"&gt;Part 4 - Multi Data Center&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.mongodb.org/post/520888030/on-distributed-consistency-part-5-many-writer"&gt;Part 5 - Multi Writer Eventual Consistency&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.mongodb.org/post/523516007/on-distributed-consistency-part-6-consistency-chart"&gt;Part 6 - Consistency Chart&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;For distributed databases, consistency models are a topic of huge importance.  We’d like to delve a bit deeper on this topic with a series of articles, discussing subjects such as what model is right for a particular use case.  Please jump in and help us in the comments.&lt;/p&gt;
&lt;p&gt;We’ll start here with a basic introduction to the subject.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CAP&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The &lt;a href="http://portal.acm.org/citation.cfm?id=564585.564601"&gt;CAP theorem&lt;/a&gt; states that one can only have two of &lt;span&gt;c&lt;/span&gt;onsistency, &lt;span&gt;a&lt;/span&gt;vailability, and tolerance to network &lt;span&gt;p&lt;/span&gt;artitions at the same time. In distributed systems, network partitioning is inevitable and must be tolerated, so essential CAP means that we cannot have both consistency and 100% availability. &lt;/p&gt;
&lt;p&gt;Informally, I would summarize the CAP theorem as:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;If the network is broken, your database won’t work.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;However, we do get to pick the definition of “won’t work”.  It can either mean down (unavailable) or inconsistent (stale data).&lt;/p&gt;
&lt;p&gt;More precisely what do we mean by “consistency”?  The academic work in this area is referring to “one copy serializability” or &lt;a href="http://portal.acm.org/citation.cfm?id=78969.78972"&gt;“linearizability”&lt;/a&gt;. If a series of operations or transactions are performed, they are applied in a consistent order. One less formal way of thinking about the trade-off is “Could I be reading and manipulating stale/dirty data? Can I always write?”&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Embodiments&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We have two classes of architectures: a C class (strongly consistent) and an A class (higher availability looser consistency).  Let’s consider some real-world distributed systems and where they are classified.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.127.6956"&gt;Amazon Dynamo&lt;/a&gt; is a distributed data store which implements &lt;a href="http://weblogs.java.net/blog/2007/11/27/consistent-hashing"&gt;consistent hashing&lt;/a&gt; and is in the A camp.  It provides eventual consistency.  One may read old data.&lt;/p&gt;
&lt;p&gt;CouchDB is typically used with asynchronous master-master replication and is in the A camp.  It provides eventual consistency.&lt;/p&gt;
&lt;p&gt;A MongoDB auto-sharding+replication cluster has a master server at a given point in time for each shard.  This is in the C camp.  Traditional RDBMS systems are also strongly consistent (as typically used) - a synchronous RDBMS cluster for example.&lt;/p&gt;
&lt;p&gt;It’s worth noting that alternate configurations of these products sometimes alter their consistency (and performance) properties.  For our discussion here, we’ll assume these products are configured in their common case setup, unless otherwise specified.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Write Availability, not Read Availability, is the Main Question&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;With most databases today, it’s easy to have any number of asynchronous slave replicas distributed about the world.  If networks partition, we would then still have access to local slave data.  As the replication is asynchronous, this data is eventually consistent, so this result is not surprising — we are now in the A class of systems.  However, almost all designs, even from the C class, can add on asynchronous read capabilities easy.  Thus, the critical design decisions are around write availability.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Trade-offs&lt;br/&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;even load distribution is easier in eventually consistent systems&lt;/li&gt;
&lt;li&gt;multi-data center support is easier in eventually consistent systems&lt;/li&gt;
&lt;li&gt;some problems are not solvable with eventually consistent systems&lt;/li&gt;
&lt;li&gt;code is sometimes simpler to write in strongly consistent systems&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;We will discuss these pros in cons in more details in subsequent articles.&lt;/p&gt;
&lt;p&gt;—dwight&lt;/p&gt;</description><link>http://blog.mongodb.org/post/475279604</link><guid>http://blog.mongodb.org/post/475279604</guid><pubDate>Fri, 26 Mar 2010 15:32:00 -0400</pubDate></item><item><title>MongoDB 1.4 Ready for Production</title><description>&lt;p&gt;The MongoDB team is very excited to announce the release of MongoDB 1.4.0.  This is the culmination of 3 months of work in the 1.3 branch and has a large number of very important changes.&lt;/p&gt;
&lt;p&gt;Many users have been running 1.3 in production, so this release is already very thoroghly vetted both by our regressions systems and by real users.&lt;/p&gt;
&lt;p&gt;Some highlights:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Core server enhancements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;concurrency improvements&lt;/li&gt;
&lt;li&gt;indexing memory improvements&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.mongodb.org/display/DOCS/Indexes#Indexes-BackgroundIndexBuilding"&gt;background index creation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;better detection of regular expressions so the index can be used in more cases&lt;/li&gt;
&lt;li&gt;&lt;a title="performance numbers" href="http://blog.mongodb.org/post/472834501/mongodb-1-4-performance"&gt;performance numbers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Replication &amp; Sharding&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;better handling for restarting slaves offline for a while&lt;/li&gt;
&lt;li&gt;fast new slaves from snapshots&lt;/li&gt;
&lt;li&gt;configurable slave delay&lt;/li&gt;
&lt;li&gt;replication handles clock skew on master&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.mongodb.org/display/DOCS/Updating#Updating-%2524inc"&gt;$inc&lt;/a&gt; replication fixes&lt;/li&gt;
&lt;li&gt;sharding alpha 3 - notably 2 phase commit on config servers&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Deployment &amp; production&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;configure “slow” for profiling&lt;/li&gt;
&lt;li&gt;ability to do &lt;a href="http://www.mongodb.org/display/DOCS/fsync+Command#fsyncCommand-Lock%252CSnapshotandUnlock"&gt;fsync + lock&lt;/a&gt; for backing up raw files&lt;/li&gt;
&lt;li&gt;option for separate directory per db&lt;/li&gt;
&lt;li&gt;http://localhost:28017/_status to get serverStatus via http&lt;/li&gt;
&lt;li&gt;REST interface is off by default for security (—rest to enable)&lt;/li&gt;
&lt;li&gt;can rotate logs with a db command, logRotate&lt;/li&gt;
&lt;li&gt;enhancements to serverStatus - counters/replication lag&lt;/li&gt;
&lt;li&gt;new mongostat tool and db.serverStatus() enhancements&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Query language improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-ConditionalOperator%253A%2524all"&gt;$all&lt;/a&gt; with regex&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-Metaoperator%253A%2524not"&gt;$not&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;partial matching of array elements &lt;a href="http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-ConditionalOperator%253A%2524elemMatch"&gt;$elemMatch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.mongodb.org/display/DOCS/Updating#Updating-The%2524positionaloperator"&gt;$&lt;/a&gt; operator for updating arrays&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.mongodb.org/display/DOCS/Updating#Updating-%2524addToSet"&gt;$addToSet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.mongodb.org/display/DOCS/Updating#Updating-%2524unset"&gt;$unset&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.mongodb.org/display/DOCS/Updating#Updating-%2524pull"&gt;$pull&lt;/a&gt; supports object matching&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.mongodb.org/display/DOCS/Updating#Updating-%2524set"&gt;$set &lt;/a&gt;with array indices&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Geo&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.mongodb.org/display/DOCS/Geospatial+Indexing"&gt;2d geospatial search&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;geo $center and $box searches&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Downloads: &lt;a title="www.mongodb.org/display/DOCS/Downloads" href="http://www.mongodb.org/display/DOCS/Downloads"&gt;&lt;a href="http://www.mongodb.org/display/DOCS/Downloads"&gt;www.mongodb.org/display/DOCS/Downloads&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Full Change Log: &lt;a href="http://jira.mongodb.org/secure/IssueNavigator.jspa?requestId=10080"&gt;jira&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Release Notes: &lt;a href="http://www.mongodb.org/display/DOCS/1.4+Release+Notes"&gt;&lt;a href="http://www.mongodb.org/display/DOCS/1.4+Release+Notes"&gt;http://www.mongodb.org/display/DOCS/1.4+Release+Notes&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Thanks for all your continued support, and we hope MongoDB 1.4 works great for you.&lt;/p&gt;
&lt;p&gt;As always, please let us know of any issues,&lt;/p&gt;
&lt;p&gt;-Eliot and the MongoDB Team&lt;/p&gt;</description><link>http://blog.mongodb.org/post/472835820</link><guid>http://blog.mongodb.org/post/472835820</guid><pubDate>Thu, 25 Mar 2010 13:22:00 -0400</pubDate></item><item><title>MongoDB 1.4 Performance</title><description>&lt;p&gt;We generally avoid posting benchmarks and suggest people create their own targeting their use cases. However, we have decided to publish a few of our internal micro-benchmarks comparing 1.2 with 1.4RC2 (aka 1.3.5) to show that in almost all cases performance is the same or better (sometime significantly so), even though we’ve added many new features.&lt;/p&gt;
&lt;p&gt;The test works by spawning N threads and having them hammer the DB with one operation as fast as they can. It is probably best to ignore the raw numbers and only look at the relative performance. In particular, these numbers shouldn’t be compared against other databases. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://media.mongodb.org/MongoDBBenchmarks.jpg"&gt;Results&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://github.com/mongodb/mongo-perf/blob/master/benchmark.cpp"&gt;Code for benchmarks&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A few highlights (and one lowlight):&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Single threaded query performance increased slightly&lt;/li&gt;
&lt;li&gt;Query performance increases linearly or super-linearly as more cores are used&lt;/li&gt;
&lt;li&gt;Insert performance increases by 10-30% vs 1.2&lt;/li&gt;
&lt;li&gt;It is usually faster to create an index after importing your data than before. More so in 1.4.&lt;/li&gt;
&lt;li&gt;Not shown, but performance for both 1.2 and 1.4 held steady from 10 threads up to at least 500 threads. Even where it looks like the lines will cross, they do not.&lt;/li&gt;
&lt;li&gt;Update and Upsert performance is the same or higher until using more than 4 hammering threads. In practice, this shouldn’t effect users unless they are already doing more updates per second than the server can handle. Even so, we will look into solutions to this in the 1.5.x series.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;This test was run on an Intel Core i7 Quad 860 2.8GHz with 8GB of RAM and an Intel G2 SSD. Even though they improved performance, HyperThreading and TurboBoost were disabled as they can skew results in nondeterministic ways.&lt;/p&gt;</description><link>http://blog.mongodb.org/post/472834501</link><guid>http://blog.mongodb.org/post/472834501</guid><pubDate>Thu, 25 Mar 2010 13:21:42 -0400</pubDate></item><item><title>MongoDB Day Austin coming up on Saturday, March 27 </title><description>&lt;p&gt;If you’re in the Austin area on March 27, you won’t want to miss MongoDB Day at Cospace in Austin. MongoDB Day Austin will be hosted by &lt;u&gt;&lt;a target="_blank" href="http://geekaustin.org/"&gt;GeekAustin&lt;/a&gt;&lt;/u&gt;, a Slashdot style news site, and sponsored by &lt;u&gt;&lt;a target="_blank" href="http://www.10gen.com/"&gt;10gen&lt;/a&gt;&lt;/u&gt;. &lt;/p&gt;
&lt;p&gt;This conference will have something for anyone interested in using MongoDB, from introductory sessions to more advanced discussions on sharding and MapReduce. Presenters at the conference will include Four Kitchens co-founder David Strauss and 10gen’s Mathias Stearn. &lt;/p&gt;
&lt;p&gt;Tickets are running out fast! Visit &lt;a target="_blank" href="http://mongodbday.eventbrite.com/"&gt;&lt;a href="http://mongodbday.eventbrite.com"&gt;http://mongodbday.eventbrite.com&lt;/a&gt;&lt;/a&gt;/&lt;strong&gt; &lt;/strong&gt;to learn more and register. &lt;/p&gt;</description><link>http://blog.mongodb.org/post/468501961</link><guid>http://blog.mongodb.org/post/468501961</guid><pubDate>Tue, 23 Mar 2010 16:00:00 -0400</pubDate></item><item><title>Are you going to Structure?</title><description>&lt;p&gt;GigaOm’s Structure is one of the most interesting conferences in the Bay Area this year. In 2010, we’re excited that Eliot Horowitz from 10gen / MongoDB will be speaking. GigaOm, who were media sponsors at the recently completed &lt;a&gt;NoSQL Live&lt;/a&gt; event in Boston, has provided a special discount code for friends of MongoDB to register for the conference at a $100 savings. Hope to see you there!&lt;/p&gt;
&lt;p&gt;Details, including the discount code from our partner GigaOm:&lt;/p&gt;
&lt;p&gt;GigaOM’s Structure conference is back for 2010! Get your ticket now!&lt;/p&gt;
&lt;p&gt;Your $100 discount on this year’s conference is available now!&lt;/p&gt;
&lt;p&gt;&lt;a&gt;&lt;a href="http://structure2010.eventbrite.com/?discount=NOSQL100"&gt;http://structure2010.eventbrite.com/?discount=NOSQL100&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;GigaOM’s flagship conference, Structure, returns on June 23rd and 24th for two days of deep insight on the Cloud Computing industry. Taking place at the Mission Bay Conference Center in San Francisco, Structure 2010 promises to be our best Structure conference yet.&lt;/p&gt;
&lt;p&gt;**Save the dates**&lt;/p&gt;
&lt;p&gt;June 23rd and 24th&lt;/p&gt;
&lt;p&gt;Mission Bay Conference Center, San Francisco  http://events.gigaom.com/structure/10/&lt;/p&gt;
&lt;p&gt;The $1.4 trillion IT market is undergoing a massive shake-up due to Cloud Computing. From the chips that power the compute clouds to the broadband that transports the computation and the software that ties it all together, Cloud Computing is creating a fundamental shift in how we think about and buy computing services. And at each point in the chain, such disruption creates another opportunity. At Structure 2010 you will learn about those opportunities and how to profit from them.   Our speaker list is growing every day. Confirmed speakers include:&lt;/p&gt;
&lt;p&gt;Erich Clementi -  VP, Strategy &amp; General Manager, Enterprise Initiatives, IBM&lt;/p&gt;
&lt;p&gt;Marc Benioff - Chairman and CEO, salesforce.com&lt;/p&gt;
&lt;p&gt;Werner Vogels - CTO, Amazon.com&lt;/p&gt;
&lt;p&gt;Dr. Amr Awadallah - CTO and co-founder, Cloudera&lt;/p&gt;
&lt;p&gt;Eliot Horowitz – CTO and co-founder, 10gen / MongoDB&lt;/p&gt;
&lt;p&gt;Nick McKeown - Professor, Stanford University&lt;/p&gt;
&lt;p&gt;William Forrest - Principal, McKinsey&lt;/p&gt;
&lt;p&gt;For the most up-to-date list, see our web site:  http://events.gigaom.com/structure/10/&lt;/p&gt;
&lt;p&gt;When you attend Structure 2010 you will learn:&lt;/p&gt;
&lt;p&gt;Why Cloud Computing is important — The scenarios in which it reduces cost, improves collaboration, speeds the real-time enterprise and increases enterprise agility.&lt;/p&gt;
&lt;p&gt;Why new computing architectures are needed to support Cloud Computing and what they are — Hint: It’s not what’s currently in your data center.&lt;/p&gt;
&lt;p&gt;Why Big Data means Big Problems — How do you make sense of exascale data in a timely and cost-effective manner? What new opportunities exist to improve this?&lt;/p&gt;
&lt;p&gt;Why we might need to re-invent Internet technologies — The Internet is now asked to transport vast chunks of computation rather than small pieces of text, as it was designed to do.&lt;/p&gt;
&lt;p&gt;What impacts “Real Time” has on the cloud — What extra considerations does real-time business infrastructure require?&lt;/p&gt;
&lt;p&gt;…and much, much more. Check out the full schedule on our &lt;a&gt;web site&lt;/a&gt;.   So join us on June 23rd and June 24th in San Francisco to be part of the discussion at the Cloud Computing industry’s premier conference: Structure 2010.  Register now and save $100 off the early-bird ticket price!   &lt;a&gt;&lt;a href="http://structure2010.eventbrite.com/?discount=NOSQL100"&gt;http://structure2010.eventbrite.com/?discount=NOSQL100&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Structure 2010 also represents a great way to directly address one of the most influential tech audiences anywhere. Call Mike Sly at (415) 235-0358 to find out how your company can exhibit.&lt;/p&gt;</description><link>http://blog.mongodb.org/post/459199759</link><guid>http://blog.mongodb.org/post/459199759</guid><pubDate>Fri, 19 Mar 2010 14:00:00 -0400</pubDate></item></channel></rss>
