<?xml version="1.0"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">

  <channel>
    <title>Cloudant Blog</title>
    <link>http://blog.cloudant.com/</link>
    <atom:link href="http://blog.cloudant.com/rss.xml" rel="self" type="application/rss+xml" />
    <description></description>
    <language>en-us</language>
    <pubDate>Thu, 26 Jan 2012 11:03:49 PST</pubDate>
    <lastBuildDate>Thu, 26 Jan 2012 11:03:49 PST</lastBuildDate>

    
    <item>
      <title>Announcing BigCouch 0.4</title>
      <link>http://blog.cloudant.com/bigcouch-zero-point-four</link>
      <pubDate>Thu, 26 Jan 2012 00:00:00 PST</pubDate>
      <author>Alan Hoffman</author>
      <guid>http://blog.cloudant.com/bigcouch-zero-point-four</guid>
      <description>&lt;p&gt;It is a big day here at Cloudant HQ; we are announcing the release of BigCouch 0.4! This release, which brings BigCouch into API equivalence with Apache CouchDB 1.1.1, has been baking for a while, and we are excited that it is now ready for public consumption. Instructions for installing and using BigCouch 0.4 can be found &lt;a href='http://bigcouch.cloudant.com/use'&gt;on the BigCouch page&lt;/a&gt;. Users running Debian Squeeze, Ubuntu (LTS or newer) or RedHat / CentOS / Amazon Linux are welcome and encouraged to use our prebuilt distributions based on Erlang/OTP R14B01 and SpiderMonkey 1.8.5.&lt;/p&gt;

&lt;p&gt;There are a whole slew of new features and performance improvements in this release. You can read the entire list &lt;a href='http://bigcouch.cloudant.com/changelog'&gt;here&lt;/a&gt;, but I wanted to highlight a few of our favorite features. These should convince you to upgrade if you haven&amp;#8217;t already.&lt;/p&gt;

&lt;p&gt;For my money, the killer addition to BigCouch 0.4 is support for &amp;#8216;zones,&amp;#8217; which allows you control over where you place the individual copies of your data. Cloudant&amp;#8217;s hosted service makes extensive use of this feature to protect against isolated failures in individual data centers. As an example, our west coast cluster &amp;#8220;Meritage&amp;#8221; is actually spread over two different data centers in two distinct geographic regions. We use zone-support to ensure that at least one copy of all of our customers&amp;#8217; data exists in both locations. That way, if one location falls into the ocean or is subject to nuclear attack, our customers&amp;#8217; data is still safe and available. With this feature now in BigCouch, you can extend clusters across multiple locations.&lt;/p&gt;

&lt;p&gt;Another important improvement we added, taken from Apache CouchDB 1.1, is support for the replicator DB to help manage multiple replications. The BigCouch replicator DB works the same as the Apache CouchDB version. A nice writeup of usage can be found &lt;a href='http://docs.couchbase.org/couchdb-release-1.1/couchdb-release-1.1-replicatordb-basics.html'&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We&amp;#8217;d like to thank everyone in the CouchDB community that has contributed bug reports, patches, feature requests, etc. for BigCouch and to all the brave souls willing to try out the bleeding-edge releases. This release would not be nearly the upgrade it is without all of you. Special shout out goes to Benoit for his help with FreeBSD and native SSL support.&lt;/p&gt;

&lt;p&gt;Finally, for those following along with recent events in the land of CouchDB, we&amp;#8217;re dedicated to &lt;a href='http://blog.cloudant.com/the-future-of-couchdb/'&gt;donating and integrating BigCouch&lt;/a&gt; to Apache CouchDB. This sort of integration won&amp;#8217;t happen overnight, so we are still planning on making releases to BigCouch while we iron out the divergences in the two projects. We very much appreciate the support and enthusiasm we have recieved from the CouchDB community to date, and we look forward to working with that community to strengthen Apache CouchDB.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Cloudant SF Drinkup</title>
      <link>http://blog.cloudant.com/sf-drinkup</link>
      <pubDate>Tue, 17 Jan 2012 00:00:00 PST</pubDate>
      <author>Sam Bisbee</author>
      <guid>http://blog.cloudant.com/sf-drinkup</guid>
      <description>&lt;p&gt;
  Cloudant is happy to be sponsoring &lt;a href='http://www.nodesummit.com'&gt;Node
  Summit&lt;/a&gt; next week in San Francisco. To keep the party going an extra day
  we will be hosting a CouchDB drinkup Thursday night to touch base with our
  west coast crew. This is instead of Benoit and Randall's meetup which they
  kindly merged with us - community powers unite!
&lt;/p&gt;&lt;p&gt;
  Just look for the folks in good lookin' Cloudant swag.
&lt;/p&gt;&lt;p&gt;
  &lt;ul&gt;
    &lt;li&gt;Thursday Jan 26th&lt;/li&gt;
    &lt;li&gt;5:30 - 8:30&lt;/li&gt;
    &lt;li&gt;&lt;a href='http://www.21st-amendment.com'&gt;21st Amendment Brewery&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;563 2nd St, San Francisco&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;All Beers on Cloudant's Tab&lt;/strong&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/p&gt;&lt;iframe scrolling='no' marginheight='0' marginwidth='0' src='http://maps.google.com/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=21st+Amendment+Brewery+Cafe,+563+2nd+St,+San+Francisco,+California,+United+States&amp;amp;aq=&amp;amp;sll=37.782514,-122.392565&amp;amp;sspn=0.033646,0.084543&amp;amp;vpsrc=6&amp;amp;t=m&amp;amp;ie=UTF8&amp;amp;hq=21st+Amendment+Brewery+Cafe,+563+2nd+St,+San+Francisco,+California,+United+States&amp;amp;ll=37.784079,-122.392759&amp;amp;spn=0.023742,0.036478&amp;amp;z=14&amp;amp;output=embed' frameborder='0' height='350' width='425' /&gt;</description>
    </item>
    
    <item>
      <title>The Future of Apache CouchDB</title>
      <link>http://blog.cloudant.com/the-future-of-couchdb</link>
      <pubDate>Thu, 05 Jan 2012 00:00:00 PST</pubDate>
      <author>Adam Kocoloski</author>
      <guid>http://blog.cloudant.com/the-future-of-couchdb</guid>
      <description>&lt;p&gt;The future of CouchDB is Apache CouchDB.&lt;/p&gt;

&lt;p&gt;Cloudant over the past 3 years has built and refined BigCouch, a fault-tolerant, horizontally scalable clustering framework purpose-built for CouchDB. Today we announce our intent to contribute this work back to the community. Working with the ASF and the CouchDB community, we hope to integrate the core capabilities of BigCouch into Apache CouchDB. Hopefully this will put to rest the tired (and false) &amp;#8220;CouchDB doesn&amp;#8217;t scale&amp;#8221; meme. BigCouch forms the bedrock of a globally distributed, sophisticated technology stack that we&amp;#8217;ve had in production operation for over two years at scale.&lt;/p&gt;

&lt;p&gt;Those of you building applications with CouchDB know that its performance has been improving by leaps and bounds. We&amp;#8217;ve achieved this through low-level implementations of performance-critical routines and smart refactoring of the Erlang codebase, but without sacrificing the rock-solid durability and stable REST API people have come to expect from CouchDB. The growing community of active committers includes passionate, stellar developers. More and more people are using CouchDB for projects, big and small, every day.&lt;/p&gt;

&lt;p&gt;We, along with a host of other companies, strongly support the open source community in building CouchDB and we do not plan on stopping. We have been fortunate in our ability to attract outstanding engineers, investors, and customers. We intend to continue devoting resources to Apache CouchDB and offer our help in any way the community desires. The future of CouchDB is CouchDB.&lt;/p&gt;

&lt;p&gt;Damien Katz has been an excellent founder and steward of CouchDB. It&amp;#8217;s been an honor to work with him, and we wish him well in his new location and mission.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>A Big Finish for 2011</title>
      <link>http://blog.cloudant.com/capping-the-year</link>
      <pubDate>Thu, 15 Dec 2011 00:00:00 PST</pubDate>
      <author>Alan Hoffman</author>
      <guid>http://blog.cloudant.com/capping-the-year</guid>
      <description>&lt;p&gt;2011 has been quite an eventful year for Cloudant. In the spring we outgrew our tiny basement offices in Davis Square and moved Cloudant HQ into Boston proper. We added a number of fantastic engineers to the team and we said goodbye to some of our earliest hires.&lt;/p&gt;

&lt;p&gt;Going into the new year, we&amp;#8217;ve expanded our platform to 5 geographic zones in the US and 3 more around the globe. Most importantly we more than doubled the number of developers, applications, small businesses, and enterprises using our hosted service &amp;#8211; and found quite a few independent BigCouch users out there along the way. We continue to be surprised and delighted by the passion our users show for our products. It is that passion that drives us to continuously improve BigCouch and our hosted service.&lt;/p&gt;

&lt;p&gt;With all that has been going on here, the founders decided it was time to expand the team. So today we are happy to announce that Derek Schoettle has joined Cloudant as our new CEO. Yes, Derek has an MBA &amp;#8211; don&amp;#8217;t hold that against him. His passion is working within early-stage companies bringing great technology to market, most recently at Vertica, and numerous startups before that. Derek has been an advisor to Cloudant for most of 2011 and was a natural choice when the time came. We are very excited to have him on board helping Cloudant grow.&lt;/p&gt;

&lt;p&gt;With Derek on board, Adam, Mike and I will have more time to focus on the things we are passionate about . For me, that means working closely with our customers and users, focusing on building a great product that solves their data problems. Mike will continue to focus on customer success and outreach, and will hopefully have more time &amp;#8216;on the road,&amp;#8217; evangelizing BigCouch to a wider audience. Adam will continue to work deep in the guts of Apache CouchDB, BigCouch, and the Cloudant platform, making all of our crazy thought experiments into real features.&lt;/p&gt;

&lt;p&gt;2011 was a big year for Cloudant, but we have even bigger goals for 2012 (assuming the world doesn&amp;#8217;t end.) Stay tuned to this channel as we announce some of the big features and plans we have.&lt;/p&gt;

&lt;p&gt;Alan (for Adam and Mike)&lt;/p&gt;

&lt;p&gt;Co-Founder, Cloudant&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Slides and Presentation from 2600hz</title>
      <link>http://blog.cloudant.com/2600hz-webinar</link>
      <pubDate>Wed, 16 Nov 2011 00:00:00 PST</pubDate>
      <author>Alan Hoffman</author>
      <guid>http://blog.cloudant.com/2600hz-webinar</guid>
      <description>&lt;p&gt;On December 14th we hosted a webinar with our friends at 2600hz, the open-source VOIP platform. Darren Schreiber, CEO of 2600hz, gave a presentation on how his company uses the BigCouch data platform to better serve its customers. Darren gave some great examples of how moving to a scalable document store has helped his company move faster, save money, and avoid operational headaches.&lt;/p&gt;

&lt;p&gt;In case you missed it, we recorded the webinar and you can view it below. If you just want the slides, follow the link below the video.&lt;/p&gt;
&lt;!-- Start of Brightcove Player --&gt;&lt;div style='display:none'&gt;

&lt;/div&gt;&lt;!--
By use of this code snippet, I agree to the Brightcove Publisher T and C 
found at https://accounts.brightcove.com/en/terms-and-conditions/. 
--&gt;&lt;script language='JavaScript' src='http://admin.brightcove.com/js/BrightcoveExperiences.js' type='text/javascript'&gt;
var f = 2;
&lt;/script&gt;&lt;object class='BrightcoveExperience' id='myExperience1328025971001'&gt;
  &lt;param name='bgcolor' value='#FFFFFF' /&gt;
  &lt;param name='width' value='480' /&gt;
  &lt;param name='height' value='270' /&gt;
  &lt;param name='playerID' value='609880943001' /&gt;
  &lt;param name='playerKey' value='AQ~~,AAAAjfF-RQk~,Buxt16gUyznNRYyI93t3SK_uoKszJGl2' /&gt;
  &lt;param name='isVid' value='true' /&gt;
  &lt;param name='isUI' value='true' /&gt;
  &lt;param name='dynamicStreaming' value='true' /&gt;
  
  &lt;param name='@videoPlayer' value='1328025971001' /&gt;
&lt;/object&gt;&lt;!-- 
This script tag will cause the Brightcove Players defined above it to be created as soon
as the line is read by the browser. If you wish to have the player instantiated only after
the rest of the HTML is processed and the page load is complete, remove the line.
--&gt;&lt;script type='text/javascript'&gt;brightcove.createExperiences();&lt;/script&gt;&lt;!-- End of Brightcove Player --&gt;
&lt;p&gt;Download the slides &lt;a href='../images/webinar.pdf'&gt;here&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Monsanto Chooses Cloudant</title>
      <link>http://blog.cloudant.com/monsanto-chooses-cloudant</link>
      <pubDate>Wed, 12 Oct 2011 00:00:00 PDT</pubDate>
      <author>Tim Anglade</author>
      <guid>http://blog.cloudant.com/monsanto-chooses-cloudant</guid>
      <description>&lt;p&gt;Big day for Cloudant — and big news in the near future for all BigCouch users. We are happy to announce that biotech heavyweight and perennial Fortune 500 company &lt;strong&gt;Monsanto has chosen Cloudant to be the core of their new genome analysis platform&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;We’ve been working with them for a few weeks now and we couldn&amp;#8217;t be more thrilled with the partnership. We are no strangers to the analysis of the big bytes generated by the smallest of things. Our founders first devised our open-source platform &lt;a href='http://bigcou.ch'&gt;BigCouch&lt;/a&gt; while at MIT, working on &lt;a href='http://public.web.cern.ch/public/en/lhc/lhc-en.html'&gt;Large Hadron Collider&lt;/a&gt; experiments generating millions of data points per second from the collision of atomic particles. Turns out, Biotechnology &amp;amp; genome analysis is no different in this regard. As &lt;a href='http://gigaom.com/cloud/dnanexus-cloudant-biotech-deals/'&gt;GigaOM&lt;/a&gt; summarized it: “innovation is rampant, but data growth is outpacing the ability to analyze it, making faster, cheaper and more scalable data systems integral to leveling the playing field”.&lt;/p&gt;

&lt;p&gt;This is new ground for us — and for NOSQL as a whole. This Monsanto platform is not destined to toil away in one of their (many) R&amp;amp;D labs, only used by scientists with lab coats &amp;amp; beakers. We’re not powering the CMS of some administrative division or a minor part of their website. &lt;strong&gt;Cloudant’s BigCouch will be the core, for both storage &lt;em&gt;and&lt;/em&gt; analysis of a new, company-wide platform powering a fundamental aspect of a Fortune 500 business&lt;/strong&gt;: the analysis &amp;amp; identification of new traits &amp;amp; genomic combinations in agricultural crops. The data &amp;amp; reporting interfaces will be used across Monsanto and should be instrumental in the making of key business decisions.&lt;/p&gt;

&lt;p&gt;Now, this also means big news for our users. Monsanto has been very eager to let us open-source many of the core enhancements we make to BigCouch for them. So while this won’t quite make it into the impending BigCouch 0.4 release (which is days away now), or on our &lt;a href='https://cloudant.com/#!/solutions/cloud'&gt;cloudant.com clusters&lt;/a&gt; for another few months, you can definitely expect to see many Monsanto-driven improvements folded back into our offerings, such as support for more languages on view servers, new tools to model data workflows, as well as a flurry of improvements to our storage &amp;amp; retrieval algorithms.&lt;/p&gt;

&lt;p&gt;At Cloudant, we’re all excited to see NOSQL platforms, including BigCouch, being used to power the next generation of business technology. So when announcements like this also translate to a more stable, performant &amp;amp; productive experience, for everybody else that uses a Cloudant product, we find it to be a big day indeed.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;You can always &lt;a href='mailto:info@cloudant.com'&gt;contact us&lt;/a&gt; if you have any questions. There is also a &lt;a href='http://www.marketwire.com/press-release/monsanto-seeds-big-data-biotech-research-farm-with-cloudant-1572186.htm'&gt;press release&lt;/a&gt; available.&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Optimizing your CouchDB Calls by 99%</title>
      <link>http://blog.cloudant.com/optimizing-couchdb-calls-by-99-percent</link>
      <pubDate>Tue, 27 Sep 2011 00:00:00 PDT</pubDate>
      <author>Tim Anglade</author>
      <guid>http://blog.cloudant.com/optimizing-couchdb-calls-by-99-percent</guid>
      <description>&lt;p&gt;Earlier this month, I gave a presentation at &lt;a href='http://gogaruco.com'&gt;GoGaRuCo&lt;/a&gt; about using CouchDB, and how many people do it in inappropriate or wasteful ways.&lt;/p&gt;

&lt;p&gt;The centerpiece of my talk was a step-by-step example of best-practices for CouchDB interaction, leading to an improvement of 99% in the median time it takes to do a simple insert to CouchDB (or Cloudant). Admittedly, I start from a worst-case scenario, but the scary part is that it is not a totally unrealistic one; in fact, I’ve seen it replicated many times over.&lt;/p&gt;

&lt;p&gt;After factoring my advice in, we have a performance improvement of 96% (if you stick to conversing with CouchDB through JSON, which is recommended for now), or 99% with my experimental patches to support &lt;a href='http://msgpack.org'&gt;MessagePack&lt;/a&gt; in &lt;a href='http://github.com/timanglade/couchdb'&gt;CouchDB&lt;/a&gt; &amp;amp; &lt;a href='http://github.com/timanglade/couchrest'&gt;CouchRest&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;What’s more, &lt;strong&gt;none of the advice I give leads to a relaxation in consistency or durability. It&amp;#8217;s plain optimization, no strings attached, just there for the taking&lt;/strong&gt;. Many of the points I touch on are also valid no matter what language or library you are using (or are easily translatable to other ecosystems), so I would strongly encourage anybody using CouchDB and interested in performance optimization to look at the video.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href='http://confreaks.net/videos/642-gogaruco2011-couchdb-ruby-you-re-doing-it-wrong'&gt;Head on over over to Confreaks to see the video&lt;/a&gt;&lt;/strong&gt; (the meat of the talk starts at the 5:10 mark).&lt;/p&gt;
&lt;br /&gt;&lt;a href='http://confreaks.net/videos/642-gogaruco2011-couchdb-ruby-you-re-doing-it-wrong'&gt;
&lt;img src='http://confreaks.net/system/videos/images/642/preview/642-gogaruco2011-couchdb-ruby-you-re-doing-it-wrong-thumb_0000.png' /&gt;
&lt;/a&gt;</description>
    </item>
    
    <item>
      <title>Using Cloudant from Scala on CloudBees</title>
      <link>http://blog.cloudant.com/using-cloudant-from-scala-cloudbees</link>
      <pubDate>Fri, 15 Jul 2011 00:00:00 PDT</pubDate>
      <author>Michael Neale (CloudBees)</author>
      <guid>http://blog.cloudant.com/using-cloudant-from-scala-cloudbees</guid>
      <description>&lt;p&gt;&lt;em&gt;This blogpost originally appeared as “NoSQL: CouchDB with CloudBees and Cloudant” on the &lt;a href='http://blog.cloudbees.com/'&gt;CloudBees Blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In this tutorial I will build a CouchDB based url shortener service (http://cloudbe.es) using CloudBees and the services/add-on platform with Cloudant. CouchDB is a popular NoSQL database - specifically you could called it a &amp;#8220;document database&amp;#8221; - i.e. it is all about storing documents which consist of sets of fields in a JSON document against a key. There is no schema - a document can consist of any JSON structure - there is no requirement that the same fields be present in each document unlike rows in a RDBMS. Of course CouchDB has a lot of the other benefits of NoSQL databases - high scalability and ease of use. Cloudant provides an excellent hosted CouchDB service. This takes care of &lt;em&gt;all&lt;/em&gt; the management of CouchDB you would normally need to do - compaction, backups, and more.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Building a URL shortener&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A url shortener is just that - takes a long messy URL and generates a token/shorter URL you can pass around.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Get a &lt;a href='http://cloudbees.com/'&gt;cloudbees.com&lt;/a&gt; account, signup to a free RUN@cloud service&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Go to &lt;a href='http://grandcentral.cloudbees.com/subscriptions'&gt;the subscription page&lt;/a&gt; — and choose Cloudant&lt;/strong&gt;&lt;/p&gt;
&lt;img src='/images/cloudbees1.png' style='margin-left:auto; margin-right:auto; display:block' /&gt;
&lt;p&gt;&lt;strong&gt;Step 3: Create a new web app skeleton&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For this I will use the Play! Framework - a simple framework for building RESTful web apps. I can use the command&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='tcsh'&gt;play new urlshort --with scala
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;This will create an empty project using scala. To deploy to CloudBees- a handy way is to add cloudbees 0.2.1 to the dependencies file (don&amp;#8217;t worry - source repo will be available to look at).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Create an empty database&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;From &lt;a href='http://grandcentral.cloudbees.com/services'&gt;grandcentral.cloudbees.com/services&lt;/a&gt; you can navigate to your Cloudant/CouchDB console. Any time you need to get back to the CouchDB console you can navigate from grandcentral.&lt;/p&gt;
&lt;img src='/images/cloudbees2.png' style='margin-left:auto; margin-right:auto; display:block' /&gt;
&lt;p&gt;This shows the &amp;#8220;Futon&amp;#8221; web interface to browse your data, quite a handy tool. Here you can create a new database - I called mine &amp;#8220;urly&amp;#8221;. Once you have a database, at the top left corner you can see an icon which will take you to the Cloudant management screen - click through to the newly created database, and you will be able to set permissions, and generate an api key:&lt;/p&gt;
&lt;img src='/images/cloudbees3.png' style='margin-left:auto; margin-right:auto; display:block' /&gt;
&lt;p&gt;The important bit is to note the api key details (a user name and password that you will use in your app). The user just generated should also get read/write access to your database (set it with the checkboxes).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5: Set up credentials in your application config&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In this case, as I am using the Play! framework - the configuration is in application.conf. The keys I set up were:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='tcsh'&gt;    &lt;span class='c'&gt;#CloudBees details&lt;/span&gt;
    bees.api.key&lt;span class='o'&gt;=&lt;/span&gt; key for deploying
    bees.api.secret&lt;span class='o'&gt;=&lt;/span&gt; secret for deploying
    bees.api.domain&lt;span class='o'&gt;=&lt;/span&gt;michaelvideo
    bees.api.name&lt;span class='o'&gt;=&lt;/span&gt;urly

    &lt;span class='c'&gt;#Cloudant details&lt;/span&gt;
    couch.user&lt;span class='o'&gt;=&lt;/span&gt;api key user
    couch.password&lt;span class='o'&gt;=&lt;/span&gt;api key password
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;I put the CloudBees details in there for easy deployment but technically you don&amp;#8217;t have to (you can pass them to command line if you like).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6: Talking to CouchDB&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One of the really nice things about CouchDB is that you don&amp;#8217;t need any drivers or dependencies to talk to it — https is a “native” api for it. So all that is needed is a simple http/REST/WS client.&lt;/p&gt;

&lt;p&gt;Urls are how you address content - you can store a document in a nominated key for example by PUT&amp;#8217;ing a JSON body to &lt;code&gt;https://michaelvideo.cloudbees.cloudant.com/urly/&lt;/code&gt; (urly is the name of the database). Updates to data require you to specify the current version tag of the data (field in the JSON body) as a form of optimistic locking.&lt;/p&gt;

&lt;p&gt;Getting the data back is a simple GET ! (obviously there is a lot more you can read about if you need). In this case the keys are the randomly generated “slugs” that form the short URL.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 7: Wire up the application&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Descending from the mountain top, a simple codebase which generates random url “slugs” and then does appropriate http redirects was carved in stone (also &lt;a href='https://github.com/michaelneale/URL-shortener'&gt;available on github&lt;/a&gt;):&lt;/p&gt;
&lt;img src='/images/cloudbees4.png' style='margin-left:auto; margin-right:auto; display:block' /&gt;
&lt;p&gt;Authentication with CouchDB is using http basic over SSL (using the api keys mentioned earlier).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 8: Deploy&lt;/strong&gt;&lt;/p&gt;
&lt;img src='/images/cloudbees5.png' style='margin-left:auto; margin-right:auto; display:block' /&gt;
&lt;p&gt;(This will use the Play! CloudBees plugin - thanks Ivan !)&lt;/p&gt;

&lt;p&gt;I then set up a domain and a record pointing to the host for the app, running at http://cloudbe.es/&lt;/p&gt;

&lt;p&gt;Note that there was no need to migrate any data, or setup a schema (just create the database by name - which I could have also done programmatically).&lt;/p&gt;

&lt;p&gt;The data is safely stored in CouchDB (below is browsing it with Futon):&lt;/p&gt;
&lt;img src='/images/cloudbees6.png' style='margin-left:auto; margin-right:auto; display:block' /&gt;
&lt;p&gt;&lt;strong&gt;MapReduce and Views&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A further enhancement is to create views. CouchDB uses a Map Reduce model to provide views and aggregate calculations.&lt;/p&gt;

&lt;p&gt;A view is similar to what relational databases offer and only requires a map function to be provided. Reducing is a more complicated topic and I won&amp;#8217;t show it, but it could be used, for example, to calculate aggregates (sum or average over some range of documents). The advantage of a Map Reduce model is that the calculation can be distributed and run in parallel with the data - good for very large sets of data.&lt;/p&gt;
&lt;img src='/images/cloudbees7.png' style='margin-left:auto; margin-right:auto; display:block' /&gt;
&lt;p&gt;The Map function above simply takes a document and emits another document which is made up of the slug and the agent string (each browser provides an agent string). The key in this case is the url we stored - this means we can (if we want) lookup slugs based on URL (the reverse of what we were doing before). Note that as the fields in each document are optional - even if there is no agent field the above view will still work (just will have no agent field in the view output).&lt;/p&gt;

&lt;p&gt;The functions are written in javascript - and are themselves stored as documents (with a special naming convention). The results of these views are accessed the same as the normal documents you write data to.&lt;/p&gt;

&lt;p&gt;Hopefully from this you get a taste of the convenience and power of CouchDB and Cloudant.&lt;/p&gt;

&lt;p&gt;You can sign up for both CloudBees (if you don&amp;#8217;t have an account) and the Cloudant service on the &lt;a href='http://cloudbees.com/platform-service-cloudant.cb'&gt;CloudBees website&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>A Technical Look at Cloudant Search</title>
      <link>http://blog.cloudant.com/technical-look-at-cloudant-search</link>
      <pubDate>Thu, 14 Jul 2011 00:00:00 PDT</pubDate>
      <author>David Hardtke</author>
      <guid>http://blog.cloudant.com/technical-look-at-cloudant-search</guid>
      <description>&lt;p&gt;As we &lt;a href='/announcing-cloudant-search/'&gt;just announced&lt;/a&gt;, Cloudant has added fault-tolerant, federated full-text search to our document database offering.&lt;/p&gt;

&lt;p&gt;Cloudant Search builds upon our existing database to offer full-text indexing and search. It makes use of the Apache Lucene query syntax and large portions of the Lucene framework, but uses a new data storage model entirely within the CouchDB database framework. The inverted index (the map of terms to documents in which they appear) is calculated using our incremental map-reduce framework. This means the database is always available for document insertion and reading even if the indexing task backs up - other search solutions only allow documents to be added as quickly as they can be indexed. Newly indexed documents are immediately searchable &amp;#8211; there is no latency while the inverted indices are rebuilt.&lt;/p&gt;
&lt;img src='/images/federation.png' style='margin-left:auto; margin-right:auto; display:block' /&gt;
&lt;p&gt;Documents within Cloudant are distributed to multiple nodes using consistent hashing in a ring like structure. The inverted index data associated with each document is saved on the same node as the document itself. Searches are done at the shard level, and results are combined in a federation layer. If a particular node in the cluster is offline, other copies of the shard are used. Cloudant utilizes the same underlying distribution and federation technology from the open-source &lt;a href='https://github.com/cloudant/bigcouch'&gt;Bigcouch&lt;/a&gt; project.&lt;/p&gt;

&lt;p&gt;Important features of Cloudant Search include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Text analysis can utilize existing Java based Lucene analyzer. Java code can be loaded into the database and stored along with the search indices.&lt;/li&gt;

&lt;li&gt;Support for indexing in many languages (&lt;a href='http://blog.cloudant.com/java-language-map-reduce-views/'&gt;Java&lt;/a&gt;, &lt;a href='http://blog.cloudant.com/search-indexing-in-javascript/'&gt;Javascript&lt;/a&gt;, python, erlang, ruby, etc.) User indexing code is also stored in database.&lt;/li&gt;

&lt;li&gt;Ability to run ad-hoc queries against multiple independent map-reduce views of data.&lt;/li&gt;

&lt;li&gt;Full support for all JSON types during indexing (Strings, Numbers, JSONObjects). Pure Lucene search solutions only support String tokens.&lt;/li&gt;

&lt;li&gt;Support for following query types: Boolean, Range (text, numerical, date, and compound key ranges), Phrase, Sorted, Prefix, Dates&lt;/li&gt;

&lt;li&gt;Ability to query a “stale” snapshot of the database in case where indexing has not caught up to document insertion&lt;/li&gt;

&lt;li&gt;Horizontal scalability through addition of database nodes&lt;/li&gt;

&lt;li&gt;HTTP based search API consistent with CouchDB view API.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We see several distinct use cases where Cloudant Search will be superior to existing products. Since Cloudant runs as both a low cost hosted service and as a dedicated deployment for the largest customers, developers can build products around Cloudant Search and know that they will scale to terabytes of indexed data and high IOPS rates. An ideal use case would be mobile applications that require real-time geographical bounding box search coupled with text queries. Cloudant Search&amp;#8217;s native support for numerical index types allows this. Cloudant Search&amp;#8217;s reliance on CouchDB views also opens up unique possibilities. Multiple algorithms can be used simultaneously to search, score and sort documents.&lt;/p&gt;

&lt;p&gt;To get started with Cloudant search, you first need to specify how your database is indexed by uploading a new CouchDB design document (&lt;a href='http://support.cloudant.com/kb/search/search-indexing'&gt;indexing instructions&lt;/a&gt;). Then you can use the &lt;a href='http://support.cloudant.com/kb/search/search-api'&gt;search API&lt;/a&gt;. There is also a full description of the &lt;a href='http://support.cloudant.com/kb/search/search-query-syntax'&gt;query syntax&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Announcing Cloudant Search</title>
      <link>http://blog.cloudant.com/announcing-cloudant-search</link>
      <pubDate>Thu, 14 Jul 2011 00:00:00 PDT</pubDate>
      <author>Tim Anglade</author>
      <guid>http://blog.cloudant.com/announcing-cloudant-search</guid>
      <description>&lt;p&gt;I’ve always strongly felt that using NOSQL wasn’t so much a choice as a necessity. That most successful NOSQL deployments start with the intimate knowledge that your set of requirements — from speed &amp;amp; availability to operational considerations and budget — cannot be met with a relational database, coupled with a deep understanding of the tradeoffs you are making. Among those, perhaps no tradeoff has been felt more deeply by NOSQL users worldwide, than the eponymous loss of a natural, instantaneous way of accessing your data through a structured query language. We all came up with our own remedies; more often than not, that substitute was based on &lt;a href='http://nosqlsummer.org/paper/google-mapreduce'&gt;MapReduce&lt;/a&gt;: Google’s novel, elegant way of explicitly parallelizing computation over distributed, unstructured data. But &lt;a href='http://browsertoolkit.com/fault-tolerance.png'&gt;as the joke goes&lt;/a&gt;, it’s always been a non-starter for the more novice users out there, and where suits &amp;amp; ties are involved.&lt;/p&gt;

&lt;p&gt;CouchDB Views (as our brand of MapReduce is called) come with additional concerns, as they are pre-computed and written to disk. While this is fine — and actually, extremely useful — for the use-cases and small scales a lot of Apache CouchDB deployments reside at (single instances working off a limited dataset), this behavior is somewhere North of nagging and South of suicidal for the data sizes &amp;amp; use-cases most Cloudant customers have to deal with. Part of the promise of our industry is — or should be, anyway — to make your life &amp;amp; business easier, no matter how much data you have. And so, while CouchDB Views have been, and will undoubtedly remain, an essential tool to index, filter &amp;amp; transform your data, once you know what to do with it; and while its various weaknesses (explicitly parallelized syntax, lengthy computation, heavy disk usage) are also the source of its most meaningful strengths (distributed processing, high performance on repeated queries, persistent transformations), we at Cloudant saw a clear opportunity to offer a novel, complementary way to interact with your data.&lt;/p&gt;

&lt;p&gt;A way that would allow you to interact with your data instantaneously; wouldn&amp;#8217;t force you to mess around with MapReduce jobs or complex languages; a way that would not require you to set up a third-party, financially or operationally expensive solution.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We call this way Cloudant Search. And today, we’re proud to announce its immediate availability, as a public beta.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Want to easily find all the documents that contain the word “bieber”? This is the Cloudant Search query you have to write:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;bieber&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Want to find all the records that have “my world” in their title? Just write:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;title:&amp;quot;my world&amp;quot;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;How about only finding all the artists who were born in Canada in February &amp;amp; March 1994?&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;type:artist country:canada dob&amp;lt;date&amp;gt;:[1994-02-01 TO 1994-03-31]&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;How about people who are fan of either Justin Bieber or Justin Timberlake, that live in JBiebz’ hometown in Ontario — wait, what’s it called, Stratwood? Stratburg? Strat- something. Oh, I&amp;#8217;ll just search it:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;type:person fan-of:(justin (bieber OR timberlake)) city:strat* state:ontario&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;And that&amp;#8217;s just scratching the surface and you can &lt;a href='http://support.cloudant.com/kb/search/search-query-syntax'&gt;see more query examples in our knowledge base&lt;/a&gt;. Of course, all those queries are also served instantly, and new records you put in your database will be indexed in real time.&lt;/p&gt;

&lt;p&gt;But Cloudant Search goes beyond ease of access for developers, analysts &amp;amp; end-users.&lt;/p&gt;

&lt;p&gt;For the IT &amp;amp; DevOps teams out there, and for our own sake (since, as maintainers of hosting service cloudant.com, we have the distinction of being the only NOSQL company tasked with operating its own product around the clock), we worked tirelessly to make it capable of tackling terabytes and easy to maintain under load. It is baked in directly into the Cloudant codebase and leverages existing, proven technology, such as the Lucene indexers, CouchDB’s view indexing logic and of course, Cloudant’s own &lt;a href='http://nosqlsummer.org/paper/amazon-dynamo'&gt;Dynamo&lt;/a&gt;-inspired distribution algorithms. Compared to external search &amp;amp; analytics solutions such as Hadoop, SAS, Solr, Sphinx or ElasticSearch, this integration &amp;amp; simplicity effectively translates to more flexibility to address ever-changing use-cases, a drastically reduced operational complexity and, at the end of the day, a much lower total cost of ownership for start-ups and established businesses alike.&lt;/p&gt;

&lt;p&gt;Finally, for the power-users out there, we’ve made Cloudant Search extremely extensible. As &lt;a href='http://support.cloudant.com/kb/search/search-indexing'&gt;our documentation details&lt;/a&gt;, you can write your own indexing algorithms, leverage Lucene tokenizers or even, customize the Cloudant Search indexer itself, with a bit of Java code.&lt;/p&gt;

&lt;p&gt;Now, I&amp;#8217;d be engaging in doublespeak if I didn&amp;#8217;t make it clear that Search is still bound by some of the tradeoffs that epitomize our industry. Like some of our esteemed colleagues, we strive to make our users &amp;amp; customers aware of the adjustments that, yes, define our weaknesses but more importantly, are also the source of our strengths. Among those, I should mention that Cloudant Search will require an initial, one-time indexing and this single index itself will take up disk space. To limit resource consumption and self-induced podiatric harm, wildcard (&amp;#8220;som*thing&amp;#8221;) or suffix (&amp;#8220;*thing&amp;#8221;) searches are not allowed (only prefix searches like &amp;#8220;some*&amp;#8221;). And yes, some of its &lt;a href='http://support.cloudant.com/kb/search/search-api'&gt;more advanced features&lt;/a&gt; like the dynamic sorting of results, are still memory-bound and as such, should be used carefully.&lt;/p&gt;

&lt;p&gt;There are &lt;a href='http://en.wikipedia.org/wiki/No_Silver_Bullet'&gt;no silver bullets&lt;/a&gt; in this industry. That is something that the Cloudant team has kept in mind through the months we spent developing Cloudant Search. But more than an admission of eventual defeat, we’ve always taken it as a challenge to innovate at the pain-points. To explore the areas beyond the boundaries of our existing trade-offs. To find tasteful solutions to gritty problems. Today, we’re happy to bring you the fruits of the labor, share our response to this problem, and in a way, pass the challenge on to you: we can’t wait to see what you will do with it. We’re confident that Cloudant Search will open new doors, from user-facing analytics dashboards, to efficient Object-Document Mappers, to killer apps we haven&amp;#8217;t even dared to think of.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So go ahead and &lt;a href='http://blog.cloudant.com/technical-look-at-cloudant-search/'&gt;read more about the technology&lt;/a&gt;, &lt;a href='http://support.cloudant.com/kb/search/introduction-to-cloudant-search'&gt;peruse the docs&lt;/a&gt;, &lt;a href='https://cloudant.com/#!/dashboard/'&gt;activate Search&lt;/a&gt; on a database through your cloudant.com dashboard or &lt;a href='mailto:info@cloudant.com'&gt;contact us&lt;/a&gt; to see how this technology can be deployed in your datacenter.&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>.NET + CouchDB = ♥: Announcing the Cloudant Add-On for AppHarbor</title>
      <link>http://blog.cloudant.com/dot-net-couchdb-cloudant-appharbor</link>
      <pubDate>Tue, 28 Jun 2011 00:00:00 PDT</pubDate>
      <author>Tim Anglade</author>
      <guid>http://blog.cloudant.com/dot-net-couchdb-cloudant-appharbor</guid>
      <description>&lt;p&gt;The NOSQL movement originally found its community roots in some the “edgier” platform &amp;amp; languages of this world; CouchDB in particular, has always felt strongly backed by a certain kinship with the Ruby and Rails communities, amongst others. But as one of the most mature NOSQL projects out there, CouchDB now also enjoys energetic support in the more established communities such as PHP, Java or even .NET.&lt;/p&gt;

&lt;p&gt;As it turns out NOSQL isn’t the only movement kindling a relationship with the .NET framework. The &amp;#8220;Cloud&amp;#8221; has also taken root in that community, and a service called &lt;a href='https://appharbor.com/'&gt;AppHarbor&lt;/a&gt; has arisen to meet the demand for reliable, elastic &amp;amp; pay-as-you-grow .NET hosting.&lt;/p&gt;

&lt;p&gt;I’d be beating around the bush if I introduced AppHarbor as anything else but “Heroku for .NET”. That description may sound catchy but in and of itself, does not a great service make. No, what really caught our eye about our fellow ex-YCombinator brethren Michael, Rune &amp;amp; Troels, is their flawless execution of the concept and their tactful tweaks to the Platform-as-a-Service model. By giving you access to the Common Language Runtime and the .NET framework, AppHarbor opens more doors for developers than just single-language execution. You instantly gain access to the years of loving care, performance tuning and functional extensions that Microsoft has poured into its platform, as well as support for a &lt;a href='http://en.wikipedia.org/wiki/List_of_CLI_languages'&gt;flurry of languages&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So today, we’re happy to announce the &lt;a href='hhttps://appharbor.com/addon/cloudant'&gt;Cloudant add-on for AppHarbor&lt;/a&gt;. It will give you instant provisioning of our &lt;a href='https://cloudant.com/#!/solutions/cloud'&gt;hosted CouchDB solutions&lt;/a&gt;, for all your hosted .NET apps. Your Cloudant databases will be co-located in the same datacenter as AppHarbor, so you can enjoy the same reliability &amp;amp; performance you’ve come to expect from Cloudant, with the absolute minimal latency possible. And on the business side, you’ll also get the accounting convenience of a single monthly bill for both your app &amp;amp; data hosting expenses. (Don’t forget to put a coversheet on that TPS report before running it by the boss, though!)&lt;/p&gt;

&lt;p&gt;So go on ahead and get started with one of the many CouchDB libraries available for the .NET framework, such as &lt;a href='https://github.com/foretagsplatsen/Divan'&gt;Divan&lt;/a&gt;, &lt;a href='https://github.com/arobson/Relax'&gt;Relax&lt;/a&gt;, &lt;a href='http://code.google.com/p/relax-net/'&gt;Hammock&lt;/a&gt; or &lt;a href='https://github.com/hhariri/EasyCouchDB'&gt;EasyCouchDB&lt;/a&gt;. Or peruse this &lt;a href='http://vimeo.com/23251936'&gt;recent introduction to CouchDB for .NET developers&lt;/a&gt;. (And please send us an email to show us what you’ve built with AppHarbor + Cloudant!)&lt;/p&gt;

&lt;p&gt;What are you still doing here? Go &lt;a href='https://appharbor.com/account/new'&gt;sign up for AppHarbor&lt;/a&gt;… You’re in good hands with Michael, Rune &amp;amp; Troels.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Paul Davis is Joining Cloudant!</title>
      <link>http://blog.cloudant.com/paul-davis-joining-cloudant</link>
      <pubDate>Mon, 27 Jun 2011 00:00:00 PDT</pubDate>
      <author>Tim Anglade</author>
      <guid>http://blog.cloudant.com/paul-davis-joining-cloudant</guid>
      <description>&lt;p&gt;We are thrilled to announce that noted Apache CouchDB community member &amp;amp; committer Paul Davis will be joining Cloudant in July.&lt;/p&gt;

&lt;p&gt;&lt;img src='/images/paul.jpg' alt='' /&gt;&lt;/p&gt;

&lt;p&gt;Paul had been on our “must-hire” list for a while now, and he will be joining a technical team that now includes a third of the currently active committers to Apache CouchDB! We’ve always tried to be faithful stewards and dedicated supporters of the Open Source community behind CouchDB, and this commitment will only grow stronger with Paul’s inclusion in Team Cloudant.&lt;/p&gt;

&lt;p&gt;Paul’s background in large distributed systems &amp;amp; data analytics, combined with his expertise in Erlang and hardware optimization will undoubtedly come in handy as he helps us solidify our quality of service, add features to our platform and get &lt;a href='https://github.com/cloudant/bigcouch'&gt;BigCouch&lt;/a&gt; ever closer to 1.0.&lt;/p&gt;

&lt;p&gt;You can learn more about Paul through his &lt;a href='https://github.com/davisp'&gt;github&lt;/a&gt;, &lt;a href='http://twitter.com/#!/davisp'&gt;twitter&lt;/a&gt; or &lt;a href='http://davispj.com/'&gt;website&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Bottoms up, Paul. We couldn&amp;#8217;t be happier to have you working with us.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Mike Miller Talks Cloud Databases at GigaOM Structure</title>
      <link>http://blog.cloudant.com/structure-wrap</link>
      <pubDate>Fri, 24 Jun 2011 00:00:00 PDT</pubDate>
      <author>Alan Hoffman</author>
      <guid>http://blog.cloudant.com/structure-wrap</guid>
      <description>&lt;p&gt;Yesterday, Cloudant Chief Scientist (and VP of powder-blue shirts) sat on a panel at &lt;a href='http://event.gigaom.com/structure/'&gt;GigaOm&amp;#8217;s Structure Conference.&lt;/a&gt; Along with representatives from Xeround, ParAccel, and NimbusDB, Mike discussed the ins and outs of running databases in a Cloud environment. As the other three panelists represented more traditional relational and data-warehousing tchnologies, they turned to Mike to represent NOSQL databases as uniquely suited for high performance, elasticity, and operational stability.&lt;/p&gt;

&lt;p&gt;We at Cloudant are delighted to have been chosen for this panel. This is the third year in a row we have sent delegates to Structure and we have always found the speakers, panels, and hallway conversations to be very enlightening.&lt;/p&gt;

&lt;p&gt;You can watch a &lt;a href='http://gigaom.com/cloud/cloud-databases-face-challenges-but-opportunities-beckon/'&gt;video of the panel&lt;/a&gt;, or read &lt;a href='http://www.pcworld.com/businesscenter/article/231059/four_companies_rethink_databases_for_the_cloud.html'&gt;PCWorld’s writeup&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>CouchDB & Java in the Cloud, Now Easier than Ever with CloudBees</title>
      <link>http://blog.cloudant.com/cloudbees-ecosystem</link>
      <pubDate>Tue, 21 Jun 2011 00:00:00 PDT</pubDate>
      <author>Tim Anglade</author>
      <guid>http://blog.cloudant.com/cloudbees-ecosystem</guid>
      <description>&lt;p&gt;Today, Cloudant is proud to be a launch partner of the CloudBees Ecosystem. Effective immediately, our line of hosted CouchDB &lt;a href='https://cloudant.com/#!/solutions/cloud'&gt;cloud solutions&lt;/a&gt; is available directly through CloudBees’ Java platform, with a simple API, unified billing and integrated account management.&lt;/p&gt;

&lt;p&gt;CloudBees started out in 2010, with the goal of giving Java developers &amp;amp; organizations a platform, that not only lets them run their applications online easily, but also gives them specific tools to develop, test &amp;amp; integrate them. This twist in the usual PaaS model means they’re the only platform out there that aims to cover the entire lifecycle of traditional Java application development. So today, we’re thrilled to be part of this vision, by helping them launch an add-on program that also features &lt;a href='http://bit.ly/jp83ai'&gt;New Relic, SauceLabs, Sonar &amp;amp; JFrog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Considering the recent increase in CouchDB adoption in the Java community (bolstered by the existence of several drivers &amp;amp; persistence layers, such as our own fork of &lt;a href='https://github.com/cloudant/couchdb4j'&gt;couchdb4j&lt;/a&gt;, &lt;a href='http://code.google.com/p/ektorp/'&gt;ektorp&lt;/a&gt;, &lt;a href='http://code.google.com/p/jcouchdb/'&gt;jcouchdb&lt;/a&gt; and &lt;a href='https://github.com/isterin/jrelax'&gt;jrelax&lt;/a&gt;), we’re more than happy we answered CloudBees call, integrated deeply into their platform, and we can’t wait to see what you will build with us!&lt;/p&gt;

&lt;p&gt;So go on ahead and check out the &lt;a href='http://blog.cloudbees.com/2011/06/cloudbees-ecosystem-launch-discover.html'&gt;details of their announcement&lt;/a&gt; or &lt;a href='http://bit.ly/lL7vsS'&gt;sign up for the CloudBees platform&lt;/a&gt; right away!&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>A Closer Cloudant? Now Accepting Reservations for a European Cluster!</title>
      <link>http://blog.cloudant.com/closer-cloudant-europe</link>
      <pubDate>Tue, 24 May 2011 00:00:00 PDT</pubDate>
      <author>Tim Anglade</author>
      <guid>http://blog.cloudant.com/closer-cloudant-europe</guid>
      <description>&lt;p&gt;One of the hardest parts of running a global business like Cloudant isn’t necessarily on the technical side of things. While we certainly got better at developing &amp;amp; operating a fleet of clusters that now spans both US coasts &amp;amp; Asia, we’ll admit to still being somewhat under-skilled at tackling some of our marketing concerns, such as estimating latent demand in foreign markets.&lt;/p&gt;

&lt;p&gt;In recent months, our support team has been receiving more &amp;amp; more inquiries about provisioning Cloudant accounts in Europe. But instead of trying to guess who else is interested, run complex spreadsheet models or hire a team of consultants, we figured we’d just ask you. (Yes, you: Time magazine’s 2006 Person of the Year.) To limit the noise in this poll, we’ll ask you to put your money where your mouth is: we’ll only accept reservations from paying customers (i.e., users on an “Argon” plan or above).&lt;/p&gt;

&lt;p&gt;Having your data located a cluster close to your application layer (or other consumers of your CouchDB docs) has a big primary benefit: latency. With a cluster in Europe, your median read &amp;amp; write latencies to Europe should go down by approximately 200ms (or by ~500ms for SSL access), when compared to our existing East Coast cluster .&lt;/p&gt;

&lt;p&gt;So go on ahead to our &lt;a href='https://cloudant.com/#!/europe'&gt;reservation page&lt;/a&gt;. You’ll be asked to sign up for Cloudant if you don’t already have an account; or upgrade to a paid account if you’re currently on our “Oxygen” plan.&lt;/p&gt;

&lt;p&gt;We’ll let you know how the process is going with a handy reservation progress bar. We’ll set up our European cluster and load it with the accounts that reserved a spot, as soon as that bar hits 100%!&lt;/p&gt;

&lt;p&gt;&lt;a href='https://cloudant.com/#!/europe'&gt;Go ahead and tell us you’re interested!&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Search Indexing in Javascript</title>
      <link>http://blog.cloudant.com/search-indexing-in-javascript</link>
      <pubDate>Thu, 19 May 2011 00:00:00 PDT</pubDate>
      <author>David Hardtke</author>
      <guid>http://blog.cloudant.com/search-indexing-in-javascript</guid>
      <description>&lt;p&gt;In order to leverage existing Lucene analyzers, our Search feature (currently in beta) makes use of &lt;a href='http://www.infoq.com/news/2010/09/cloudant-couchdb-java-viewserver'&gt;Java views&lt;/a&gt;, rather than the traditional Javascript views you’re used to in CouchDB. Recently, we wanted to do some performance comparisons between the two; would the Java view server be significantly faster (or slower) than the Javascript view server on typical indexing tasks? To test this, we wrote a simple Javascript view (in the form of a CouchApp) that creates a Cloudant Search-compatible inverted index. The code is available on github &lt;a href='https://github.com/cloudant/jsindexer'&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;To use it, clone the git repository and use the couchapp tool to push it to your database:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='tcsh'&gt;&lt;span class='nv'&gt;$ &lt;/span&gt;git clone git@github.com:cloudant/jsindexer.git
&lt;span class='nv'&gt;$ &lt;/span&gt;&lt;span class='nb'&gt;cd &lt;/span&gt;jsindexer
&lt;span class='nv'&gt;$ &lt;/span&gt;couchapp push http://&amp;lt;user&amp;gt;.cloudant.com:5984/&amp;lt;db_or_couchapp_you_want_to_search&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;With this simple push, you gain the ability to do a search against this inverted index. For example, if you want to search all the docs in that DB whose “comments” field contains “cloudant is awesome” and whose “rating” value is between 80 and 100:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='tcsh'&gt;&lt;span class='nv'&gt;$ &lt;/span&gt;curl &lt;span class='s1'&gt;&amp;#39;http://&amp;lt;user&amp;gt;.cloudant.com:5984/&amp;lt;db_or_couchapp_you_want_to_search&amp;gt;/_search?q=comments:&amp;quot;cloudant is awesome&amp;quot; AND rating:[80 TO 100]&amp;amp;index=_design/jsindexer/_view/whitespace&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Obviously, that&amp;#8217;s just scratching the surface. Our knowledge base has several articles about Search. You can go there to read our &lt;a href='http://support.cloudant.com/kb/search/introduction-to-cloudant-search'&gt;introduction to Search&lt;/a&gt;, learn more about &lt;a href='http://support.cloudant.com/kb/search/search-api'&gt;the Search API&lt;/a&gt; or how to &lt;a href='http://support.cloudant.com/kb/search/search-indexing'&gt;write your own Indexer&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As for the results of the performance comparison, our full text indexing speed is limited by the writing of the data to the CouchDB B-Tree, so Javascript and Java perform the same. So there you have it: full-text search from Javascript, a guilt-free geeky pleasure. Go ahead and &lt;a href='https://github.com/cloudant/jsindexer'&gt;have at it&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Fukushima from Afar</title>
      <link>http://blog.cloudant.com/fukushima</link>
      <pubDate>Sat, 02 Apr 2011 00:00:00 PDT</pubDate>
      <author>Mike Miller</author>
      <guid>http://blog.cloudant.com/fukushima</guid>
      <description>&lt;p&gt;In the past month I had the all too rare opportunity to do something that was both terrifically exciting and, I believe, deeply meaningful. On Friday, March 11, I awoke in Seattle to the news of the devastating earthquake and tsunami that struck Japan. As the day developed the sheer magnitude of the true devastation emerged and it was clear that sobering stories would continue to unfold for quite awhile.&lt;/p&gt;

&lt;p&gt;I was doubly surprised by the emerging media coverage of the Fukushima reactor complex. The Japanese are absolutely top-tier in both their science and engineering and the very fact that Tokyo had so little damage from a 9.0 earthquake (imagine if that happened here!) suggested that they were equally prepared for the aftermath. To a large extent, they were — just not for a series of events that were so powerful that within days it was clear that the Fukushima situation had changed dramatically.&lt;/p&gt;

&lt;p&gt;In this era of real-time data, it occurred to me just how hard it was for the educated public to gain access to the right data. What was the level of radiation being released by Fukushima? Was it enough to be dangerous to the people in Japan? Was it enough to impact our sensitive (and expensive!) physics experiments here in Seattle? Was it enough to be a public health concern in the US?&lt;/p&gt;

&lt;p&gt;These questions, plus a little prodding from senior faculty at UW, put the wheels in motion for me. If information was going to continue to be so hard to find, then maybe we could do something about it. We are physicists, after all. Emails were sent, grad students were diverted from thesis writing and qualifying exam preparation, and by Monday we had worked to convert my lab at UW from &lt;a href='http://en.wikipedia.org/wiki/Dark_matter'&gt;Dark Matter&lt;/a&gt; detector R&amp;amp;D to an &lt;a href='http://www.npl.washington.edu/monitoring/'&gt;air radioactivity monitoring lab&lt;/a&gt;, containing some very expensive, one-of-a-kind equipment, along with the requisite quantities of duct tape and zip-ties holding everything together. This was no small feat, and it never would&amp;#8217;ve happened without the work of a superb team and the right tools.&lt;/p&gt;

&lt;p&gt;We knew that any radiation that was released would be heavily diluted in transit to the west coast, so we had to (i) find a way to sample enormous quantities of air (nearly 150,000 cubic meters per day) and (ii) protect our radiation counter and air samples from the copious amounts of normal background activity. A little known (or appreciated) fact is that natural radiation is part of your daily life, from radon decay products to bananas, and natural radiation would likely drown out any faint signal from Fukushima. By Wednesday we started recording data, and then it suddenly hit me — we were going to be producing a lot of data, and it was already coming in. The data had to be catalogued, processed, condensed, distributed, data models modified, reprocessed, redistributed, and we were learning as we went along. Not only was the data was important to us and our experiments, but the public was hungry for realtime results (that had to be correct!), so we didn&amp;#8217;t have the luxury of writing a spec, reviewing it, building it, prototyping, or any of the typical processes. We already were running TV crews through the lab daily, time was short, and so I turned to the tool that I happened to know best: &lt;a href='https://cloudant.com/#!/solutions/bigcouch'&gt;open source BigCouch&lt;/a&gt;, and specifically the free hosted version on &lt;a href='https://cloudant.com/#!/solutions/cloud'&gt;Cloudant&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We began putting together a real-time BigCouch workflow that ultimately enabled us to complete complex processing (data transformation and aggregation, signal processing, statistical analyses and the like), real-time data monitoring and visualization, collaborative analyses, and ultimately to serve the results directly to the public from the database. At the end of this post I will briefly review my BigCouch experiences, both good and bad.&lt;/p&gt;

&lt;p&gt;On Friday, March 18, I had just placed the overnight air filter sample into our monitoring station and was adding some additional signal processing to our workflow. After 20 minutes of counting I happened to look at the computer screen to check the realtime data acquisition histogram, and there it was, clear as day, the first arrival of 131-I in the Seattle air. I spent about 10 minutes double checking, looking for other characteristic fission products in the spectra, and then realized we had something very unique.&lt;/p&gt;

&lt;p&gt;Racing down the hall, I gathered a team and the next week is an absolute blur. That Friday night, around 10, we knew that we had unambiguously detected fission fragments from Fukushima, and we had a good handle on the total level of the radioactivity levels. While results were far below any local health concerns (roughly 1000 times below the &lt;a href='http://www.atsdr.cdc.gov/csem/iodine/standards_regulations.html'&gt;EPA limits&lt;/a&gt;), it was higher than I had personally expected, and we suddenly knew that the situation in Japan was indeed serious. Our thoughts go out to those that live near Fukushima, as well as the heroic workers at the plant as they fight to contain the incident.&lt;/p&gt;

&lt;p&gt;As the week progressed, we saw the radiation levels peak, slowly decline, and peak again as we detected events that occurred roughly 7 days after they happened in Japan. Within a day of our initial sighting we had posted the numbers and plots online, and they continued to update in real-time as the situation unfolded. By the middle of the week we posted the &lt;a href='http://arxiv.org/abs/1103.4853'&gt;first publication draft online&lt;/a&gt;, and are now witnessing the radiation levels drop below the limit of detectability in our experiment. If you are interested in the details, the pieces in the &lt;a href='http://www.washingtonpost.com/national/as-fukushima-fallout-circles-the-globe-nuclear-sleuths-sift-it-for-clues/2011/03/30/AFfnQBHC_story.html'&gt;Washington Post&lt;/a&gt;, &lt;a href='http://blogs.nature.com/news/thegreatbeyond/2011/03/fukushima_reactor_products_cou.html'&gt;Nature News&lt;/a&gt;, and &lt;a href='http://www.nytimes.com/external/gigaom/2011/03/31/31gigaom-how-nosql-is-helping-allay-seattles-radiation-fea-40912.html?partner=rss&amp;amp;emc=rss'&gt;NY Times&lt;/a&gt; were particularly well written, in my opinion.&lt;/p&gt;

&lt;p&gt;Before closing, I want to briefly review the pros and cons of using BigCouch/Cloudant for this critical application.&lt;/p&gt;

&lt;p&gt;Pros&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Flexibility&lt;/strong&gt;. The ability to smoothly handle both structured and unstructured data was critical. The document philosophy allowed us to be agile with data types (metadata + binary data side-by-side) and date models (sometimes changing by 20x per day).&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Cloud&lt;/strong&gt;. Not having to install and maintain my own database server for this purpose was a huge win.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Scalability&lt;/strong&gt;. This application isn&amp;#8217;t the world&amp;#8217;s biggest data producer, but it&amp;#8217;s no slouch either. We were able to easily store and process Terabytes of data without breaking a sweat, and it was nice to know that we wouldn&amp;#8217;t be limited by scaling concerns in the future.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Real-time Analytics&lt;/strong&gt;. We were able to easily insert our domain specific libraries/application into an incremental MapReduce workflow to provide up-to-the-minute results.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Collaborative&lt;/strong&gt;. The database is a web server, so we were immediately able to collaborate as a team. The fact that the db is also a web server that speaks JSON over HTTP enables simple integration with other standard tools for client-side visualization, etc.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Thin client applications&lt;/strong&gt;. I was able to write ultra-lightweight client-side javascript applications for &lt;a href='http://mlm43.cloudant.com/japan/_design/ana/index.html'&gt;data monitoring&lt;/a&gt; and presentation. These applications were typically around 100 lines of code and served directly from the cloud to the browser, which means I didn&amp;#8217;t have to set up my own web-tier stack, nor learn Rails, Django, etc. This has been on my list of &amp;#8220;things to learn&amp;#8221; for a year, and this pushed me to finally do it.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now the things that can definitely be improved&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Analytics integration&lt;/strong&gt;. Like Hadoop, building a BigCouch analytics workflow is a bit raw and has a substantial learning curve. This experience makes me realize that there is tremendous low-hanging fruit for tools that bridge that gap for the average developer and/or analyst.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;strong&gt;CouchApp&lt;/strong&gt;. The client-side JS model is a huge win here, and the couchapp tool was a big help in turning my JS and HTML files immediately into an application in the cloud. However, I had to strip out a significant amount of unused baggage to make sense of it all. Further, there is still some work to be done to allow for rich applications that securely allow not just data reads from the client(which currently works well), but also writes.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In summary, BigCouch was a key enabling technology, and I will definitely use it for future large scale experiments. In this case, it helped maximize the value in a very time-sensitive big data problem.&lt;/p&gt;

&lt;p&gt;Our thoughts go to the people nearest Fukushima. We are fortunate that the radioactivity in the US is so low. I feel both proud and humbled to have been able to contribute in some way, by bringing scientific information to the public in a time of great uncertainty.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Rise & Shine</title>
      <link>http://blog.cloudant.com/rise-and-shine</link>
      <pubDate>Sun, 20 Mar 2011 00:00:00 PDT</pubDate>
      <author>Tim Anglade</author>
      <guid>http://blog.cloudant.com/rise-and-shine</guid>
      <description>&lt;p&gt;You wouldn&amp;#8217;t know it from looking out your window here in Boston but spring is supposed to start tomorrow. And so the Cloudant team once again spends a lazy March Sunday, shut indoors, hoping for milder spells.&lt;/p&gt;

&lt;p&gt;But it’s already Monday in Japan and it seems like the tech community there has had a busy weekend.&lt;/p&gt;

&lt;p&gt;In an effort spearheaded by the local branches of Google, Amazon, Yahoo!, Microsoft &lt;a href='https://sites.google.com/site/hackforjapan/sandou-sha-ichiran'&gt;and many others&lt;/a&gt;, more than 200 developers have been sharing ideas, teaming up and designing apps that will help speed up Japan’s recovery after the disastrous earthquake, tsunami, nuclear scare and &lt;a href='http://en.wikipedia.org/wiki/File:Map_of_Sendai_Earthquake_2011.jpg'&gt;632+ aftershocks&lt;/a&gt; they have been experiencing since Friday, March 11.&lt;/p&gt;

&lt;p&gt;The endeavor is dubbed &lt;a href='https://sites.google.com/site/hackforjapan/'&gt;Hack For Japan&lt;/a&gt; and while the English language details are still sparse (see the &lt;a href='https://www.google.com/moderator/#15/e=6441b&amp;amp;t=6441b.40&amp;amp;f=6441b.1e8956'&gt;idea poll&lt;/a&gt; or the &lt;a href='http://search.twitter.com/search?q=%23hack4jp&amp;amp;lang=en'&gt;ongoing Twitter stream&lt;/a&gt;), we immediately knew we wanted to help out in whatever way we could.&lt;/p&gt;

&lt;p&gt;The Japanese CouchDB community is &lt;a href='https://groups.google.com/group/couchdb-jp?hl=en'&gt;150+ strong&lt;/a&gt;, has organized several &lt;a href='https://groups.google.com/group/couchdb-jp/web/couchdb-hackathon-relaxon?hl=en'&gt;“relaxons”&lt;/a&gt;, is writing an impressive &lt;a href='http://dl.dropbox.com/u/673631/couchguide_ja/_build/html/index.html'&gt;community translation of “CouchDB: the Definitive Guide”&lt;/a&gt; and has a &lt;a href='http://yssk22.blogspot.com/'&gt;very&lt;/a&gt; &lt;a href='https://github.com/yssk22'&gt;active&lt;/a&gt; &lt;a href='http://www.slideshare.net/yssk22'&gt;leader&lt;/a&gt; in &lt;a href='http://twitter.com/yssk22'&gt;Yohei Sasaki&lt;/a&gt;. Cloudant in particular, has enjoyed some traction in Japan for a while and we set up a cluster dedicated to serving that community last year.&lt;/p&gt;

&lt;p&gt;Today, we’re moved by the resilience, kindness and positive outlook of the Japanese tech community. So we’re announcing &lt;strong&gt;we’re donating our spare Asia-Pacific cluster capacity to any Hack For Japan project that may need it&lt;/strong&gt;. It should be enough for &lt;a href='https://cloudant.com/#!/solutions/cloud'&gt;several hundred Argon or a few Krypton accounts&lt;/a&gt;. The details are &lt;a href='https://cloudant.com/hack4jp'&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;That&amp;#8217;s just our way of saying thanks to the Japanese community, for always having our back, for keeping the lost, the injured &amp;amp; the stranded in their hearts, and for showing that you can always count on your fellow geeks to unite, build &amp;amp; help rebuild.&lt;/p&gt;

&lt;p&gt;After all, it&amp;#8217;s already the season of love, life &amp;amp; new hopes, over there.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>“Using Incentive Prizes to Crowdsource Brilliance”</title>
      <link>http://blog.cloudant.com/using-incentive-prizes-to-crowdsource-brilliance</link>
      <pubDate>Wed, 09 Mar 2011 00:00:00 PST</pubDate>
      <author>Mike Miller</author>
      <guid>http://blog.cloudant.com/using-incentive-prizes-to-crowdsource-brilliance</guid>
      <description>&lt;p&gt;I can&amp;#8217;t take credit for the title, it&amp;#8217;s a direct quote from a fantastic talk that I just saw by &lt;a href='http://en.wikipedia.org/wiki/Peter_Diamandis' title='Peter Diamandis’ Bio on Wikipedia'&gt;Peter Diamandis&lt;/a&gt;, the force behind the &lt;a href='http://www.xprize.org/' title='The X Prize Foundation'&gt;X Prize Foundation&lt;/a&gt;. Peter is a superb speaker. The room was packed and he didn&amp;#8217;t disappoint. He is passionate, eloquent and flat-out inspiring. Now, I&amp;#8217;ve been incredibly lucky to be surrounded by inspiration at &lt;a href='http://mit.edu/' title='MIT'&gt;MIT&lt;/a&gt;, &lt;a href='https://cloudant.com/' title='Cloudant'&gt;Cloudant&lt;/a&gt; and &lt;a href='http://ycombinator.com/' title='Y Combinator'&gt;Y-Combinator&lt;/a&gt;, but… Something about this talk really struck home.&lt;/p&gt;

&lt;p&gt;From our time in YC and beyond, Paul Graham has always been pounding home a single message: &lt;a href='http://www.paulgraham.com/good.html' title='PG’s ‘Make Something People Want’ Article'&gt;make something people want&lt;/a&gt;. By now I&amp;#8217;m sure everyone has seen the &lt;a href='http://www.zazzle.com/make_something_people_want_tshirt-235395273105770540' title='Make Something People Want T-Shirts'&gt;t-shirts&lt;/a&gt; and knows the slogan. Something about this motto has always struck me as just a bit, well, incomplete. Yes, I want to make something people want. Yes, that&amp;#8217;s as good of a guiding principle as any on the path to success. However, following that mantra to its logical end can actually lead to sub-optimal outcomes on a whole. I&amp;#8217;d bet a decent chunk of entrepreneurs (PG clearly included) actually want to make the world a better place while following their passions. Most of us at Cloudant spent the better parts of our young careers trying (sometimes in vain) to understand what the universe is made of and how it behaves! And somehow I&amp;#8217;ve always felt this tension between those two poles: what the market wants and what actually makes the world a better place. And that&amp;#8217;s when Peter&amp;#8217;s message finally hit home.&lt;/p&gt;

&lt;p&gt;Peter recognizes that sometimes free market forces alone don&amp;#8217;t converge on the global minimum. Sometimes they need a nudge to escape a local minimum, and Peter has made it his life mission to use incentive prizes to nudge the market as needed.&lt;/p&gt;

&lt;p&gt;The X Prize Foundation is awesome. They identify hard problems with high stakes impact on society as a whole (water, medicine, energy, enviornment) and create an innovative/entrepreneurial environment to solve those problems. For profit. Yes the X Prize Foundation is strictly philanthropic, but the contestants are anything but. The foundation only gives prize money to the winning team, but that doesn&amp;#8217;t matter &amp;#8211; they&amp;#8217;ve just created a new market from scratch, and a big one to boot! In the case of the &lt;a href='http://en.wikipedia.org/wiki/Ansari_X_Prize' title='Ansari X Prize (for space flight'&gt;first X Prize, for space flight&lt;/a&gt; (actually 100 km elevation, to be precise), they&amp;#8217;ve created a billion dollar industry, nearly overnight&lt;sup id='fnref:1'&gt;&lt;a href='#fn:1' rel='footnote'&gt;1&lt;/a&gt;&lt;/sup&gt;. To an entrepreneur that is simply amazing: the prize and the ecosystem it spawned ameliorate the risk. You don&amp;#8217;t have to win the prize to be successful. Great team, great gumption, and clarity of vision: you&amp;#8217;ve got a fighting chance to do anything. Great team, great gumption, clarity, revolutionary space, &lt;em&gt;and&lt;/em&gt; guaranteed market‽ Now you&amp;#8217;re really talking!&lt;/p&gt;

&lt;p&gt;Finally, Peter opened and closed with a question: “What are you passionate about?” This is a big one. At &lt;a href='https://cloudant.com/#!/solutions/cloud' title='Sign Up for Cloudant Cloud'&gt;Cloudant&lt;/a&gt;, we are passionate about innovation and it&amp;#8217;s heartening to see the explosion of not just new companies and technology, but also forces such as YCombinator and the X Prize Foundation that are changing both the way innovation happens as well as what it targets. PG and Peter D. — keep it up!&lt;/p&gt;
&lt;div class='footnotes'&gt;&lt;hr /&gt;&lt;ol&gt;&lt;li id='fn:1'&gt;
&lt;p&gt;Ok, we can quibble about the market&amp;#8217;s existence prior to the 1st prize (hell, Boeing is in the news daily here in Seattle). But.. I walked away convinced that there was at least $1B of &lt;em&gt;new&lt;/em&gt; market created, in addition to anything pre-existing.&lt;/p&gt;
&lt;a href='#fnref:1' rev='footnote'&gt;&amp;#8617;&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>New Cloudant HQ (with pictures!)</title>
      <link>http://blog.cloudant.com/new-cloudant-hq</link>
      <pubDate>Wed, 23 Feb 2011 00:00:00 PST</pubDate>
      <author>Alan Hoffman</author>
      <guid>http://blog.cloudant.com/new-cloudant-hq</guid>
      <description>&lt;div style='width: 860px; overflow: auto'&gt;&lt;img src='/images/office-wide2.jpg' style='margin-bottom: -9px' /&gt;&lt;/div&gt;
&lt;p&gt;The number 402 is following me, you could call it my lucky number. And apparently I&amp;#8217;m sharing the luck with my cofounders. I should probably take our investors&amp;#8217; money to Vegas and bet on 402. Back when I first moved to the east coast my first apartment was at 402 Broadway in Cambridge. My office at MIT, where I first met and worked with my cofounders was in Building 26, office 402. When we started Cloudant we set up shop in a small basement office at 402 Highland Ave. in Somerville. Starting to get creepy right? Well, this week we finally moved into our new office space in the south end. We had outgrown the place in Davis Sq. and as much as we are going to miss its horror-movie ambiance (no really, when we moved in that office looked like the set of &amp;#8220;Saw&amp;#8221;) we couldn&amp;#8217;t be more excited about our new digs. Where are they? 580 Harrison Avenue, Suite 402. If I were a man that believed in such things, I would think the universe was trying to tell me something. My colleagues tell me that 402 is an obscure HTTP error code for &amp;#8220;Payment Required.&amp;#8221; Maybe the universe is calling in some IOUs, or maybe it&amp;#8217;s just suggesting that we need to charge more.&lt;/p&gt;

&lt;p&gt;&lt;img src='/images/office2.jpg' alt='' /&gt;&lt;/p&gt;

&lt;p&gt;Anyway, here are a few pictures of the team working in the new space. The new office has exposed brick wall, large windows without bars on them, and enough room for more than three desks. All of these amenities were lacking in the old office.&lt;/p&gt;

&lt;p&gt;&lt;img src='/images/office1.jpg' alt='' /&gt;&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s a big upgrade from our previous place. If you have the time and the inclination, please stop by to say hi. We&amp;#8217;re always happy to chat about CouchDB, startups, complex data problems, NOSQL, and our favorite Twilight Zone episodes. Oh yeah, and if all this sounds enticing (and how could it not?) we&amp;#8217;re looking for a crack devops engineer to join the team. If you are serious about keeping the servers well-oiled, building distributed systems, and providing a great cloud service, apply &lt;a href='http://cloudant.theresumator.com/apply/afm6Q3/SysAdminOperations-Engineer.html'&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src='/images/office3.jpg' alt='' /&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>BigCouch 0.3</title>
      <link>http://blog.cloudant.com/bigcouch-0.3</link>
      <pubDate>Fri, 11 Feb 2011 00:00:00 PST</pubDate>
      <author>Bob Dionne</author>
      <guid>http://blog.cloudant.com/bigcouch-0.3</guid>
      <description>&lt;p&gt;Time sure flies when you&amp;#8217;re having fun. It&amp;#8217;s been a little over three months since the first &lt;a href='https://github.com/cloudant/bigcouch'&gt;BigCouch&lt;/a&gt; release so we thought it might be a good time to package and release a new version. A lot of folks forked this first release and started using it, providing valuable feedback, logging issues and bug reports. We greatly appreciate the effort and hopefully have covered most of the issues. This release sports a major new feature in addition to lots of consolidation and bug fixes.&lt;/p&gt;

&lt;p&gt;BigCouch has several simply architected layers that provide the core functionality. These are now broken out into separate sub-projects that are managed as dependencies by &lt;a href='https://github.com/basho/rebar'&gt;rebar&lt;/a&gt;, along with ibrowse, mochiweb and the other dependencies. This allows these projects to evolve independently and enables BigCouch developers to switch between various branches as needed. We&amp;#8217;ve fixed several bugs and added specs and docs to &lt;a href='https://github.com/cloudant/fabric'&gt;fabric&lt;/a&gt;, which together with &lt;a href='https://github.com/cloudant/rexi'&gt;rexi&lt;/a&gt; provides our distributed CouchDB API. Rexi is actually a very nice RPC like layer that can be easily used standalone if needed.&lt;/p&gt;

&lt;p&gt;We&amp;#8217;ve done a lot to tighten up propagation of errors through the system, reducing the number of &lt;code&gt;dead_shards&lt;/code&gt; errors that occur. For the most part these errors are harmless, often the result of a bad Javascript function in view code. At the suggestion of our operations team we&amp;#8217;ve tagged each request with a unique id which is returned in the &lt;code&gt;HTTP&lt;/code&gt; headers but is also written in the logs. This helps us track errors better as we&amp;#8217;re able to map specific stack traces to API calls. We&amp;#8217;ve also created an in-memory buffer in the &lt;code&gt;rexi&lt;/code&gt; server that is accessible on the back end and maintains a configurable number of errors and stack traces.&lt;/p&gt;

&lt;p&gt;The major feature addition in this release is shard synchronization in the &lt;a href='https://github.com/cloudant/mem3'&gt;mem3&lt;/a&gt; layer. By proactively triggering replications between database shard copies we reduce the amount of time required to restore the proper replica level for all documents after a node outage. Towards this end we&amp;#8217;ve implemented a new lightweight replicator customized for use with shards, and integrated it into &lt;code&gt;mem3&lt;/code&gt;. We saw that this replicator could also be used to replicate the &lt;code&gt;nodes&lt;/code&gt; and &lt;code&gt;shard_db&lt;/code&gt; databases which are used to manage the cluster information, thereby allowing us to not need the heavier weight CouchDB replicator internally. It&amp;#8217;s still new and has some kinks to work out but we wanted to get it into developers hands as soon as we could. We encourage your feedback.&lt;/p&gt;

&lt;p&gt;Last, but surely not least, we&amp;#8217;ve added &lt;a href='http://blog.cloudant.com/bob-newson-and-tim-anglade-join-cloudant'&gt;Robert Newson&lt;/a&gt; to the BigCouch team. He&amp;#8217;s hit the ground running and has already fixed some of the trickier issues with which we&amp;#8217;ve been grappling.&lt;/p&gt;

&lt;p&gt;These are just a few of the items covered in this release; all specific changes are enumerated in the &lt;a href='https://github.com/cloudant/bigcouch/wiki/Release-Notes'&gt;release notes&lt;/a&gt;. You can always build BigCouch straight from the &lt;a href='https://github.com/cloudant/bigcouch'&gt;source&lt;/a&gt;, but for your convenience BigCouch 0.3 is now available via precompiled RPM and .deb packages on the &lt;a href='https://github.com/cloudant/bigcouch/downloads'&gt;downloads&lt;/a&gt; page at Github and as a &lt;a href='https://github.com/cloudant/cloudant_cookbooks/tree/master/bigcouch'&gt;cookbook&lt;/a&gt; for installation via the Opscode Chef platform.&lt;/p&gt;

&lt;p&gt;Thanks for using BigCouch!&lt;/p&gt;
&lt;!-- We get lots of question about the differences between CouchDB and
BigCouch. At the API level there basically aren't other than a few
arising from BigCouch being fully distributed. We've started a
[BigCouch][7] WIKI page where we'll be documenting this. --&gt;</description>
    </item>
    
    <item>
      <title>Some Thoughts on the Couchbase Announcement</title>
      <link>http://blog.cloudant.com/some-thoughts-on-the-couchbase-announcement</link>
      <pubDate>Tue, 08 Feb 2011 00:00:00 PST</pubDate>
      <author>Alan Hoffman</author>
      <guid>http://blog.cloudant.com/some-thoughts-on-the-couchbase-announcement</guid>
      <description>&lt;p&gt;That will teach me to go to sleep before midnight on a weekday.&lt;/p&gt;

&lt;p&gt;I woke up this morning to find a shakeup in the world of NOSQL. &lt;a href='http://www.membase.com/merger-press-release'&gt;CouchOne has merged with Membase&lt;/a&gt; to form &lt;a href='http://www.couchbase.com/'&gt;Couchbase&lt;/a&gt;, “the most comprehensive data management solution for scalable web and mobile applications.” I’ll add mine to the many voices wishing luck to the new company and the communities it supports. We’re excited to see more and more resources being poured into the NOSQL space. Congratulations to Damien, James, and everyone at both companies.&lt;/p&gt;

&lt;p&gt;We’ve been asked if this changes anything at Cloudant. The answer is no. We’ll continue to offer Cloudant’s hosted, managed, scalable data platform. &lt;a href='http://couchdb.apache.org/'&gt;Apache CouchDB&lt;/a&gt; remains an important part of our technology offering; it forms the core data store around which we’ve built our wider platform. We have always been advocates, contributors, and leaders in the CouchDB community and we see no reason to change that. We’ll continue our support for both CouchDB and &lt;a href='https://cloudant.com/#!/solutions/bigcouch'&gt;BigCouch&lt;/a&gt;. We’ll continue to provide our customers and partners with a robust database, search, and analytics platform to power their mission-critical business applications – as we’ve done for the last two years.&lt;/p&gt;

&lt;p&gt;I do want to take issue with one thing said in the &lt;a href='http://www.membase.com/merger-press-release'&gt;press release&lt;/a&gt; for Couchbase. They say,&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Couchbase becomes the only document database capable of safely storing your data&lt;br /&gt;whether stored on a single server, or spread across hundreds.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Some of our customers have billions of documents stored safely on dozens of nodes in datacenters around the world. It’s too soon to say what Couchbase will become, but if you need a safe, scalable, and easy-to-use document storage platform, our technology already provides that today: &lt;a href='https://cloudant.com/#!/solutions'&gt;cloudant.com/solutions&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Alan Hoffman &lt;div class='dim'&gt;Co-founder and CEO, &lt;a href='https://cloudant.com/'&gt;Cloudant&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>SearchApp – Add a Searchbox to your CouchApps and CouchDB Databases in 10 Minutes</title>
      <link>http://blog.cloudant.com/searchapp-add-a-searchbox-to-your-couchapps-and-couchdb-databases-in-10-minutes</link>
      <pubDate>Thu, 03 Feb 2011 00:00:00 PST</pubDate>
      <author>David Hardtke</author>
      <guid>http://blog.cloudant.com/searchapp-add-a-searchbox-to-your-couchapps-and-couchdb-databases-in-10-minutes</guid>
      <description>&lt;p&gt;Recently we released the developer preview of our &lt;a href='http://blog.cloudant.com/developer-preview-cloudant-search-for-couchdb'&gt;full-text indexing and search for Cloudant&amp;#8217;s hosted CouchDB&lt;/a&gt;. Here we will explain how to use a simple CouchApp to add search to your existing CouchApps and CouchDB databases. The goal is to make your data searchable in 10 minutes are less. Start your timers.&lt;/p&gt;

&lt;p&gt;To get this running, you&amp;#8217;ll need 4 things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://git-scm.com/'&gt;Git&lt;/a&gt; version control system&lt;/li&gt;

&lt;li&gt;The &lt;a href='http://couchapp.org/page/installing'&gt;couchapp&lt;/a&gt; command line tool is used to generate code templates in your application and to push your changes to an instance of CouchDB. This has been tested on couchapp version 0.6.1 and higher.&lt;/li&gt;

&lt;li&gt;&lt;a href='https://cloudant.com/#!/solutions/cloud'&gt;Free Cloudant account&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;An existing CouchDB database, CouchApp, or a data importer.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;(Note: CouchApps are JavaScript and HTML5 applications served directly from CouchDB. &lt;code&gt;couchapp&lt;/code&gt; is a command line tool used to create and manage CouchApps.)&lt;/p&gt;

&lt;p&gt;If your CouchDB database is not already hosted at Cloudant, you&amp;#8217;ll need to replicate it to Cloudant. I&amp;#8217;m assuming your CouchDB database or CouchApp (named &lt;code&gt;mydb&lt;/code&gt;) is on your local CouchDB instance (&lt;a href='http://localhost:5984/mydb'&gt;http://localhost:5984/mydb&lt;/a&gt;), and that your Cloudant username/password is &amp;#60;user&amp;#62;/&amp;#60;password&amp;#62;:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='tcsh'&gt;&lt;span class='nv'&gt;$ &lt;/span&gt;curl http://localhost:5984/_replicate -H &lt;span class='s1'&gt;&amp;#39;Content-Type: application/json&amp;#39;&lt;/span&gt; -d &lt;span class='s1'&gt;&amp;#39;{ &amp;quot;source&amp;quot;: &amp;quot;mydb&amp;quot;, &amp;quot;target&amp;quot;: &amp;quot;https://&amp;lt;user&amp;gt;:&amp;lt;pass&amp;gt;@&amp;lt;user&amp;gt;.cloudant.com/mydb&amp;quot;, &amp;quot;create_target&amp;quot;:true}&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Now, you&amp;#8217;ll need to clone the &lt;a href='https://cloudant.com/#!/solutions/cloud'&gt;SearchApp&lt;/a&gt;. To do this, use the &lt;code&gt;git clone&lt;/code&gt; command:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='tcsh'&gt;&lt;span class='nv'&gt;$ &lt;/span&gt;git clone git@github.com:cloudant/SearchApp.git
&lt;span class='nv'&gt;$ &lt;/span&gt;&lt;span class='nb'&gt;cd &lt;/span&gt;SearchApp
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;For convenience, you can make your database the default target for your SearchApp. Modify the file &lt;code&gt;.couchapprc&lt;/code&gt; as follows:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='js'&gt;&lt;span class='p'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;env&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;:&lt;/span&gt;&lt;span class='p'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;default&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;:&lt;/span&gt;&lt;span class='p'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;db&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;:&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;http://&amp;lt;user&amp;gt;:&amp;lt;pass&amp;gt;@&amp;lt;user&amp;gt;.cloudant.com:5984/mydb&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;}}}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Now for the last step. Push your SearchApp on top of your database:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='tcsh'&gt;&lt;span class='nv'&gt;$ &lt;/span&gt;couchapp push
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;If you want to push to a different location that specified in the &lt;code&gt;.couchapprc&lt;/code&gt; file, do:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='tcsh'&gt;&lt;span class='nv'&gt;$ &lt;/span&gt;couchapp push http://&amp;lt;user&amp;gt;:&amp;lt;pass&amp;gt;@&amp;lt;user&amp;gt;.cloudant.com:5984/mydb
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;You should see the following message:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='tcsh'&gt;2011-02-01 11:49:36 &lt;span class='o'&gt;[&lt;/span&gt;INFO&lt;span class='o'&gt;]&lt;/span&gt; Visit your CouchApp here:
http://&amp;lt;user&amp;gt;.cloudant.com:5984/mydb/_design/searchapp/index.html
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Visit that page and you&amp;#8217;ll have a working search box. Now check your watch &amp;#8211; has it been more that 10 minutes? Your searches might come up blank at first if you have a large database. Your database needs to be indexed before it can be searched. The indexing is a distributed Map-Reduce view. You can check the status of indexing using the Cloudant dashboard at:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='tcsh'&gt;https://cloudant.com/#!/dashboard/&amp;lt;user&amp;gt;/mydb/stats
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;(be sure to insert your username in the url).&lt;/p&gt;

&lt;p&gt;For a more details on configuring SearchApp, please look at the &lt;a href='https://github.com/cloudant/SearchApp'&gt;README&lt;/a&gt; file. To configure the indexing strategy, check out the &lt;a href='http://support.cloudant.com/kb/search/search-indexing'&gt;search indexing page&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>MapReduce from the basics to the actually useful (in under 30 minutes)</title>
      <link>http://blog.cloudant.com/mapreduce-from-the-basics-to-the-actually-useful</link>
      <pubDate>Thu, 13 Jan 2011 00:00:00 PST</pubDate>
      <author>Mike Miller</author>
      <guid>http://blog.cloudant.com/mapreduce-from-the-basics-to-the-actually-useful</guid>
      <description>&lt;p&gt;Recently, Tim Anglade culminated his NOSQL World Tour with the release of &lt;a href='http://nosqltapes.com'&gt;the NOSQL Tapes&lt;/a&gt;, a collection of live interviews collected globally. Not only do I find that site aesthetically pleasing (courtesy of our own &lt;a href='http://twitter.com/steadicat'&gt;Steadicat&lt;/a&gt;), but there is a tremendous amount of solid content, from technical discussions to opinions and conjectures from many of the young leaders in the field. I was fortunate to get a bit of Tim’s time when he stopped in Seattle and we recorded a &lt;a href='http://nosqltap.es/8'&gt;longish video&lt;/a&gt; on MapReduce in my lab at UW. While I love the old school feel of a chalk-talk, I must admit I’m pretty embarrassed at how rambling and fragmented my explanations are, not to mention my shoddy use of available board space. Therefore the Physics Professor in me feels obligated to try again, albeit offline this time.&lt;/p&gt;

&lt;h3 id='brief_nosql_taxonomy'&gt;Brief NOSQL Taxonomy&lt;/h3&gt;

&lt;p&gt;To set the MapReduce stage, I’m going to offer a very naive taxonomy of NoSQL data stores (apologies to the experts). I have yet to meet a database that isn’t a key/value store, so let’s focus on some higher level distinction. In particular, let’s focus on the difference between &lt;em&gt;big tables&lt;/em&gt; (BigTable, HBase, Cassandra, etc.) and &lt;em&gt;document store&lt;/em&gt;s (CouchDB, MongoDB). All of these solutions are finding solid acceptance in the wild, so what – if any – difference is there? My one-word answer is &lt;em&gt;flexibility&lt;/em&gt;. Huh, isn’t all NoSQL flexible? Well… yes and no. In my eyes, BigTable and its derivatives excel at one thing in particular: structuring your data for the efficient I/O access that is necessary to get blazing read speeds for large data sets. Somewhat orthogonal, document stores, especially CouchDB, prioritize flexibility. In particular, there is no requirement to define columns, column families, or super columns up front. You simply encapsulate your data as documents and push them into the store. How then, you may ask, can you get efficient queries? MongoDB treats the problem with blazingly fast in-memory table scans and document introspection for index builds, whereas CouchDB takes a different approach with something called incremental MapReduce. I’m going to briefly explain the latter and then show you how it works in action.&lt;/p&gt;

&lt;h3 id='mapreduce_primer'&gt;MapReduce Primer&lt;/h3&gt;

&lt;p&gt;MapReduce is an old design pattern that was recently made famous by Google. There are many different implementations, and I won’t even try to address them all. It suffices to say that MapReduce is all about giving programmers an efficient way to consume data without needing to know how or where it is actually stored. Further, MapReduce excels at traversing datasets that live on more than one machine. It is simple, a bit restrictive, but extremely powerful. I’m going to show you how it works in CouchDB (well, actually in BigCouch hosted on Cloudant.com).&lt;/p&gt;

&lt;p&gt;Broadly speaking, CouchDB (and Cloudant’s BigCouch) use MapReduce as a tool to let you introspect your data and build persistent ‘views’ (indices) for fast query responses. And, oh yeah, it does it incrementally. Let’s examine the pieces in detail:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;View builds.&lt;/strong&gt; The process of scanning over your data to create indices that make queries fast. This step also often performs data normalization.&lt;/li&gt;

&lt;li&gt;&lt;strong&gt;MapReduce.&lt;/strong&gt; The framework by which user code gets executed for index builds.&lt;/li&gt;

&lt;li&gt;&lt;strong&gt;View queries&lt;/strong&gt;. How you get the information out of your indices&lt;/li&gt;

&lt;li&gt;&lt;strong&gt;Incremental.&lt;/strong&gt; When new documents are added or existing documents are modified/removed, you don’t need to rescan your entire dataset. Instead the view engine only rescans the new/modified documents, and deletes the contributions from the deleted/modified documents. It’s a complex implementation, but one that really separates the Couch MapReduce model from, e.g., Hadoop’s or Riak’s implementations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For full details on Cloudant’s implementation of MapReduce, take a look at &lt;a href='http://blog.cloudant.com/dynamo-and-couchdb-clusters'&gt;Dynamo and CouchDB Clusters&lt;/a&gt; and &lt;a href='http://oreillynet.com/pub/e/1760'&gt;Adam’s O’Reilly Webcast&lt;/a&gt;. So what do you actually have to do? Well, you simply need to write one or two functions. The ‘map’ function is required, and the ‘reduce’ is optional. For simple sorting problems (e.g. building a SEO reverse index) map alone suffices. For data aggregation, reduce comes into the picture. CouchDB allows you to write these functions in any language you choose, although JavaScript is the most common. Let’s put some meat on the bones with examples. Below I’m going to show you how to do three of the most common things people do with CouchDB’s MapReduce:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;sort documents based on arbitrary information&lt;/li&gt;

&lt;li&gt;calculate aggregate statistics&lt;/li&gt;

&lt;li&gt;perform a time-series analysis&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id='our_example_problem'&gt;Our Example Problem&lt;/h3&gt;

&lt;p&gt;We are going to load and analyze FAA plane crash data from &lt;a href='http://data.gov/'&gt;data.gov&lt;/a&gt; using Cloudant. If you want to follow along at home, you have two choices.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Use CouchDB replication to copy my db into yours via: &lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='tcsh'&gt;&lt;span class='nv'&gt;$ &lt;/span&gt;curl &lt;span class='s1'&gt;&amp;#39;http://&amp;lt;usr&amp;gt;:&amp;lt;pwd&amp;gt;@&amp;lt;usr&amp;gt;.cloudant.com/_replicate&amp;#39;&lt;/span&gt; -Hcontent-type:application/json -d &lt;span class='s1'&gt;&amp;#39;{&amp;quot;source&amp;quot;:&amp;quot;http://mlmiller.cloudant.com/planes&amp;quot;,&amp;quot;target&amp;quot;:&amp;quot;http://&amp;lt;usr&amp;gt;:&amp;lt;pwd&amp;gt;@&amp;lt;usr&amp;gt;.cloudant.com/planes&amp;quot;,&amp;quot;create_target&amp;quot;:true}&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Repeat from scratch by &lt;a href='http://github.com/mlmiller/examples/tree/master/aviation'&gt;getting the code&lt;/a&gt; from Github.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;(1) is simpler and &lt;em&gt;doesn’t require any special software installed on your machine&lt;/em&gt;. All you need is to have a free account on &lt;a href='http://cloudant.com'&gt;Cloudant&lt;/a&gt;. (2) is a bit more effort but should work with any CouchDB server. If you go with (1), the best way to check the progress is to &lt;a href='http://cloudant.com'&gt;login to your account&lt;/a&gt;, click on your user dashboard (top right) and then click on the newly created ‘planes’ database. If you examine the Stats tab and refresh periodically, you will see the db size increasing, as well as some MapReduce ‘views’ running as the data imports:&lt;/p&gt;

&lt;p&gt;&lt;img src='/images/planes-indexing.png' alt='' /&gt;&lt;/p&gt;

&lt;p&gt;That bar that registers 31.7% is telling you that MapReduce is being used to index your documents in real time without you having to write any code at all. The ‘2839 of 8952’ on the right represents the fraction of freshly added/updated documents that is processed in this current pass, and if you click on ‘show details’ you can see the results of the MapReduce processes on each of the cluster nodes that contain any chunk of your data. That&amp;#8217;s just how easy it is to get your code running, in parallel, in realtime!&lt;/p&gt;

&lt;h3 id='data_import'&gt;Data Import&lt;/h3&gt;

&lt;p&gt;I’ve chosen to import the FAA crash data using my favorite tools: Python and Benoit’s wonderful &lt;a href='http://couchdbkit.org/'&gt;Couchdbkit&lt;/a&gt; library. If you use the Python &lt;a href='https://code.google.com/p/boto/'&gt;Boto&lt;/a&gt; module for AWS, you will feel right at home. In &lt;a href='https://github.com/mlmiller/examples/blob/master/aviation/upload.py'&gt;upload.py&lt;/a&gt;, I use the very handy &lt;code&gt;DictReader&lt;/code&gt; class from Python’s &lt;code&gt;csv&lt;/code&gt; module to parse the &lt;code&gt;AviationData.txt.gz&lt;/code&gt;. &lt;code&gt;DictReader&lt;/code&gt; slurps a line of a CSV (or similarly structured text file) with column headings and gives you back a dictionary. It’s a one-liner to serialize that Python dictionary and push it into Cloudant. If you want to try this yourself the &lt;code&gt;README&lt;/code&gt; file has instructions on installing the Couchdbkit module and executing the &lt;code&gt;upload.py&lt;/code&gt; script, but it just boils down to:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='tcsh'&gt;python upload.py AviationData.txt.gz &lt;span class='s1'&gt;&amp;#39;http://&amp;lt;username&amp;gt;:&amp;lt;password&amp;gt;@&amp;lt;username&amp;gt;.cloudant.com&amp;#39;&lt;/span&gt; planes
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;My inported data lives at &lt;a href='http://mlmiller.cloudant.com/planes'&gt;http://mlmiller.cloudant.com/planes&lt;/a&gt;. One thing to note: you can see that I don’t take any steps to discover the type of the data on import. Instead, we just throw it all into Cloudant and we can sort it out later using MapReduce (_flexible_). Once the data is fully imported, I can login into &lt;a href='https://cloudant.com/'&gt;cloudant.com&lt;/a&gt; and view the ‘planes’ database in the dashboard:&lt;/p&gt;

&lt;p&gt;&lt;img src='/images/planes-stats.png' alt='' /&gt;&lt;/p&gt;

&lt;p&gt;I’ve also gone into the Permissions tab and granted read access to the data:&lt;/p&gt;

&lt;p&gt;&lt;img src='/images/planes-permissions.png' alt='' /&gt;&lt;/p&gt;

&lt;p&gt;Each document contains quite a bit of data, too much to fit onto a single screen shot, in fact:&lt;/p&gt;

&lt;p&gt;&lt;img src='/images/planes-documents.png' alt='' /&gt;&lt;/p&gt;

&lt;p&gt;But the important thing to note is that we have data for nearly 70,000 domestic accidents, spanning the range 1988–2010. If you want to look at a single document from your command line, you can via:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='tcsh'&gt;&lt;span class='nv'&gt;$ &lt;/span&gt;curl -X GET &lt;span class='s1'&gt;&amp;#39;http://&amp;lt;usr&amp;gt;:&amp;lt;pwd&amp;gt;@&amp;lt;usr&amp;gt;.cloudant.com/planes/_all_docs?limit=1&amp;amp;include_docs=true&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;and if you want it pretty printed, my favorite is:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='tcsh'&gt;&lt;span class='nv'&gt;$ &lt;/span&gt;curl -X GET &lt;span class='s1'&gt;&amp;#39;http://&amp;lt;usr&amp;gt;:&amp;lt;pwd&amp;gt;@&amp;lt;usr&amp;gt;.cloudant.com/planes/_all_docs?limit=1&amp;amp;include_docs=true&amp;#39;&lt;/span&gt; | python -m json.tool
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Since I&amp;#8217;ve granted read permissions on mlmiller/planes, you can execute this yourself via:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='tcsh'&gt;&lt;span class='nv'&gt;$ &lt;/span&gt;curl -X GET &lt;span class='s1'&gt;&amp;#39;http://mlmiller.cloudant.com/planes/_all_docs?limit=1&amp;amp;include_docs=true&amp;#39;&lt;/span&gt; | python -m json.tool
&lt;span class='o'&gt;{&lt;/span&gt;
    &lt;span class='s2'&gt;&amp;quot;offset&amp;quot;&lt;/span&gt;: 0,
    &lt;span class='s2'&gt;&amp;quot;rows&amp;quot;&lt;/span&gt;: &lt;span class='o'&gt;[&lt;/span&gt;
        &lt;span class='o'&gt;{&lt;/span&gt;
            &lt;span class='s2'&gt;&amp;quot;doc&amp;quot;&lt;/span&gt;: &lt;span class='o'&gt;{&lt;/span&gt;
                &lt;span class='s2'&gt;&amp;quot;&amp;quot;&lt;/span&gt;: &lt;span class='s2'&gt;&amp;quot;&amp;quot;&lt;/span&gt;,
                &lt;span class='s2'&gt;&amp;quot;Accident Number&amp;quot;&lt;/span&gt;: &lt;span class='s2'&gt;&amp;quot;LAX08CA100&amp;quot;&lt;/span&gt;,
                &lt;span class='s2'&gt;&amp;quot;Air Carrier&amp;quot;&lt;/span&gt;: &lt;span class='s2'&gt;&amp;quot;&amp;quot;&lt;/span&gt;,
                &lt;span class='s2'&gt;&amp;quot;Aircraft Category&amp;quot;&lt;/span&gt;: &lt;span class='s2'&gt;&amp;quot;&amp;quot;&lt;/span&gt;,
                &lt;span class='s2'&gt;&amp;quot;Aircraft Damage&amp;quot;&lt;/span&gt;: &lt;span class='s2'&gt;&amp;quot;Substantial&amp;quot;&lt;/span&gt;,
                &lt;span class='s2'&gt;&amp;quot;Airport Code&amp;quot;&lt;/span&gt;: &lt;span class='s2'&gt;&amp;quot;U42&amp;quot;&lt;/span&gt;,
                &lt;span class='s2'&gt;&amp;quot;Airport Name&amp;quot;&lt;/span&gt;: &lt;span class='s2'&gt;&amp;quot;Salt Lake City Muni 2&amp;quot;&lt;/span&gt;,
                &lt;span class='s2'&gt;&amp;quot;Amateur Built&amp;quot;&lt;/span&gt;: &lt;span class='s2'&gt;&amp;quot;Yes&amp;quot;&lt;/span&gt;,
                &lt;span class='s2'&gt;&amp;quot;Broad Phase of Flight&amp;quot;&lt;/span&gt;: &lt;span class='s2'&gt;&amp;quot;&amp;quot;&lt;/span&gt;,
                &lt;span class='s2'&gt;&amp;quot;Country&amp;quot;&lt;/span&gt;: &lt;span class='s2'&gt;&amp;quot;United States&amp;quot;&lt;/span&gt;,
                &lt;span class='s2'&gt;&amp;quot;Engine Type&amp;quot;&lt;/span&gt;: &lt;span class='s2'&gt;&amp;quot;Reciprocating&amp;quot;&lt;/span&gt;,
                &lt;span class='s2'&gt;&amp;quot;Event Date&amp;quot;&lt;/span&gt;: &lt;span class='s2'&gt;&amp;quot;04/12/2008&amp;quot;&lt;/span&gt;,
                &lt;span class='s2'&gt;&amp;quot;Event Id&amp;quot;&lt;/span&gt;: &lt;span class='s2'&gt;&amp;quot;20080513X00662&amp;quot;&lt;/span&gt;,
                &lt;span class='s2'&gt;&amp;quot;FAR Description&amp;quot;&lt;/span&gt;: &lt;span class='s2'&gt;&amp;quot;&amp;quot;&lt;/span&gt;,
                &lt;span class='s2'&gt;&amp;quot;Injury Severity&amp;quot;&lt;/span&gt;: &lt;span class='s2'&gt;&amp;quot;Non-Fatal&amp;quot;&lt;/span&gt;,
                &lt;span class='s2'&gt;&amp;quot;Investigation Type&amp;quot;&lt;/span&gt;: &lt;span class='s2'&gt;&amp;quot;Accident&amp;quot;&lt;/span&gt;,
                &lt;span class='s2'&gt;&amp;quot;Latitude&amp;quot;&lt;/span&gt;: &lt;span class='s2'&gt;&amp;quot;40.619445&amp;quot;&lt;/span&gt;,
                &lt;span class='s2'&gt;&amp;quot;Location&amp;quot;&lt;/span&gt;: &lt;span class='s2'&gt;&amp;quot;Salt Lake City, UT&amp;quot;&lt;/span&gt;,
                &lt;span class='s2'&gt;&amp;quot;Longitude&amp;quot;&lt;/span&gt;: &lt;span class='s2'&gt;&amp;quot;-111.992777&amp;quot;&lt;/span&gt;,
                &lt;span class='s2'&gt;&amp;quot;Make&amp;quot;&lt;/span&gt;: &lt;span class='s2'&gt;&amp;quot;Questair, Inc.&amp;quot;&lt;/span&gt;,
                &lt;span class='s2'&gt;&amp;quot;Model&amp;quot;&lt;/span&gt;: &lt;span class='s2'&gt;&amp;quot;Venture&amp;quot;&lt;/span&gt;,
                &lt;span class='s2'&gt;&amp;quot;Number of Engines&amp;quot;&lt;/span&gt;: &lt;span class='s2'&gt;&amp;quot;1&amp;quot;&lt;/span&gt;,
                &lt;span class='s2'&gt;&amp;quot;Publication Date&amp;quot;&lt;/span&gt;: &lt;span class='s2'&gt;&amp;quot;05/28/2008&amp;quot;&lt;/span&gt;,
                &lt;span class='s2'&gt;&amp;quot;Purpose of Flight&amp;quot;&lt;/span&gt;: &lt;span class='s2'&gt;&amp;quot;Personal&amp;quot;&lt;/span&gt;,
                &lt;span class='s2'&gt;&amp;quot;Registration Number&amp;quot;&lt;/span&gt;: &lt;span class='s2'&gt;&amp;quot;N36V&amp;quot;&lt;/span&gt;,
                &lt;span class='s2'&gt;&amp;quot;Report Status&amp;quot;&lt;/span&gt;: &lt;span class='s2'&gt;&amp;quot;Probable Cause&amp;quot;&lt;/span&gt;,
                &lt;span class='s2'&gt;&amp;quot;Schedule&amp;quot;&lt;/span&gt;: &lt;span class='s2'&gt;&amp;quot;&amp;quot;&lt;/span&gt;,
                &lt;span class='s2'&gt;&amp;quot;Total Fatal Injuries&amp;quot;&lt;/span&gt;: &lt;span class='s2'&gt;&amp;quot;&amp;quot;&lt;/span&gt;,
                &lt;span class='s2'&gt;&amp;quot;Total Minor Injuries&amp;quot;&lt;/span&gt;: &lt;span class='s2'&gt;&amp;quot;2&amp;quot;&lt;/span&gt;,
                &lt;span class='s2'&gt;&amp;quot;Total Serious Injuries&amp;quot;&lt;/span&gt;: &lt;span class='s2'&gt;&amp;quot;&amp;quot;&lt;/span&gt;,
                &lt;span class='s2'&gt;&amp;quot;Total Uninjured&amp;quot;&lt;/span&gt;: &lt;span class='s2'&gt;&amp;quot;&amp;quot;&lt;/span&gt;,
                &lt;span class='s2'&gt;&amp;quot;Weather Condition&amp;quot;&lt;/span&gt;: &lt;span class='s2'&gt;&amp;quot;VMC&amp;quot;&lt;/span&gt;,
                &lt;span class='s2'&gt;&amp;quot;_id&amp;quot;&lt;/span&gt;: &lt;span class='s2'&gt;&amp;quot;0fedbabcd21f15785750457f83000947&amp;quot;&lt;/span&gt;,
                &lt;span class='s2'&gt;&amp;quot;_rev&amp;quot;&lt;/span&gt;: &lt;span class='s2'&gt;&amp;quot;1-3e9637bb5214c82fc7b29bb4a75e765b&amp;quot;&lt;/span&gt;
            &lt;span class='o'&gt;}&lt;/span&gt;,
            &lt;span class='s2'&gt;&amp;quot;id&amp;quot;&lt;/span&gt;: &lt;span class='s2'&gt;&amp;quot;0fedbabcd21f15785750457f83000947&amp;quot;&lt;/span&gt;,
            &lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;: &lt;span class='s2'&gt;&amp;quot;0fedbabcd21f15785750457f83000947&amp;quot;&lt;/span&gt;,
            &lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;: &lt;span class='o'&gt;{&lt;/span&gt;
                &lt;span class='s2'&gt;&amp;quot;rev&amp;quot;&lt;/span&gt;: &lt;span class='s2'&gt;&amp;quot;1-3e9637bb5214c82fc7b29bb4a75e765b&amp;quot;&lt;/span&gt;
            &lt;span class='o'&gt;}&lt;/span&gt;
        &lt;span class='o'&gt;}&lt;/span&gt;
    &lt;span class='o'&gt;]&lt;/span&gt;,
    &lt;span class='s2'&gt;&amp;quot;total_rows&amp;quot;&lt;/span&gt;: 68388
&lt;span class='o'&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;h3 id='example_1_sort'&gt;Example 1: Sort&lt;/h3&gt;

&lt;p&gt;Now that we have the data, let’s get down to business. Key/Value is great, but I want to be able get find all the documents for a given brand of plane, say Cessna. This is really an inverted index, and is in the absolute sweet spot for MapReduce. We can accomplish this with a ‘map-only’ view that looks like:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='js'&gt;&lt;span class='kd'&gt;function&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nx'&gt;doc&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;
    &lt;span class='nx'&gt;emit&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nx'&gt;doc&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;Make&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='kc'&gt;null&lt;/span&gt;&lt;span class='p'&gt;);&lt;/span&gt;
&lt;span class='p'&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;The MapReduce code is actually stored in the database as part of a view in a design document (see the &lt;a href='http://guide.couchdb.org/editions/1/en/views.html'&gt;CouchDB Book&lt;/a&gt; for more details). My favorite method is to use a client-side tool such as &lt;code&gt;couchapp&lt;/code&gt; or &lt;code&gt;couchdbkit&lt;/code&gt; that allows me to organize &lt;code&gt;map.js&lt;/code&gt; and &lt;code&gt;reduce.js&lt;/code&gt; files according to a filesystem hierarchy and then automatically upload them to the database as a design document. I actually snuck that two-liner into &lt;a href='https://github.com/mlmiller/examples/blob/master/aviation/upload.py#L20'&gt;&lt;code&gt;upload.py&lt;/code&gt;&lt;/a&gt;, where I have:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='py'&gt;&lt;span class='n'&gt;loader&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='n'&gt;FileSystemDocsLoader&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s'&gt;&amp;#39;_design/&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
&lt;span class='n'&gt;loader&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;sync&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;db&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='n'&gt;verbose&lt;/span&gt;&lt;span class='o'&gt;=&lt;/span&gt;&lt;span class='bp'&gt;True&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Those two lines unpack the contents of the &lt;code&gt;_design&lt;/code&gt; directory and build a design document. That directory looks like:&lt;/p&gt;

&lt;p&gt;&lt;img src='/images/folders.png' alt='' /&gt;&lt;/p&gt;

&lt;p&gt;This gives me a design document with the name &lt;code&gt;example&lt;/code&gt;; that contains two views, one called &lt;code&gt;date&lt;/code&gt; and one called &lt;code&gt;make&lt;/code&gt;. You can see the entire design document from the command line via:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='tcsh'&gt;&lt;span class='nv'&gt;$ &lt;/span&gt;curl -X GET http://mlmiller.cloudant.com/planes/_design/example
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;or you can just browse the ‘_design’ code in the file &lt;a href='https://github.com/mlmiller/examples/blob/master/aviation/_design/example/views/make/map.js'&gt;&lt;code&gt;_design/example/views/make/map.js&lt;/code&gt;&lt;/a&gt;. The code looks like this:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='js'&gt;&lt;span class='kd'&gt;function&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nx'&gt;doc&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;
    &lt;span class='nx'&gt;emit&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nx'&gt;doc&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;Make&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='mi'&gt;1&lt;/span&gt;&lt;span class='p'&gt;);&lt;/span&gt;
&lt;span class='p'&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;The &lt;code&gt;emit()&lt;/code&gt; function generates a key/value pair that gets sorted according to CouchDB&amp;#8217;s deterministic &lt;a href='http://wiki.apache.org/couchdb/View_collation#Collation_Specification'&gt;collation order&lt;/a&gt;. These key/value pairs are either stored directly in the view index, or passed through the reducer first (see below). Don’t worry about the second argument to the emit method, that’s for the the reduce phase and we don’t need that for a basic sort. The moment that we upload that design document to Cloudant, the index is kept up to date automatically. That’s quite different than the default CouchDB behavior, but it’s a nice optimization to make sure that the query response is snappy.&lt;/p&gt;

&lt;p&gt;Query (finally!). Let’s find all of the documents (‘rows’) that have &lt;code&gt;doc.Make==&amp;quot;Cessna&amp;quot;&lt;/code&gt;. Since we emitted &lt;code&gt;doc.Make&lt;/code&gt; in our map code, &lt;code&gt;doc.Make&lt;/code&gt; is therefore the ‘key’ for this index, and that means we get snappy responses to queries like:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='tcsh'&gt;&lt;span class='nv'&gt;$ &lt;/span&gt;curl -X GET &lt;span class='s1'&gt;&amp;#39;http://mlmiller.cloudant.com/planes/_design/example/_view/make?reduce=false&amp;amp;key=&amp;quot;Cessna&amp;quot;&amp;amp;limit=10&amp;#39;&lt;/span&gt;
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;total_rows&amp;quot;&lt;/span&gt;:68387,&lt;span class='s2'&gt;&amp;quot;offset&amp;quot;&lt;/span&gt;:13905,&lt;span class='s2'&gt;&amp;quot;rows&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;id&amp;quot;&lt;/span&gt;:&lt;span class='s2'&gt;&amp;quot;0fedbabcd21f15785750457f8300324c&amp;quot;&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='s2'&gt;&amp;quot;Cessna&amp;quot;&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:1&lt;span class='o'&gt;}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;id&amp;quot;&lt;/span&gt;:&lt;span class='s2'&gt;&amp;quot;0fedbabcd21f15785750457f83003a2f&amp;quot;&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='s2'&gt;&amp;quot;Cessna&amp;quot;&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:1&lt;span class='o'&gt;}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;id&amp;quot;&lt;/span&gt;:&lt;span class='s2'&gt;&amp;quot;0fedbabcd21f15785750457f830060ec&amp;quot;&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='s2'&gt;&amp;quot;Cessna&amp;quot;&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:1&lt;span class='o'&gt;}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;id&amp;quot;&lt;/span&gt;:&lt;span class='s2'&gt;&amp;quot;0fedbabcd21f15785750457f83006bfb&amp;quot;&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='s2'&gt;&amp;quot;Cessna&amp;quot;&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:1&lt;span class='o'&gt;}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;id&amp;quot;&lt;/span&gt;:&lt;span class='s2'&gt;&amp;quot;0fedbabcd21f15785750457f8300a5ae&amp;quot;&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='s2'&gt;&amp;quot;Cessna&amp;quot;&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:1&lt;span class='o'&gt;}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;id&amp;quot;&lt;/span&gt;:&lt;span class='s2'&gt;&amp;quot;0fedbabcd21f15785750457f8300e15d&amp;quot;&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='s2'&gt;&amp;quot;Cessna&amp;quot;&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:1&lt;span class='o'&gt;}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;id&amp;quot;&lt;/span&gt;:&lt;span class='s2'&gt;&amp;quot;0fedbabcd21f15785750457f830162b7&amp;quot;&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='s2'&gt;&amp;quot;Cessna&amp;quot;&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:1&lt;span class='o'&gt;}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;id&amp;quot;&lt;/span&gt;:&lt;span class='s2'&gt;&amp;quot;0fedbabcd21f15785750457f8301a3a4&amp;quot;&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='s2'&gt;&amp;quot;Cessna&amp;quot;&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:1&lt;span class='o'&gt;}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;id&amp;quot;&lt;/span&gt;:&lt;span class='s2'&gt;&amp;quot;0fedbabcd21f15785750457f8301a54e&amp;quot;&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='s2'&gt;&amp;quot;Cessna&amp;quot;&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:1&lt;span class='o'&gt;}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;id&amp;quot;&lt;/span&gt;:&lt;span class='s2'&gt;&amp;quot;0fedbabcd21f15785750457f83058740&amp;quot;&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='s2'&gt;&amp;quot;Cessna&amp;quot;&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:1&lt;span class='o'&gt;}&lt;/span&gt;
&lt;span class='o'&gt;]}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;The full list of query options is &lt;a href='http://wiki.apache.org/couchdb/HTTP_view_API#Querying_Options'&gt;given here&lt;/a&gt;, but really there are only a handful of options I typically use. For this query, if you remove the &lt;code&gt;limit&lt;/code&gt; argument you will get the entire list of crashes with a Cessna involved. If you want to do some fun statistics, you can try:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='tcsh'&gt;&lt;span class='nv'&gt;$ &lt;/span&gt;curl -X GET &lt;span class='s1'&gt;&amp;#39;http://mlmiller.cloudant.com/planes/_design/example/_view/make?reduce=false&amp;amp;key=&amp;quot;Airbus&amp;quot;&amp;#39;&lt;/span&gt; | wc -l 15
&lt;span class='nv'&gt;$ &lt;/span&gt;curl -X GET &lt;span class='s1'&gt;&amp;#39;http://mlmiller.cloudant.com/planes/_design/example/_view/make?reduce=false&amp;amp;key=&amp;quot;Boeing&amp;quot;&amp;#39;&lt;/span&gt; | wc -l 773
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Well that’s interesting! But wait, isn’t there a more efficient way to calculate statistics than slurping the entire set of Boeing lines to the client and doing a client-side count? You bet, and that’s where reduce comes in.&lt;/p&gt;

&lt;h3 id='example_2_data_aggregation'&gt;Example 2: Data Aggregation&lt;/h3&gt;

&lt;p&gt;Now we want to go beyond simple sorts and aggregate to find the total number of crashes for different types of planes. Reduce is perfect for this, and that’s why we did &lt;code&gt;emit(doc.Make,1)&lt;/code&gt; in &lt;code&gt;map.js&lt;/code&gt;. If you look at the corresponding &lt;a href='https://github.com/mlmiller/examples/blob/master/aviation/_design/example/views/make/reduce.js'&gt;&lt;code&gt;reduce.js&lt;/code&gt;&lt;/a&gt; file for that view you’ll see nothing more than: &lt;code&gt;_sum&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;What the heck is that? Well there are certain aggregation tasks that are simply so common (count, sum, average, min, max, etc.) that we have coded them up in erlang and pushed them into the database. Cloudant has an ever growing number of built-in reduces (_builtins_), and using a builtin is always faster and less error prone than writing it yourself. As an avid user, I can admit that I haven’t used a non-builtin reduce in at least 9 months. So the &lt;code&gt;_sum&lt;/code&gt; that we use here is simply going to add up the numbers that we emitted as the 2nd argument to &lt;code&gt;emit()&lt;/code&gt; in the &lt;code&gt;map.js&lt;/code&gt; function. Now we can answer the Boeing vs. Airbus question without any client side work via:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='tcsh'&gt;&lt;span class='nv'&gt;$ &lt;/span&gt;curl -X GET &lt;span class='s1'&gt;&amp;#39;http://mlmiller.cloudant.com/planes/_design/example/_view/make?key=&amp;quot;Boeing&amp;quot;&amp;#39;&lt;/span&gt;
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;rows&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:null,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:771&lt;span class='o'&gt;}&lt;/span&gt;
&lt;span class='o'&gt;]}&lt;/span&gt;
&lt;span class='nv'&gt;$ &lt;/span&gt;curl -X GET &lt;span class='s1'&gt;&amp;#39;http://mlmiller.cloudant.com/planes/_design/example/_view/make?key=&amp;quot;Airbus&amp;quot;&amp;#39;&lt;/span&gt;
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;rows&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:null,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:13&lt;span class='o'&gt;}&lt;/span&gt;
&lt;span class='o'&gt;]}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Check that out! Hmm, now suppose I want to find the total number of accidents, I can then just do:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='tcsh'&gt;&lt;span class='nv'&gt;$ &lt;/span&gt;curl -X GET &lt;span class='s1'&gt;&amp;#39;http://mlmiller.cloudant.com/planes/_design/example/_view/make&amp;#39;&lt;/span&gt;
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;rows&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:null,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:68387&lt;span class='o'&gt;}&lt;/span&gt;
&lt;span class='o'&gt;]}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Very cool, and if I want to make a graph of how they plot out vs manufacture I can add the &lt;code&gt;group=true&lt;/code&gt; option:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='tcsh'&gt;&lt;span class='nv'&gt;$ &lt;/span&gt;curl -X GET &lt;span class='s1'&gt;&amp;#39;http://mlmiller.cloudant.com/planes/_design/example/_view/make?group=true&amp;#39;&lt;/span&gt;
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;rows&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='s2'&gt;&amp;quot;&amp;quot;&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:53&lt;span class='o'&gt;}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='s2'&gt;&amp;quot;107.5 Flying Corporation&amp;quot;&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:1&lt;span class='o'&gt;}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='s2'&gt;&amp;quot;1200&amp;quot;&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:1&lt;span class='o'&gt;}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='s2'&gt;&amp;quot;1977 COLFER-CHAN&amp;quot;&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:1&lt;span class='o'&gt;}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='s2'&gt;&amp;quot;1ST FTR GP&amp;quot;&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:1&lt;span class='o'&gt;}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='s2'&gt;&amp;quot;2000 McCoy&amp;quot;&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:1&lt;span class='o'&gt;}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='s2'&gt;&amp;quot;2001 MCGIRL&amp;quot;&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:1&lt;span class='o'&gt;}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='s2'&gt;&amp;quot;2003 Nash&amp;quot;&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:1&lt;span class='o'&gt;}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='s2'&gt;&amp;quot;2007 Savage Air LLC&amp;quot;&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:1&lt;span class='o'&gt;}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='s2'&gt;&amp;quot;67 FLYING DUTCHMAN&amp;quot;&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:1&lt;span class='o'&gt;}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='s2'&gt;&amp;quot;85 MANISTA&amp;quot;&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:1&lt;span class='o'&gt;}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='s2'&gt;&amp;quot;A Pair of Jacks&amp;quot;&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:1&lt;span class='o'&gt;}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='s2'&gt;&amp;quot;A. H. GETTINGS&amp;quot;&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:1&lt;span class='o'&gt;}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='s2'&gt;&amp;quot;A. LE FRANCOIS&amp;quot;&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:1&lt;span class='o'&gt;}&lt;/span&gt;,
…
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;(truncated because it’s a looong list!)&lt;/p&gt;

&lt;p&gt;Ok, so aggregation seems pretty straightforward. Now let’s go the last step to time-series.&lt;/p&gt;

&lt;h3 id='example_3_time_series_analysis'&gt;Example 3: Time Series Analysis&lt;/h3&gt;

&lt;p&gt;Let’s get a bit more numerical and ask, what’s the distribution of crashes and fatalities vs time. That’s what the &lt;code&gt;date&lt;/code&gt; view is for. If you inspect any of our crash documents you will see that they have a two other important fields: &lt;code&gt;Event Date&lt;/code&gt; and &lt;code&gt;Total Fatal Injuries&lt;/code&gt;. Let’s create an index that allows us to answer time-based queries about both the number of accidents and the number of fatalities. While a bit morbid, it’s good to know what the odds are! This example is a bit more complex because we are going to use an array for both arguments of &lt;code&gt;emit()&lt;/code&gt;. Take a look at the code in the &lt;a href='https://github.com/mlmiller/examples/blob/master/aviation/_design/example/views/date/map.js'&gt;&lt;code&gt;map.js&lt;/code&gt;&lt;/a&gt;:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='js'&gt;&lt;span class='kd'&gt;function&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nx'&gt;doc&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;
    &lt;span class='kd'&gt;var&lt;/span&gt; &lt;span class='nx'&gt;then&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='k'&gt;new&lt;/span&gt; &lt;span class='nb'&gt;Date&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nb'&gt;Date&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;parse&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nx'&gt;doc&lt;/span&gt;&lt;span class='p'&gt;[&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;Event Date&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;]));&lt;/span&gt;
    &lt;span class='kd'&gt;var&lt;/span&gt; &lt;span class='nx'&gt;fatalities&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='mi'&gt;0&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
    &lt;span class='k'&gt;if&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nx'&gt;doc&lt;/span&gt;&lt;span class='p'&gt;[&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;Total Fatal Injuries&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;]&lt;/span&gt;&lt;span class='o'&gt;!=&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;
        &lt;span class='nx'&gt;fatalities&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nb'&gt;parseInt&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nx'&gt;doc&lt;/span&gt;&lt;span class='p'&gt;[&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;Total Fatal Injuries&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;]);&lt;/span&gt;
    &lt;span class='p'&gt;}&lt;/span&gt;
    &lt;span class='nx'&gt;emit&lt;/span&gt;&lt;span class='p'&gt;([&lt;/span&gt;&lt;span class='nx'&gt;then&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;getFullYear&lt;/span&gt;&lt;span class='p'&gt;(),&lt;/span&gt; &lt;span class='nx'&gt;then&lt;/span&gt;&lt;span class='p'&gt;.&lt;/span&gt;&lt;span class='nx'&gt;getMonth&lt;/span&gt;&lt;span class='p'&gt;()],&lt;/span&gt; &lt;span class='p'&gt;[&lt;/span&gt;&lt;span class='mi'&gt;1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;fatalities&lt;/span&gt;&lt;span class='p'&gt;]);&lt;/span&gt;
&lt;span class='p'&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;This is a bit more complex because we do some processing of the data. In line #2 we unpack the &lt;code&gt;Event Date&lt;/code&gt; variable into a JavaScript Date object, very handy. I find myself using &lt;code&gt;new Date(Date.parse(some_weird_timestamp))&lt;/code&gt; all the time. Line #6 simply casts our fatalities info into an integer. The magic is in &lt;code&gt;emit&lt;/code&gt;, where we use JavaScript arrays &lt;code&gt;[]&lt;/code&gt; for both the key and the value. Then, for reduce we use good ol’ &lt;code&gt;_sum&lt;/code&gt;. One of Cloudant’s additional builtins is a &lt;code&gt;_sum&lt;/code&gt; that works on arrays, very handy. Now to query this index we get rows that are sorted by year, then month. The index looks like:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='tcsh'&gt;&lt;span class='nv'&gt;$ &lt;/span&gt;curl -X GET &lt;span class='s1'&gt;&amp;#39;http://mlmiller.cloudant.com/planes/_design/example/_view/date?group_level=2&amp;#39;&lt;/span&gt; | more
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;rows&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1982,0&lt;span class='o'&gt;]&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;207,185&lt;span class='o'&gt;]}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1982,1&lt;span class='o'&gt;]&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;232,96&lt;span class='o'&gt;]}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1982,2&lt;span class='o'&gt;]&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;280,95&lt;span class='o'&gt;]}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1982,3&lt;span class='o'&gt;]&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;303,113&lt;span class='o'&gt;]}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1982,4&lt;span class='o'&gt;]&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;387,133&lt;span class='o'&gt;]}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1982,5&lt;span class='o'&gt;]&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;349,106&lt;span class='o'&gt;]}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1982,6&lt;span class='o'&gt;]&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;433,283&lt;span class='o'&gt;]}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1982,7&lt;span class='o'&gt;]&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;399,96&lt;span class='o'&gt;]}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1982,8&lt;span class='o'&gt;]&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;332,119&lt;span class='o'&gt;]}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1982,9&lt;span class='o'&gt;]&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;239,129&lt;span class='o'&gt;]}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1982,10&lt;span class='o'&gt;]&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;224,134&lt;span class='o'&gt;]}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1982,11&lt;span class='o'&gt;]&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;208,96&lt;span class='o'&gt;]}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1983,0&lt;span class='o'&gt;]&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;199,102&lt;span class='o'&gt;]}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1983,1&lt;span class='o'&gt;]&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;210,72&lt;span class='o'&gt;]}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1983,2&lt;span class='o'&gt;]&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;264,91&lt;span class='o'&gt;]}&lt;/span&gt;,
…
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;So, e.g., 1982 month 0 (January) had 207 crashes and 185 fatalities. What was that &lt;code&gt;group_level&lt;/code&gt; command? Let’s try changing it:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='tcsh'&gt;&lt;span class='nv'&gt;$ &lt;/span&gt;curl -X GET &lt;span class='s1'&gt;&amp;#39;http://mlmiller.cloudant.com/planes/_design/example/_view/date?group_level=1&amp;#39;&lt;/span&gt; | more
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;rows&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1982&lt;span class='o'&gt;]&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;3593,1585&lt;span class='o'&gt;]}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1983&lt;span class='o'&gt;]&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;3556,1273&lt;span class='o'&gt;]}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1984&lt;span class='o'&gt;]&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;3457,1229&lt;span class='o'&gt;]}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1985&lt;span class='o'&gt;]&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;3096,1648&lt;span class='o'&gt;]}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1986&lt;span class='o'&gt;]&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;2880,1180&lt;span class='o'&gt;]}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1987&lt;span class='o'&gt;]&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;2828,1237&lt;span class='o'&gt;]}&lt;/span&gt;,
…
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Well that’s interesting! &lt;code&gt;group_level=1&lt;/code&gt; vs &lt;code&gt;2&lt;/code&gt; has a big effect: with &lt;code&gt;group_level=2&lt;/code&gt; we get the full granularity/dimensionality of the array we used for the key (first argument to &lt;code&gt;emit&lt;/code&gt;). But we can, at query time, reduce even further by integrating over month! Very cool, and the gory details are few: &lt;code&gt;group_level&lt;/code&gt; runs between &lt;code&gt;0&lt;/code&gt; and &lt;code&gt;length(key)&lt;/code&gt;, so in this case valid values are 0, 1, 2. If we specify &lt;code&gt;group_level=0&lt;/code&gt;, we’ll get sum statistics over the entire date range:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='tcsh'&gt;&lt;span class='nv'&gt;$ &lt;/span&gt;curl -X GET &lt;span class='s1'&gt;&amp;#39;http://mlmiller.cloudant.com/planes/_design/example/_view/date?group_level=0&amp;#39;&lt;/span&gt;
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;rows&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:null,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;68387,38652&lt;span class='o'&gt;]}&lt;/span&gt;
&lt;span class='o'&gt;]}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Awesome. And therein lies the power of using MapReduce for an efficient index build. With Cloudant you don’t need to install any software, you simply use the cloud hosted cluster to run your code. If you think about it, all we really had to do was write 9 lines of javascript for the map method, and no original code for the reduce method. We can use this same exact index to query for a given date range, say 1994:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='tcsh'&gt;&lt;span class='nv'&gt;$ &lt;/span&gt;curl -X GET &lt;span class='s1'&gt;&amp;#39;http://mlmiller.cloudant.com/planes/_design/example/_view/date?group_level=2&amp;amp;startkey=\[1994\]&amp;amp;endkey=\[1995\]&amp;#39;&lt;/span&gt;
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;rows&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1994,0&lt;span class='o'&gt;]&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;116,60&lt;span class='o'&gt;]}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1994,1&lt;span class='o'&gt;]&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;142,42&lt;span class='o'&gt;]}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1994,2&lt;span class='o'&gt;]&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;191,67&lt;span class='o'&gt;]}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1994,3&lt;span class='o'&gt;]&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;179,72&lt;span class='o'&gt;]}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1994,4&lt;span class='o'&gt;]&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;224,74&lt;span class='o'&gt;]}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1994,5&lt;span class='o'&gt;]&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;223,98&lt;span class='o'&gt;]}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1994,6&lt;span class='o'&gt;]&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;267,131&lt;span class='o'&gt;]}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1994,7&lt;span class='o'&gt;]&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;260,101&lt;span class='o'&gt;]}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1994,8&lt;span class='o'&gt;]&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;212,200&lt;span class='o'&gt;]}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1994,9&lt;span class='o'&gt;]&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;169,129&lt;span class='o'&gt;]}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1994,10&lt;span class='o'&gt;]&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;131,79&lt;span class='o'&gt;]}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1994,11&lt;span class='o'&gt;]&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;143,130&lt;span class='o'&gt;]}&lt;/span&gt;
&lt;span class='o'&gt;]}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;or if we want to do can turn off the reduce in the query and get all of the crashes from a given year/month combo:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='tcsh'&gt;&lt;span class='nv'&gt;$ &lt;/span&gt;curl -X GET &lt;span class='s1'&gt;&amp;#39;http://mlmiller.cloudant.com/planes/_design/example/_view/date?key=\[1994,4\]&amp;amp;reduce=false&amp;#39;&lt;/span&gt; | more
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;total_rows&amp;quot;&lt;/span&gt;:68387,&lt;span class='s2'&gt;&amp;quot;offset&amp;quot;&lt;/span&gt;:34959,&lt;span class='s2'&gt;&amp;quot;rows&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;id&amp;quot;&lt;/span&gt;:&lt;span class='s2'&gt;&amp;quot;88601d815897032516f87f0c510c7c60&amp;quot;&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1994,4&lt;span class='o'&gt;]&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1,1&lt;span class='o'&gt;]}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;id&amp;quot;&lt;/span&gt;:&lt;span class='s2'&gt;&amp;quot;88601d815897032516f87f0c510c87b7&amp;quot;&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1994,4&lt;span class='o'&gt;]&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1,0&lt;span class='o'&gt;]}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;id&amp;quot;&lt;/span&gt;:&lt;span class='s2'&gt;&amp;quot;88601d815897032516f87f0c510c951a&amp;quot;&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1994,4&lt;span class='o'&gt;]&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1,2&lt;span class='o'&gt;]}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;id&amp;quot;&lt;/span&gt;:&lt;span class='s2'&gt;&amp;quot;88601d815897032516f87f0c510c9b0a&amp;quot;&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1994,4&lt;span class='o'&gt;]&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1,0&lt;span class='o'&gt;]}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;id&amp;quot;&lt;/span&gt;:&lt;span class='s2'&gt;&amp;quot;88601d815897032516f87f0c510c9bbb&amp;quot;&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1994,4&lt;span class='o'&gt;]&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1,0&lt;span class='o'&gt;]}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;id&amp;quot;&lt;/span&gt;:&lt;span class='s2'&gt;&amp;quot;88601d815897032516f87f0c510c9c15&amp;quot;&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1994,4&lt;span class='o'&gt;]&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1,1&lt;span class='o'&gt;]}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;id&amp;quot;&lt;/span&gt;:&lt;span class='s2'&gt;&amp;quot;88601d815897032516f87f0c510c9d6d&amp;quot;&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1994,4&lt;span class='o'&gt;]&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1,0&lt;span class='o'&gt;]}&lt;/span&gt;,
&lt;span class='o'&gt;{&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;id&amp;quot;&lt;/span&gt;:&lt;span class='s2'&gt;&amp;quot;88601d815897032516f87f0c510ca925&amp;quot;&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;key&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1994,4&lt;span class='o'&gt;]&lt;/span&gt;,&lt;span class='s2'&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class='o'&gt;[&lt;/span&gt;1,0&lt;span class='o'&gt;]}&lt;/span&gt;,
…
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Wow, handy! And if you want to really blow your mind, add the query-string parameter &lt;code&gt;?include_docs=true&lt;/code&gt; to get the full documents themselves.&lt;/p&gt;

&lt;h3 id='summary'&gt;Summary&lt;/h3&gt;

&lt;p&gt;There’s a lot of power in MapReduce, and I hope I’ve given you enough to get your hands dirty running it an an extremely simple way using a hosted service. If you have more questions, there are lots of examples on the &lt;a href='http://wiki.apache.org/couchdb/'&gt;CouchDB wiki&lt;/a&gt; or on the (&lt;a href='https://cloudant.tenderapp.com'&gt;Cloudant support center&lt;/a&gt;). But the rule of thumb is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;sort:&lt;/strong&gt; map only&lt;/li&gt;

&lt;li&gt;&lt;strong&gt;aggregate:&lt;/strong&gt; use a &lt;code&gt;_sum&lt;/code&gt; reduce + &lt;code&gt;group_level&lt;/code&gt;&lt;/li&gt;

&lt;li&gt;&lt;strong&gt;time-series:&lt;/strong&gt; use an array of &lt;code&gt;[year, month, day, …]&lt;/code&gt; + &lt;code&gt;group_level&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the next post, we’ll show you how to link Cloudant MapReduce views with builtin full-text/numerical search for killer data visualizations.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Developer Preview: Cloudant Search for CouchDB</title>
      <link>http://blog.cloudant.com/developer-preview-cloudant-search-for-couchdb</link>
      <pubDate>Tue, 11 Jan 2011 00:00:00 PST</pubDate>
      <author>David Hardtke</author>
      <guid>http://blog.cloudant.com/developer-preview-cloudant-search-for-couchdb</guid>
      <description>&lt;p&gt;CouchDB is a compelling choice for database-backed web apps and analytics applications. Cloudant’s hosted CouchDB service adds scaling, redundancy, and fault-tolerance to CouchDB. Today we are releasing a new feature for developers to try out: full text indexing and search.&lt;/p&gt;

&lt;p&gt;There are several products that implement search for CouchDB as external services (&lt;a href='http://github.com/rnewson/couchdb-lucene'&gt;couchdb-lucene&lt;/a&gt; and &lt;a href='http://www.elasticsearch.com/'&gt;ElasticSearch&lt;/a&gt;). Like these, our full text search uses Lucene query syntax and is based on Lucene. For Cloudant search, however, the search application is directly integrated into the Cloudant CouchDB database. This has several distinct advantages over other Lucene based search products:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Real-time Search.&lt;/strong&gt; Search results reflect state of database at moment it is searched. Little to no latency on document additions, changes, or deletions.&lt;/li&gt;

&lt;li&gt;&lt;strong&gt;Indexing and Search using all valid JSON types.&lt;/strong&gt; In Lucene, the search terns are required to be strings. This is especially problematic for date range and numerical range searches. With Cloudant search, the tokens can be any valid JSON type (string, number, object, array, boolean, null).&lt;/li&gt;

&lt;li&gt;&lt;strong&gt;Fault-tolerance and redundancy.&lt;/strong&gt; The search indices are stored on the same nodes as their parent documents.&lt;/li&gt;

&lt;li&gt;&lt;strong&gt;Little to no setup and configuration.&lt;/strong&gt; For basic search, the procedure is upload documents, enable search, search documents using REST interface.&lt;/li&gt;

&lt;li&gt;&lt;strong&gt;Scalability.&lt;/strong&gt; Cloudant Core is designed to be horizontally scalable document store. Cloudant Search is a horizontally scalable search product.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Under the hood, our search consists of two parts. The first step is the creation of a &lt;em&gt;reverse index&lt;/em&gt;, or &lt;em&gt;posting list&lt;/em&gt;, for your documents. This reverse index maps terms to the documents in which they appear. We have implemented document indexing as a MapReduce view using &lt;a href='https://github.com/cloudant/couchjava'&gt;couchjava&lt;/a&gt;, our &lt;a href='http://blog.cloudant.com/java-language-map-reduce-views'&gt;Java language view server for CouchDB&lt;/a&gt;. This allows for usage of custom application-specific Lucene analyzers written in Java. In fact, your existing Lucene analyzers can be imported directly into Cloudant. If you prefer, you can write your document indexer in Javascript as long as you write a MapReduce view using the correct format (in a later blog post, we’ll show how our search application can be used for ad-hoc queries of your CouchDB database).&lt;/p&gt;

&lt;p&gt;The second part of Cloudant search is a RESTful API that takes your search query and performs the necessary boolean logic to return the most relevant documents.&lt;/p&gt;

&lt;p&gt;What is Cloudant search good for? Here are some applications that are easy (and cheap) to build using Cloudant full text indexing and search:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Searchable Real Time Catalog.&lt;/strong&gt; If you are starting the next Ebay, build it using Cloudant. We combine full text search and numerical range queries.&lt;/li&gt;

&lt;li&gt;&lt;strong&gt;Document Discovery by the Hour.&lt;/strong&gt; If you have a collection of documents that you wish to search through but don’t need to archive, you can upload them to Cloudant, enable search, run your queries, and delete the database.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Currently, the beta version of Cloudant search is available to all hosted customers with paid accounts (including users of the &lt;a href='http://addons.heroku.com/cloudant'&gt;Cloudant Heroku Addon&lt;/a&gt;). The version of the search product we are rolling out today is designed for smaller databases (less that a few gigabytes). An enhanced version that uses distributed search for larger databases will be available soon. The feature is free, but the search index counts against your data storage quota and the search queries count against your query quotas.&lt;/p&gt;

&lt;p&gt;A technical description of the search API can be found on the &lt;a href='http://support.cloudant.com/faqs/search/search-api'&gt;Search API page&lt;/a&gt;. Instructions for making your databases searchable can be found on the &lt;a href='http://support.cloudant.com/faqs/search/search-indexing'&gt;Search Indexing page&lt;/a&gt;. Please submit your questions and suggestions to our &lt;a href='http://support.cloudant.com/discussion/new'&gt;discussion forum&lt;/a&gt;. If your application requires advanced indexing or search capabilities, please contact us for a quote on a custom solution. Please &lt;a href='https://cloudant.com/#!/support'&gt;contact us&lt;/a&gt; for further information.&lt;/p&gt;

&lt;p&gt;Over the next weeks, we’ll be posting tutorials on various ways the search can be used for web applications and ad-hoc analytics. Please stay tuned.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Bob Newson and Tim Anglade Join Cloudant!</title>
      <link>http://blog.cloudant.com/bob-newson-and-tim-anglade-join-cloudant</link>
      <pubDate>Wed, 05 Jan 2011 00:00:00 PST</pubDate>
      <author>Alan Hoffman</author>
      <guid>http://blog.cloudant.com/bob-newson-and-tim-anglade-join-cloudant</guid>
      <description>&lt;p&gt;It&amp;#8217;s a huge day here Cloudant HQ; we are very excited to announce the two newest additions to our team: Bob Newson and Tim Anglade.&lt;/p&gt;

&lt;p&gt;&lt;img src='/images/tim.jpg' alt='' /&gt;&lt;/p&gt;

&lt;p&gt;Tim Anglade certainly needs no introduction, at least in the world of NOSQL. I first met Tim here in Boston back in early 2009 when he gave the keynote at the &amp;#8220;NOSQL Live&amp;#8221; conference we cosponsored with 10Gen. Since that time, Tim has been a tireless promoter, interlocutor, and sometimes skeptic of all things NOSQL. This past year, he organized the &lt;a href='http://nosqlsummer.org/'&gt;NOSQL Summer&lt;/a&gt; reading group that had participation from more than 35 cities in 20 countries around the world. Since then he has been globetrotting on his &amp;#8220;NOSQL World Tour,&amp;#8221; organizing and promoting events large and small, and working on the NoSQL Tapes, a series of conversations with domain experts, thought-leaders, trailblazers, and Cloudant founders. Tim will be moving from his home country of France to join us here at Cloudant HQ in Boston (in January! buy a thick parka Tim.) Tim will be taking on various challenges at Cloudant including developer advocacy, community development, customer outreach and support, technical writing, and directing our social media efforts. We&amp;#8217;re basically piling onto Tim all the stuff that we have never been able to do well. This means that the blog you&amp;#8217;re reading is about to become much more exciting and useful. Please join us in welcoming Tim by directing all your questions and complaints to &lt;a href='mailto:tim@cloudant.com'&gt;tim@cloudant.com&lt;/a&gt;. You should also follow him on Twitter: &lt;a href='http://twitter.com/timanglade'&gt;@timanglade&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src='/images/robert.jpg' alt='' /&gt;&lt;/p&gt;

&lt;p&gt;Many of you already know Bob Newson from his prolific work with CouchDB. Bob has been a contributor on the project since 2008. Among his countless contributions to that project is the CouchDB-lucene extension, which provides full-text indexing capabilities. Bob is an expert in distributed systems, big data processing, and erlang. His official title at Cloudant will be &amp;#8216;Senior Database Engineer,&amp;#8217; but unofficially we&amp;#8217;re already referring to him as the resident &amp;#8216;super-hard-problem solver&amp;#8217;. He&amp;#8217;ll be putting his software expertise to good use building new features for Cloudant and BigCouch, and streamlining our systems to make them faster, stronger, and more reliable. For now, Bob will continue to live and work from Windsor in his native land of England (God Save The Queen!) which is nice, because he&amp;#8217;ll be able to provide early morning support while those of us in The States are still sleeping soundly. In his free time, Bob enjoys reading about Paxos and drinks with sparklers in them. Welcome to the team Bob! We couldn&amp;#8217;t be more excited to have you on board.&lt;/p&gt;

&lt;p&gt;P.S. – The pop-culture nerd in me would be remiss if I didn&amp;#8217;t point out that both Bob Dionne and Bob Newson are now working with Cloudant. This means that I now have the chance to make endless &lt;em&gt;Office Space&lt;/em&gt; allusions (&amp;#8220;I have a meeting with The Bobs,&amp;#8221; &amp;#8220;Hey Bob! Bob!&amp;#8221; etc.) which brings me no end of joy. It also gives me an excuse to put this picture up and have a good laugh.&lt;/p&gt;

&lt;p&gt;&lt;img src='/images/the-bobs.jpg' alt='' /&gt;&lt;/p&gt;

&lt;p&gt;&amp;#8220;What would you say, you do here?&amp;#8221;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Scaling CouchDB with BigCouch</title>
      <link>http://blog.cloudant.com/scaling-couchdb-with-bigcouch</link>
      <pubDate>Mon, 25 Oct 2010 00:00:00 PDT</pubDate>
      <author>Alan Hoffman</author>
      <guid>http://blog.cloudant.com/scaling-couchdb-with-bigcouch</guid>
      <description>&lt;object height='355' width='425'&gt;&lt;param name='movie' value='http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=bigcouch-oreilly-101025095147-phpapp02&amp;stripped_title=scaling-couchdb-with-bigcouch-5555464&amp;userName=Cloudant' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowScriptAccess' value='always' /&gt;&lt;embed name='__sse5555464' allowfullscreen='true' src='http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=bigcouch-oreilly-101025095147-phpapp02&amp;stripped_title=scaling-couchdb-with-bigcouch-5555464&amp;userName=Cloudant' allowscriptaccess='always' type='application/x-shockwave-flash' height='355' width='425' /&gt;&lt;/object&gt;
&lt;p&gt;On Friday Adam gave an free webcast on BigCouch. I, in my completely biased opinion, think that he killed it. The discussion in the chat room and the questions were fantastic. I hope the community got a lot of this. I&amp;#8217;m posting the slides above. The good people at O&amp;#8217;Reilly have told us that they will put up a full video of the talk (thanks Kathryn!) When that goes up, I encourage everyone to see it, you&amp;#8217;ll definitely get more out of that than just reading the slides. Thanks to all those who attended and made it such a great presentation. Hopefully we&amp;#8217;ll get to do another one soon.&lt;/p&gt;

&lt;p&gt;P.S. &amp;#8211; We&amp;#8217;d love your feedback on BigCouch and Cloudant. Help us out by picking one of the choices on our survey page &lt;a href='https://cloudant.com/feedback/'&gt;cloudant.com/feedback&lt;/a&gt;. You could win a free upgrade to an Argon or Helium plan for a year.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Welcome Bob Dionne to Team Cloudant!</title>
      <link>http://blog.cloudant.com/welcome-bob-dionne-to-team-cloudant</link>
      <pubDate>Thu, 07 Oct 2010 00:00:00 PDT</pubDate>
      <author>Alan Hoffman</author>
      <guid>http://blog.cloudant.com/welcome-bob-dionne-to-team-cloudant</guid>
      <description>&lt;p&gt;&lt;img src='/images/bob.jpg' alt='' /&gt;&lt;/p&gt;

&lt;p&gt;The Cloudant team just got a little bit bigger. We&amp;#8217;re super excited to welcome Bob Dionne (@bitdiddle) as our new Senior Software Engineer. Bob has been developing software for more than 25 years, and spent a significant chunk of that time at IBM. Since leaving he has built his own software company and, more recently, founded the consulting firm Dionne Associates. Needless to say, the man has serious chops when it comes to writing code, which is good because we&amp;#8217;re going to be throwing a lot of hard problems at him. Bob is a true New Englander (with a wicked awesome accent to boot) and though he&amp;#8217;ll be mostly working remotely, we&amp;#8217;re looking forward to him joining us at the Boston office a couple times a month.&lt;/p&gt;

&lt;p&gt;We (or I should say, I) first met Bob at the NoSQL Live Boston event. I was aware of his stellar work with CouchDB, where he focused some of his efforts on the etap testing framework. I was struck by his quiet thoughtfulness, and his readily-apparent passion for the project and the community. I feel privileged to have him join our team. So far, he&amp;#8217;s been digging into BigCouch learning the codebase and helping us build up our testing framework. Over the coming months I&amp;#8217;m sure he&amp;#8217;ll be building and testing features for BigCouch and Cloudant and working very closely with Adam (our CTO) to make sure our hosted offering is a solid as possible.&lt;/p&gt;

&lt;p&gt;Please join me in welcoming Bob to the team!&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Java Language MapReduce Views</title>
      <link>http://blog.cloudant.com/java-language-map-reduce-views</link>
      <pubDate>Wed, 08 Sep 2010 00:00:00 PDT</pubDate>
      <author>David Hardtke</author>
      <guid>http://blog.cloudant.com/java-language-map-reduce-views</guid>
      <description>&lt;p&gt;One of the core principles at Cloudant is &lt;strong&gt;push code to data&lt;/strong&gt;. In the era of big data and open source software, it&amp;#8217;s much easier to move your code around than to move the data. Code is not tied to machine by software licenses, and the code is generally smaller than the data one wishes to analyze. When I first heard the concept &lt;em&gt;push code to data&lt;/em&gt;, the retained marketing synapse in my brain immediate fired with &lt;strong&gt;&lt;em&gt;write once run anywhere&lt;/em&gt;&lt;/strong&gt;, the Sun corporation marketing slogan for Java.&lt;/p&gt;

&lt;p&gt;The Cloudant Hosted CouchDB service uses MapReduce views to analyze data. Code is contained in a design document. The design document is passed to a view server along with each document in the corresponding database. CouchDB view servers have been written for many interpreted languages (see &lt;a href='http://wiki.apache.org/couchdb/View_server' title='View server'&gt;the CouchDB wiki&lt;/a&gt; for a list), but until now there has not been a Java Language View Server for CouchDB.&lt;/p&gt;

&lt;p&gt;Today we are releasing the &lt;a href='http://github.com/cloudant/couchjava' title='cloudant/couchjava on Github'&gt;Java Language MapReduce View Interface&lt;/a&gt; for Cloudant&amp;#8217;s Hosted CouchDB service. This interface defines the protocol for writing MapReduce views in Java that can be run on our hosted CouchDB platform. The Java language has several features that make it extremely useful for large scale analytics within CouchDB:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Compile-Time Type Checking.&lt;/strong&gt; CouchDB views are generally written in weakly typed interpreted languages (javascript, python). Anyone who has worked extensively with CouchDB, however, knows that debugging complicated views can be very challenging. Sometimes it is easier to let the compiler find the syntax errors.&lt;/li&gt;

&lt;li&gt;&lt;strong&gt;Libraries, Libraries, and More Libraries.&lt;/strong&gt; Java is the most widely used computer language at the moment. As such, there is a library for almost everything. &lt;a href='http://github.com/cloudant/couchjava' title='cloudant/couchjava on Github'&gt;CouchJava&lt;/a&gt; allows for the re-use of existing Java langauge libraries within the CouchDB framework. Libraries can be packaged in jar files and uploaded directly to the view server.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When might you use this? Let&amp;#8217;s assume you want to use a neural network to analyze financial options data in real time. You can directly import your favorite neural network library(there are many written for Java)directly into CouchDB along with the weights that you have calculated during training (the weights will be configuration parameters in the design document). Each new piece of data will be automatically analyzed in real-time. You can update the weights by modifying the design document. In fact, one could build the unsupervised learning cycle directly into CouchDB.&lt;/p&gt;

&lt;p&gt;The Java view server works differently than a standard CouchDB view server. The design document does not contain code. Instead, the design document specifies which class should be called for the Map and Reduce steps. The code (a jar) is attached to the design document in the form of a binary attachment. This jar contains both user defined classes and external libraries that are needed. This paradigm (libraries as binary attachments) is a non-standard extension of the CouchDB view server API.&lt;/p&gt;

&lt;p&gt;The interface and instructions for writing Java Language MapReduce views are now available on &lt;a href='http://github.com/cloudant/couchjava' title='cloudant/couchjava'&gt;Github&lt;/a&gt;. Let us know what you think.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Cloudant’s BigCouch is open-source</title>
      <link>http://blog.cloudant.com/cloudant-bigcouch-is-open-source</link>
      <pubDate>Mon, 30 Aug 2010 00:00:00 PDT</pubDate>
      <author>Brad Anderson</author>
      <guid>http://blog.cloudant.com/cloudant-bigcouch-is-open-source</guid>
      <description>&lt;p&gt;&lt;img src='/images/bigcouch.png' alt='BigCouch box' /&gt;&lt;/p&gt;

&lt;p&gt;The Cloudant team is pleased to make available its &lt;a href='http://github.com/cloudant/bigcouch' title='cloudant/bigcouch on Github'&gt;&amp;#8216;BigCouch&amp;#8217; software project&lt;/a&gt; as open source software under the Apache 2.0 license. We have been the beneficiary of countless open source projects while constructing this system, so it is only fitting that we share our efforts in hopes that people will not only find utility, but also assist us in making it better.&lt;/p&gt;

&lt;p&gt;It has taken us a while to get to this point. The version we are opening has benefitted from Cloudant operating our systems in production for our customers for almost a year. The recent (and heavy) refactoring effort has encompassed our learning over this time, and we believe it is now time to share this system with the world. We will now be focusing our efforts on documenting and ease of use, as is the case with most newly opened projects.&lt;/p&gt;

&lt;p&gt;What does it do? Think of BigCouch as a set of Erlang/OTP applications that allow you to create a cluster of CouchDBs that is distributed across many nodes/servers. Instead of one big honking CouchDB, the result is an elastic data store which is fully CouchDB API-compliant. The top is a picture of the standalone CouchDB setup that is common today. When you download BigCouch and build with &lt;code&gt;make dev&lt;/code&gt; (see the &lt;a href='http://github.com/cloudant/bigcouch/blob/trunk/README.md' title='cloudant/bigcouch/blob/trunk/README.md on Github'&gt;README.md&lt;/a&gt; file), the result is the bottom picture, a three-node development cluster.&lt;/p&gt;

&lt;p&gt;&lt;img src='/images/dev-cluster.png' alt='' /&gt;&lt;/p&gt;

&lt;p&gt;The clustering layer is most closely modeled after &lt;a href='http://blog.cloudant.com/dynamo-and-couchdb-clusters' title='Amazon Dynamo'&gt;Amazon's Dynamo&lt;/a&gt;, with consistent hashing, replication, and quorum for read/write operations. CouchDB view indexing occurs in parallel on each partition, and can achieve impressive speedups as compared to standalone serial indexing.&lt;/p&gt;

&lt;p&gt;Also contained within BigCouch is a tailor-made RPC server application called &lt;em&gt;Rexi&lt;/em&gt;. Rexi better fits the needs of this distributed data store by dropping some unneeded overhead in rex, the RPC server that ships with Erlang/OTP. Rexi is optimized for the case when you need to spawn a bunch of remote processes. Cast messages are sent from the origin to the remote rexi server, and local processes are spawned from there, which is vastly more efficient than spawning remote processes from the origin.&lt;/p&gt;

&lt;p&gt;So, let us know what you think. We will be hanging around Freenode IRC in the &lt;a href='irc://irc.freenode.net/cloudant'&gt;#cloudant&lt;/a&gt; channel. Pull the code, build it, install, and begin playing. Document, enhance, give back, benchmark, blog, tweet, &amp;#8230;and enjoy.&lt;/p&gt;

&lt;h3 id='see_also'&gt;See Also&lt;/h3&gt;

&lt;h5 id='github_project_page'&gt;&lt;a href='http://github.com/cloudant/bigcouch'&gt;Github Project Page&lt;/a&gt;&lt;/h5&gt;

&lt;h5 id='cloudant_developer_resources'&gt;&lt;a href='https://cloudant.com/#!/solutions/bigcouch'&gt;Cloudant Developer Resources&lt;/a&gt;&lt;/h5&gt;</description>
    </item>
    
    <item>
      <title>Dynamo and CouchDB Clusters</title>
      <link>http://blog.cloudant.com/dynamo-and-couchdb-clusters</link>
      <pubDate>Fri, 13 Aug 2010 00:00:00 PDT</pubDate>
      <author>Brad Anderson</author>
      <guid>http://blog.cloudant.com/dynamo-and-couchdb-clusters</guid>
      <description>&lt;p&gt;For a while, CouchDB was described as a &amp;#8220;distributed, fault-tolerant and schema-free document-oriented database accessible via a RESTful HTTP/JSON API.&amp;#8221; The story about CouchDB&amp;#8217;s &amp;#8216;distributed&amp;#8217; description has always involved its multi-master replication. In this sense, it is not truly a horizontally scalable database, as noted &lt;a href='http://spyced.blogspot.com/2008/12/couchdb-not-drinking-kool-aid.html'&gt;here&lt;/a&gt;. With the availability of Cloudant&amp;#8217;s new &lt;a href='https://cloudant.com/#!/solutions'&gt;hosted service&lt;/a&gt;, a new option has entered the scene. Our clustering is similar to &lt;a href='http://project-voldemort.com'&gt;Voldemort&lt;/a&gt;, &lt;a href='http://cassandra.apache.org'&gt;Cassandra&lt;/a&gt;, or Riak](http://github.com/basho/riak), as it implements a version of &lt;a href='http://www.allthingsdistributed.com/2007/10/amazons_dynamo.html'&gt;Amazon&amp;#8217;s Dynamo&lt;/a&gt;. We&amp;#8217;d like to tell you a bit about how it works.&lt;/p&gt;

&lt;p&gt;&lt;img src='/images/hashing.png' alt='' /&gt;&lt;/p&gt;

&lt;h3 id='clustering_in_a_ring'&gt;Clustering in a Ring&lt;/h3&gt;

&lt;p&gt;Cloudant makes use of partitions for sharding data. Picture a ring of partitions that each are responsible for a range of the data. The partitions, sometimes referred to as virtual nodes or vnodes, are placed on separate physical nodes as the primary means of distribution. Partitioning databases is nothing new, and with Dynamo systems, a keyspace is usually employed. We use CRC32, so from 0 to 2^32. We&amp;#8217;ve seen MD5, fnv, and SHA-1 used, and previous versions of our software used SHA-1. When creating a database, users may provide Q, a constant that determines how many partitions the database will be spread across. Let&amp;#8217;s check out an example:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='tcsh'&gt;&lt;span class='nv'&gt;$ &lt;/span&gt;curl -X PUT http://username.cloudant.com/dbname?q&lt;span class='o'&gt;=&lt;/span&gt;10
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;For a Q of 10, there will be 10 partitions put across all the nodes in the cluster. Each partition will be responsible for a range of 2^32/Q keys.&lt;/p&gt;

&lt;h3 id='any_node_can_handle_a_request'&gt;Any Node can Handle a Request&lt;/h3&gt;

&lt;p&gt;Each request to the cluster will most likely go through a round-robin load balancer, because each of the nodes knows how to find the data in O(1) lookup time. To do this, the document id is hashed, and the resulting hash is compared against the database&amp;#8217;s partition map, as we discussed above. If you&amp;#8217;re referring to the shiny picture on this page, you will see that our example hashes &amp;#8216;doc_id&amp;#8217; to the E partition. In reality, this could be something like hashing a value to c34b and that falls between c000 and cfff hex values, so we call that range the E partition. The partition map for that database knows which node or nodes have copies of the document, and requests are routed via distributed Erlang messages to those nodes.&lt;/p&gt;

&lt;h3 id='quorum_system_n_r_w'&gt;Quorum system (N, R, W)&lt;/h3&gt;

&lt;p&gt;The durability and consistency settings of Dynamo systems are governed by quorum constants. As you can see from the diagram, N=3. This means that three replica copies of &amp;#8216;doc_id&amp;#8217; document will be stored in the cluster. When the &amp;#8216;write&amp;#8217; arrives at Node 1 and the consistent hashing algorithm tells us the doc will live on the E partition, the system attempts three asynchronous writes, one to each of the nodes that house the E partition replicas. You can be reasonably certain of the writes succeeding, because the request will wait for W (in this case, W=2) responses. When two successful responses return to Node 1, the response of 201 Created is returned to the client. The same thing occurs on &amp;#8216;reads.&amp;#8217; When a GET request arrives at a node, N &amp;#8216;read&amp;#8217; requests go out to the nodes which house that document&amp;#8217;s partition. If R=2, then the system waits for two agreed-upon values to be returned, and then replies to the client with a 200 OK and the document&amp;#8217;s contents.&lt;/p&gt;

&lt;p&gt;You can set the defaults of N, R, and W for your cluster, but you may also override them at request time. N may be overridden at database creation time, just like Q above. R and W may be overridden for each request individually. A higher W value means more durable writes, where lower W value means more write throughput. High R values mean consistent values returned, while low R values mean first read wins, and higher read throughput.&lt;/p&gt;

&lt;h3 id='masterless_no_spof'&gt;Masterless (no SPOF)&lt;/h3&gt;

&lt;p&gt;Server failure is handled transparently. The load balancer will not route requests to a downed node. With consistent hashing, the other nodes are capable of serving requests. Also, when a node is down, other partitions will provide the data that is located on the downed node. If N=3, W=2, R=2 as in our example, a node may be down but read and write quorums are still satisfied. When the node returns, operations return to normal. The node is placed back into service by the load balancer, and a &amp;#8216;hinted-handoff-like&amp;#8217; system is used to replicate the writes that the downed node may have missed. The other nodes holding data for the partitions of the downed node replicate the updates continuously after the node returns.&lt;/p&gt;

&lt;h3 id='horizontally_scalable'&gt;Horizontally Scalable&lt;/h3&gt;

&lt;p&gt;When the cluster gets closer to capacity, or could use more nodes to crunch data in a more parallel fashion, extra nodes may be added to the cluster. When this happens, partitions are moved from existing nodes to the new nodes. The system has the flexibility to move partitions on a database level, and can split large partitions if required. This is an evolving portion of the code base, and we are attempting to do partition merging and splitting all while the database remains online, i.e. other partitions serve data while the work is being done.&lt;/p&gt;

&lt;p&gt;Above, there was mention of partition merging. This may be required as the cluster shrinks. Or, it is also possible to re-partition an over-partitioned database into fewer shards. The flexibility exists to shrink a cluster by removing nodes, just as it may be grown, providing a truly elastic data store.&lt;/p&gt;

&lt;h3 id='transparent_to_the_application'&gt;Transparent to the application&lt;/h3&gt;

&lt;p&gt;All of these features &amp;#8211; distributed, horizontally scalable, durable, consistent &amp;#8211; happen with little or no change required in applications that have been written for CouchDB. A cluster looks just like a stand-alone CouchDB, and API compliance has been our goal from the beginning. Granted, there are a few extra options like overriding quorum constant defaults and there are a few vagaries, like views always performing rereduce due to the views being distributed. But on the whole, the extras in Cloudant are transparent to the application.&lt;/p&gt;

&lt;p&gt;Feel free to comment away, &lt;a href='https://cloudant.com/#!/support'&gt;email us&lt;/a&gt;, or join us on Freenode IRC in the &lt;a href='irc://irc.freenode.net/cloudant'&gt;#cloudant&lt;/a&gt; room. We&amp;#8217;d love to hear from you.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Using Cloudant’s Heroku Add-on</title>
      <link>http://blog.cloudant.com/using-cloudants-heroku-add-on</link>
      <pubDate>Thu, 05 Aug 2010 00:00:00 PDT</pubDate>
      <author>Alan Hoffman</author>
      <guid>http://blog.cloudant.com/using-cloudants-heroku-add-on</guid>
      <description>&lt;p&gt;Heroku has recently jumped with both feet into the NoSQL world, providing add-ons for many different NoSQL data stores to complement it&amp;#8217;s easy ruby platform. We&amp;#8217;re very excited to be able to offer CouchDB 1.0 to Heroku users via the Cloudant add-on. Cloudant is a distributed CouchDB service, with the added benifits of data redundancy, clustering, and automatic maintenance (view builds and compaciton). You can use it just like you would standalone CouchDB but you have the advantage of your data being distributed over multiple machines. The following is a (very short) guide to help you get started with Cloudant and Heroku. It is by no means comprehensive. If you have quesitons, feel free to &lt;a href='https://cloudant.com/#!/support'&gt;get in touch&lt;/a&gt;. You can read more about the add-on at the &lt;a href='http://blog.heroku.com/archives/2010/7/20/nosql/'&gt;Heroku Blog&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id='local_setup'&gt;Local setup&lt;/h3&gt;

&lt;p&gt;Since CouchDB and Cloudant have the same REST API you can use them the same way. You just need a http client to interface with the database and a JSON parser.&lt;/p&gt;

&lt;p&gt;In the simplest case you can just use the &lt;code&gt;rest-client&lt;/code&gt; and &lt;code&gt;json&lt;/code&gt; gems:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='tcsh'&gt;&lt;span class='nv'&gt;$ &lt;/span&gt;sudo gem install rest-client json
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;If you don&amp;#8217;t already have CouchDB on your local machine:&lt;/p&gt;

&lt;p&gt;OSX:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='tcsh'&gt;&lt;span class='nv'&gt;$ &lt;/span&gt;brew install couchdb
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Ubuntu:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='tcsh'&gt;&lt;span class='nv'&gt;$ &lt;/span&gt;sudo apt-get install couchdb
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Further reading:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://books.couchdb.org/relax/'&gt;CouchDB book&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://wiki.apache.org/couchdb/'&gt;CouchDB wiki&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='https://cloudant.com/'&gt;cloudant.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id='using_from_sinatra'&gt;Using from Sinatra&lt;/h3&gt;

&lt;p&gt;Installing the Cloudant add-on gives you an environmental variable &lt;code&gt;CLOUDANT_URL&lt;/code&gt;. This contains your API URL and credentials and is how you access your database(s) at Cloudant:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='tcsh'&gt;&lt;span class='nv'&gt;$ &lt;/span&gt;heroku config --long CLOUDANT_URL
https://USER:PASSWORD@APP.heroku.cloudant.com
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;When you first install the add-on you need to create a database:&lt;/p&gt;

&lt;p&gt;Using cURL:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='tcsh'&gt;&lt;span class='nv'&gt;$ &lt;/span&gt;curl -X PUT https://USER:PASSWORD@APP.heroku.cloudant.com/DATABASENAME
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Using rest-client:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='tcsh'&gt;&lt;span class='nv'&gt;$ &lt;/span&gt;RestClient.put&lt;span class='o'&gt;(&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;https://USER:PASSWORD@APP.heroku.cloudant.com/DATABASENAME&amp;quot;&lt;/span&gt;, &lt;span class='s2'&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class='o'&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;You could also do this in your code by doing something like:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='ruby'&gt;&lt;span class='k'&gt;begin&lt;/span&gt;
  &lt;span class='no'&gt;RestClient&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;put&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;&lt;/span&gt;&lt;span class='si'&gt;#{&lt;/span&gt;&lt;span class='no'&gt;ENV&lt;/span&gt;&lt;span class='o'&gt;[&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;CLOUDANT_URL&amp;#39;&lt;/span&gt;&lt;span class='o'&gt;]&lt;/span&gt;&lt;span class='si'&gt;}&lt;/span&gt;&lt;span class='s2'&gt;/SOMEDATABASE&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
&lt;span class='k'&gt;rescue&lt;/span&gt;
  &lt;span class='nb'&gt;puts&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;database already created&amp;quot;&lt;/span&gt;
&lt;span class='k'&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;The following code will allow you to GET a document from the &lt;code&gt;music&lt;/code&gt; database and then print it to the page:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='ruby'&gt;&lt;span class='no'&gt;DB&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;&lt;/span&gt;&lt;span class='si'&gt;#{&lt;/span&gt;&lt;span class='no'&gt;ENV&lt;/span&gt;&lt;span class='o'&gt;[&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;CLOUDANT_URL&amp;#39;&lt;/span&gt;&lt;span class='o'&gt;]&lt;/span&gt;&lt;span class='si'&gt;}&lt;/span&gt;&lt;span class='s2'&gt;/music&amp;quot;&lt;/span&gt;
&lt;span class='n'&gt;get&lt;/span&gt; &lt;span class='s2'&gt;&amp;quot;/doc/:doc&amp;quot;&lt;/span&gt; &lt;span class='k'&gt;do&lt;/span&gt;
  &lt;span class='n'&gt;doc&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='no'&gt;RestClient&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;get&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;&lt;/span&gt;&lt;span class='si'&gt;#{&lt;/span&gt;&lt;span class='no'&gt;DB&lt;/span&gt;&lt;span class='si'&gt;}&lt;/span&gt;&lt;span class='s2'&gt;/&lt;/span&gt;&lt;span class='si'&gt;#{&lt;/span&gt;&lt;span class='n'&gt;params&lt;/span&gt;&lt;span class='o'&gt;[&lt;/span&gt;&lt;span class='ss'&gt;:doc&lt;/span&gt;&lt;span class='o'&gt;]&lt;/span&gt;&lt;span class='si'&gt;}&lt;/span&gt;&lt;span class='s2'&gt;&amp;quot;&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
  &lt;span class='vi'&gt;@result&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='no'&gt;JSON&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;parse&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;doc&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
  &lt;span class='n'&gt;haml&lt;/span&gt; &lt;span class='ss'&gt;:doc_id&lt;/span&gt;
&lt;span class='k'&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;The view would look something like:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='haml'&gt;&lt;span class='nt'&gt;%h1&lt;/span&gt; A Doc from CouchDB!
&lt;span class='p'&gt;-&lt;/span&gt; &lt;span class='vi'&gt;@result&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;each&lt;/span&gt; &lt;span class='k'&gt;do&lt;/span&gt; &lt;span class='o'&gt;|&lt;/span&gt;&lt;span class='n'&gt;k&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='n'&gt;v&lt;/span&gt;&lt;span class='o'&gt;|&lt;/span&gt;
  &lt;span class='nt'&gt;%b&lt;/span&gt;&lt;span class='p'&gt;=&lt;/span&gt;&lt;span class='n'&gt;k&lt;/span&gt;
  &lt;span class='nt'&gt;%em&lt;/span&gt;&lt;span class='p'&gt;=&lt;/span&gt;&lt;span class='n'&gt;v&lt;/span&gt;
  &lt;span class='nt'&gt;%br&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;To request this page by pointing your browser to:&lt;/p&gt;

&lt;p&gt;&lt;a href='http://SOMEAPP.heroku.com/doc/YOURDOCUMENT'&gt;http://SOMEAPP.heroku.com/doc/YOURDOCUMENT&lt;/a&gt;&lt;/p&gt;

&lt;h3 id='deploying_to_heroku'&gt;Deploying to Heroku&lt;/h3&gt;

&lt;p&gt;To use Cloudant on Heroku, install the Cloudant add-on:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='tcsh'&gt;&lt;span class='nv'&gt;$ &lt;/span&gt;heroku addons:add cloudant:basic
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Cloudant’s Own to Speak at SurgeCon</title>
      <link>http://blog.cloudant.com/cloudants-own-to-speak-at-surgecon</link>
      <pubDate>Tue, 27 Jul 2010 00:00:00 PDT</pubDate>
      <author>Joe Williams</author>
      <guid>http://blog.cloudant.com/cloudants-own-to-speak-at-surgecon</guid>
      <description>&lt;p&gt;&lt;img src='/images/surge.png' alt='Surge' /&gt;&lt;/p&gt;

&lt;p&gt;As Cloudant&amp;#8217;s ops guy and &lt;em&gt;utility infielder&lt;/em&gt;, I (&lt;a href='http://twitter.com/williamsjoe'&gt;@williamsjoe&lt;/a&gt;) will be speaking at the &lt;a href='http://omniti.com/surge/2010'&gt;Surge&lt;/a&gt; conference in September. Surge is a conference presented by &lt;a href='http://omniti.com/'&gt;OmitTI&lt;/a&gt; that focuses on infrastructure and web operations. As such &lt;a href='http://omniti.com/surge/2010/speakers/joe-williams'&gt;I will be discussing&lt;/a&gt; how we have built Cloudant&amp;#8217;s database platform on top of Amazon&amp;#8217;s EC2. The conference will include keynotes from the always excellent John Allspaw (of Flickr and Etsy fame) and Theo Schlossnagle (OmniTI).&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Cloudant and SETI: Crowdsourcing the search for E.T.</title>
      <link>http://blog.cloudant.com/cloudant-and-seti-crowdsourcing-the-search-for-e-t</link>
      <pubDate>Wed, 21 Jul 2010 00:00:00 PDT</pubDate>
      <author>Alan Hoffman</author>
      <guid>http://blog.cloudant.com/cloudant-and-seti-crowdsourcing-the-search-for-e-t</guid>
      <description>&lt;p&gt;Going to OSCON? SETI needs your help!&lt;/p&gt;

&lt;p&gt;Cloudant is teaming up with the SETI Institute to help engage citizen-scientists in the search for intelligent life elswhere in the universe. With some help from Amazon, we&amp;#8217;ve built a &amp;#8216;croudsourced data analytics platform&amp;#8217; where ordinary citizens can search and analyze data from the Allen telescope array. Are you a citizen-scientist? Do you know about signal processing? Are you interested in helping in the search? Come find out how!&lt;/p&gt;

&lt;p&gt;Thursday, July 22nd at OSCON, our own Dr. Dave Hardtke will be demonstrating SETICloud. He&amp;#8217;ll be describing the Cloudant platform and how we&amp;#8217;re bringing the wisdom of the crowds to SETI&amp;#8217;s search.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Time:&lt;/strong&gt; 12:20&amp;#8211;1:20 pm&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Place:&lt;/strong&gt; Room E143/144&lt;/p&gt;

&lt;p&gt;SETI is hacking on CouchDB!  Come find out how you can help.&lt;/p&gt;

&lt;p&gt;And don&amp;#8217;t miss &lt;a href='http://www.oscon.com/oscon2010/public/schedule/detail/13425'&gt;Dr. Jill Tarter&amp;#8217;s keynote talk on &amp;#8220;Open SEITQuest&amp;#8221;&lt;/a&gt; Thursday morning at OSCON.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Learning to Relax</title>
      <link>http://blog.cloudant.com/learning-to-relax</link>
      <pubDate>Mon, 28 Jun 2010 00:00:00 PDT</pubDate>
      <author>Alan Hoffman</author>
      <guid>http://blog.cloudant.com/learning-to-relax</guid>
      <description>&lt;object height='355' width='425'&gt;&lt;param name='movie' value='http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=windycityhoffman-100628112536-phpapp02&amp;stripped_title=learning-to-relax' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowScriptAccess' value='always' /&gt;&lt;embed name='__sse4635719' allowfullscreen='true' src='http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=windycityhoffman-100628112536-phpapp02&amp;stripped_title=learning-to-relax' allowscriptaccess='always' type='application/x-shockwave-flash' height='355' width='425' /&gt;&lt;/object&gt;
&lt;p&gt;Over the weekend I traveled to Chicago to give a talk on &amp;#8216;CouchDB for Beginners&amp;#8217; at the WindyCityDB conference. You can read the slides above. The conference exceeded my expectations and many of the talks, both long and short, were stellar. Big thanks to Ray Hightower and all the people who helped put WindyCityDB together. I very much appreciate the opportunity to give this talk and I hope everyone enjoyed it.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Cloudant Nationwide Tour</title>
      <link>http://blog.cloudant.com/cloudant-nationwide-tour</link>
      <pubDate>Wed, 16 Jun 2010 00:00:00 PDT</pubDate>
      <author>Alan Hoffman</author>
      <guid>http://blog.cloudant.com/cloudant-nationwide-tour</guid>
      <description>&lt;p&gt;It turns out that next week (the week of June 21st) is a big week for tech conferences. A bunch of the Cloudant people will be hitting up various conferences and giving a couple talks. If anyone is interested in meeting up over beers to talk Cloudant, CouchDB, NoSQL, Startups, etc. get in touch (info at cloudant dot com is a good place to start.) Here are the tour dates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Structure Conference.&lt;/strong&gt; June 23&amp;#8211;24. San Francisco, CA: Both Adam Kocoloski (CTO) and David Hardtke (Search) will be milling about this conference, whose tagline is &amp;#8220;Put Cloud Computing To Work.&amp;#8221; On the 23rd in the afternoon, Cloudant will be taking part in the &lt;em&gt;Launchpad!&lt;/em&gt; event. Adam will be working the crowd, drumming up some love for Cloudant, giving a short pitch about our service. Check it out.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Velocity Conference.&lt;/strong&gt; June 22&amp;#8211;24. Santa Clara, CA: No Cloudant talk at this conference but Joe Williams (Operations and Utility Infeilding) will be in attendence. No one I know gets more pumped up about server uptime, configuration management, and monitoring than Joe. If you&amp;#8217;re the same way, say hi.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Momentum Summit.&lt;/strong&gt; June 23. Cambridge, MA: This one day conference focuses on how to turn a startup into big business. CEO Alan Hoffman (that&amp;#8217;s me) will be in attendence. Looking forward to hearing from Boston startup gurus like Steve Kaufer and Scott Griffith. I&amp;#8217;m always eager to talk with other local startup types so come find me.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Windy City DB.&lt;/strong&gt; June 26. Chicago, IL: I&amp;#8217;m lucky enough to be heading back to my hometown to attend and speak at this one day event on the south side of Chicago. My talk is entitiled &amp;#8220;Learning to Relax: CouchDB for Beginners&amp;#8221; and it is about, uh, CouchDB for beginners. It&amp;#8217;s my first long-format NoSQL talk so if you&amp;#8217;re in attendance, please no heckling. I&amp;#8217;m happy to meet up after the conference; if you&amp;#8217;re looking for me on Friday afternoon, I&amp;#8217;ll be at U.S. Cellular Field watching the White Sox.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Just Opensourced: Gaff and Deckard</title>
      <link>http://blog.cloudant.com/just-opensourced-gaff-and-deckard</link>
      <pubDate>Fri, 04 Jun 2010 00:00:00 PDT</pubDate>
      <author>Joe Williams</author>
      <guid>http://blog.cloudant.com/just-opensourced-gaff-and-deckard</guid>
      <description>&lt;p&gt;&lt;img src='/images/deckard.jpg' alt='' /&gt;&lt;/p&gt;

&lt;p&gt;Today we released two open source projects that have been in use internally at Cloudant for some time now, &lt;a href='http://github.com/joewilliams/gaff' title='joewilliams/gaff on Github'&gt;Gaff&lt;/a&gt; and &lt;a href='http://github.com/joewilliams/deckard' title='joewilliams/deckard on Github'&gt;Deckard&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;All of our infrastructure is in the cloud and as such we need a way for disperate systems to all request resources, this is where Gaff comes in. Gaff is a pubsub daemon for asynchronously talking to cloud APIs using AMQP. Currently it supports a subset of the Dynect (DNS), Slicehost and EC2 APIs and uses &lt;a href='http://twitter.com/geemus'&gt;@geemus&lt;/a&gt;&amp;#8217;s awesome &lt;a href='http://github.com/geemus/fog' title='geemus/fog on Github'&gt;fog&lt;/a&gt; Ruby library. The basic workflow for Gaff is to send &lt;a href='http://json-rpc.org/'&gt;JSON-RPC&lt;/a&gt; formated messages to an AMQP exchange with a routing key corresponding to the API you are talking to, you could be sending these messages from a web application or another service. Each message gets routed to an API specific queue and is picked up by Gaff and turned into the appropriate API call, starting, stopping, modifying your servers on EC2 or elsewhere.&lt;/p&gt;

&lt;p&gt;We have a lot of CouchDB instances to keep tabs on to do this we wrote Deckard. Deckard is a HTTP check monitoring system based on CouchDB. Yo dawg! What better than to monitor CouchDB with CouchDB (and some Ruby)? Deckard supports basic HTTP content checks, email alerts, SMS alerts (via email) for on-call rotations, basic maintenance scheduling, replication latency alerts (between two Couches) and even has EC2 Elastic IP support for failover between two EC2 instances. Best of all since it&amp;#8217;s based on Couch you get an API for free, just PUT a doc in the HTTP checks database and you get a new HTTP check the next time Deckard runs.&lt;/p&gt;

&lt;p&gt;Checkout these and my other projects on &lt;a href='http://github.com/joewilliams'&gt;Github&lt;/a&gt; and follow &lt;a href='http://twitter.com/cloudant'&gt;@cloudant&lt;/a&gt; and &lt;a href='http://twitter.com/williamsjoe'&gt;myself&lt;/a&gt; on Twitter.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Ode to a Utility Infielder</title>
      <link>http://blog.cloudant.com/ode-to-a-utility-infielder</link>
      <pubDate>Wed, 17 Feb 2010 00:00:00 PST</pubDate>
      <author>Alan Hoffman</author>
      <guid>http://blog.cloudant.com/ode-to-a-utility-infielder</guid>
      <description>&lt;p&gt;Today marks the one year anniversary of Joe Williams (&lt;a href='http://twitter.com/#!/williamsjoe'&gt;@williamsjoe&lt;/a&gt;) becoming a member of Team Cloudant. Those of us who are married will recall that one year is the paper anniversary so it&amp;#8217;s fitting that Joe will be receiving paper (in the form of vested stock options) from Cloudant today. I thought I would take a moment on this occasion to thank Joe for his work over the past year.&lt;/p&gt;

&lt;p&gt;We first hired Joe on a contract basis to help us build an internal infrastructure tool we call The Deployer. This is the tool that allows us to quickly provision and configure resources from a number of different cloud providers. We can, with the push of one button, &amp;#8216;inflate&amp;#8217; an X-node Cloudant database cluster, and have it configured and available in a matter of minutes, all because of Joe&amp;#8217;s ongoing efforts.&lt;/p&gt;

&lt;p&gt;Since joining full-time, Joe has acted as our &amp;#8216;utility infielder.&amp;#8217; All the problems in the operations and infrastructure realm fell to Joe. He built and mantains our monitoring system, our logging system, and our build system. That alarm system we have where we get a text message in the middle of the night when something goes wrong, Joe did that (thanks Joe!). Joe, margarita in hand, has pushed hot code updates to live systems from a Mexican karaoke bar.&lt;/p&gt;

&lt;p&gt;Needless to say Joe has been and continues to be a staggering presence at Cloudant. We feel privileged to work with him on a daily basis. I only hope I&amp;#8217;m able to write a similar post on his 5 year anniversary. Plus, the man has excellent mutton chops.&lt;/p&gt;

&lt;p&gt;&lt;img src='../images/joe.jpg' alt='' /&gt;&lt;/p&gt;

&lt;p&gt;Thanks Joe! Here&amp;#8217;s to the big things (and fewer alarms) coming in the next year.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>NoSQL Live From Boston</title>
      <link>http://blog.cloudant.com/nosql-live-from-boston</link>
      <pubDate>Wed, 27 Jan 2010 00:00:00 PST</pubDate>
      <author>Alan Hoffman</author>
      <guid>http://blog.cloudant.com/nosql-live-from-boston</guid>
      <description>&lt;p&gt;We&amp;#8217;re very excited to be joinin up with our friends at 10gen to sponsor the NoSQL Live conference right here in Boston, our backyard. The official press release can be found &lt;a href='http://www.marketwire.com/press-release/10gen-Announces-NoSQL-Live-1107116.htm'&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The event will take place on March 11th at the John Hancock hotel. A number of us from Cloudant will be at the conference in both official (panel discussions, lightning talks) and unofficial (milling about, drinking) capacities. If you are in the New England area or plan on coming to the New England area, you should register and attend the conference. You can register &lt;a href='http://www.10gen.com/events'&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;From the 10gen events site:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;About:&lt;/p&gt;

&lt;p&gt;A one-size-fits-all approach to databases no longer applies. Relational databases have worked well - and will continue to - for highly transactional systems. But today&amp;#8217;s web applications require enormous scalability and performance. This has spurred the growth of a new class of databases that trade off some of the features of relational databases to offer high performance, ease of programming, high availability &amp;#38; the ability to scale in cloud environments. They are collectively called NoSQL or non-relational databases.&lt;/p&gt;

&lt;p&gt;NoSQL Live from Boston is a full-day interactive conference that brings together the thinking in this space. Picking up where other NoSQL events have left off, NoSQL Live goes beyond understanding the basics of these databases to how they are used in production systems. It features panel discussions on use cases, lightning talks, networking session, and a NoSQL Lab where attendees can get a practical view of programming with NoSQL databases.&lt;/p&gt;

&lt;p&gt;Interested in presenting or sponsorship opportunities? Contact &lt;a href='mailto:meghan@10gen.com'&gt;meghan@10gen.com&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;</description>
    </item>
    
    <item>
      <title>Welcome Dr. Dave Hardtke</title>
      <link>http://blog.cloudant.com/welcome-dr-dave-hardtke</link>
      <pubDate>Wed, 06 Jan 2010 00:00:00 PST</pubDate>
      <author>Alan Hoffman</author>
      <guid>http://blog.cloudant.com/welcome-dr-dave-hardtke</guid>
      <description>&lt;p&gt;The Cloudant team is growing!&lt;/p&gt;

&lt;p&gt;&lt;img src='../images/david.jpg' alt='' /&gt;&lt;/p&gt;

&lt;p&gt;We&amp;#8217;re excited to welcome Dr. Dave Hardtke who has joined Cloudant as Director of Search. Like many of us here at Cloudant, Dave began his career as an experimental particle physicist. In over a decade of experience Dave illuminated the secrets of the universe at various experiments such as STAR (Brookhaven National Lab), ICECUBE (Antarctica), and NA44 (CERN). Dave&amp;#8217;s seminal work lead to the discovery of the Quark Gluon Plasma, the 2005 physics story of the year. More recently Dave has turned his talents in algorithms and analyses to search, where he has built his own startup stinkyteddy.com, a general purpose search engine combining multiple keyword-driven search feeds and intelligent semantic analysis to deliver the most timely search results regardless of source and content types. Prior to that Dave served as Chief Scientist at Surf Canyon, a startup focusing on personalization of real-time search.&lt;/p&gt;

&lt;p&gt;Dave is accelerating Cloudant Search. As we add customers it has become clear that they are hungry not just for a flexible way to store thier data, but a powerful way to &amp;#8220;discover&amp;#8221; their data. Search is a critical component in nearly all data driven applications. We are therefore expanding our efforts to integrate a robust search platform into our CouchDB-based, cloud database service. Dave brings his expertise in internet and enterpise search technology to the project.&lt;/p&gt;

&lt;p&gt;Please join me in welcoming Dave to the team.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Cloudant.com Refresh: CouchDB in the Cloud</title>
      <link>http://blog.cloudant.com/cloudant-com-refresh-couchdb-in-the-cloud</link>
      <pubDate>Tue, 08 Dec 2009 00:00:00 PST</pubDate>
      <author>Stefano J. Attardi</author>
      <guid>http://blog.cloudant.com/cloudant-com-refresh-couchdb-in-the-cloud</guid>
      <description>&lt;p&gt;Our new front page just went live on &lt;a href='http://cloudant.com/'&gt;Cloudant.com&lt;/a&gt;. The main goal of this redesign is to give more information about the service we are currently rolling out. While we are still in private beta, we are starting to accept more people onto our platform and therefore we are ready to tell you more about what we are doing. We are currently aiming at existing &lt;a href='http://couchdb.apache.org/'&gt;CouchDB&lt;/a&gt; users, and to them we are offering professional hosting of CouchDB in the cloud.&lt;/p&gt;

&lt;p&gt;The new design follows the &lt;a href='http://www.smashingmagazine.com/2008/04/24/5-more-principles-of-effective-web-design/'&gt;AIDA principle&lt;/a&gt;, according to which a succesful marketing flow involves four main phases: attention (A), interest (I), desire (D), and action (A).&lt;/p&gt;

&lt;p&gt;The &amp;#8220;CouchDB in the Cloud&amp;#8221; headline is designed to attract the &lt;em&gt;attention&lt;/em&gt; of CouchDB users. The screenshot behind it is meant to evoke &lt;em&gt;interest&lt;/em&gt; by giving a peak to the features available in our dashboard. Underneath it, the three &amp;#8220;features&amp;#8221; listed aim to create &lt;em&gt;desire&lt;/em&gt;. They link our offering to CouchDB, by stating that we provide all the benefits of the database that our potential customers already love, but also highlight what we have to offer on top of that: a scalable and managed infrastructure and the chance to use it for free. Finally, the two buttons, placed in what the &lt;a href='http://www.smashingmagazine.com/2009/04/06/design-to-sell-12-tips-to-help-your-website-convert/'&gt;Gutenberg Rule&lt;/a&gt; calls the &amp;#8220;terminal area&amp;#8221;, provide options for &lt;em&gt;action&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Let us know what you think about this new design.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Changing the World, One Password at a Time</title>
      <link>http://blog.cloudant.com/changing-the-world-one-password-at-a-time</link>
      <pubDate>Tue, 01 Dec 2009 00:00:00 PST</pubDate>
      <author>Stefano J. Attardi</author>
      <guid>http://blog.cloudant.com/changing-the-world-one-password-at-a-time</guid>
      <description>&lt;p&gt;Since launching the beta we&amp;#8217;ve received a bunch of feedback along the lines of &amp;#8220;Uh&amp;#8230; I can&amp;#8217;t change my password, wtf?&amp;#8221; Yes, wtf indeed. We knew we would be building this feature eventually but we didn&amp;#8217;t want to hold up the release for it. Well, now we have it on our new Account Options page.&lt;/p&gt;

&lt;p&gt;&lt;img src='../images/password.png' alt='' /&gt;&lt;/p&gt;

&lt;p&gt;You can access it by selecting &amp;#8216;account options&amp;#8217; from the user account pulldown on the top right of the page. Thanks for all the feedback and keep it coming.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>API Keys: No Really, We’re Listening</title>
      <link>http://blog.cloudant.com/api-keys-no-really-we-re-listening</link>
      <pubDate>Thu, 05 Nov 2009 00:00:00 PST</pubDate>
      <author>Alan Hoffman</author>
      <guid>http://blog.cloudant.com/api-keys-no-really-we-re-listening</guid>
      <description>&lt;p&gt;Since Monday we’ve been sending out invites to the private beta (if you haven’t gotten yours yet, be patient, it’s coming). And we’ve gotten a lot of great feedback on how to make the service better. One suggestion that came from a few users was to allow database access to non-Cloudant users through API keys that can be shared with anyone. Well, your requests did not fall on deaf ears. For any of your databases you can now navigate to the permissions tab and create a database-specific API key and password. You can then set permissions for that key as if it were a Cloudant user. The screenshot below shows what that should look like. Thanks to everyone for the great suggestion. You keep the feature requests coming and we’ll get to them as fast as we can.&lt;/p&gt;

&lt;p&gt;&lt;img src='../images/api-keys.jpg' alt='' /&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Benchmarking CouchDB with Baracus</title>
      <link>http://blog.cloudant.com/benchmarking-couchdb-with-baracus</link>
      <pubDate>Wed, 04 Nov 2009 00:00:00 PST</pubDate>
      <author>Joe Williams</author>
      <guid>http://blog.cloudant.com/benchmarking-couchdb-with-baracus</guid>
      <description>&lt;p&gt;&lt;a href='http://github.com/joewilliams/baracus'&gt;Baracus&lt;/a&gt; is a new project built specifically for benchmarking &lt;a href='http://couchdb.apache.org/'&gt;CouchDB&lt;/a&gt;. Using trusty httperf, Baracus makes it easy to create and perform a battery of tests based on simple configuration files. In this post I&amp;#8217;ll go into the details of a Baracus run and show you how to run your own benchmarks.&lt;/p&gt;

&lt;p&gt;First, let&amp;#8217;s install Baracus. It depends on &lt;a href='http://www.hpl.hp.com/research/linux/httperf/'&gt;httperf&lt;/a&gt; so install it first either from source (check the README for compile options for httperf) or from your distribution. Note that Baracus uses gemcutter for gem hosting.&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='tcsh'&gt;gem sources -a &lt;span class='o'&gt;[&lt;/span&gt;http://gemcutter.org&lt;span class='o'&gt;](&lt;/span&gt;http://gemcutter.org&lt;span class='o'&gt;)&lt;/span&gt;
gem install baracus
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Next, let&amp;#8217;s examine a simple Baracus config file.&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='yaml'&gt;&lt;span class='l-Scalar-Plain'&gt;httperf&lt;/span&gt;&lt;span class='p-Indicator'&gt;:&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;/usr/bin/httperf&amp;quot;&lt;/span&gt;
&lt;span class='l-Scalar-Plain'&gt;host&lt;/span&gt;&lt;span class='p-Indicator'&gt;:&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;localhost&amp;quot;&lt;/span&gt;
&lt;span class='l-Scalar-Plain'&gt;port&lt;/span&gt;&lt;span class='p-Indicator'&gt;:&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;5984&amp;quot;&lt;/span&gt;
&lt;span class='l-Scalar-Plain'&gt;user&lt;/span&gt;&lt;span class='p-Indicator'&gt;:&lt;/span&gt;
&lt;span class='l-Scalar-Plain'&gt;password&lt;/span&gt;&lt;span class='p-Indicator'&gt;:&lt;/span&gt;
&lt;span class='l-Scalar-Plain'&gt;db&lt;/span&gt;&lt;span class='p-Indicator'&gt;:&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;testdb&amp;quot;&lt;/span&gt;
&lt;span class='l-Scalar-Plain'&gt;report_url&lt;/span&gt;&lt;span class='p-Indicator'&gt;:&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;http://localhost:5984/bench&amp;quot;&lt;/span&gt;
&lt;span class='l-Scalar-Plain'&gt;name&lt;/span&gt;&lt;span class='p-Indicator'&gt;:&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;test123&amp;quot;&lt;/span&gt;
&lt;span class='l-Scalar-Plain'&gt;config&lt;/span&gt;&lt;span class='p-Indicator'&gt;:&lt;/span&gt;
  &lt;span class='l-Scalar-Plain'&gt;timeout&lt;/span&gt;&lt;span class='p-Indicator'&gt;:&lt;/span&gt; &lt;span class='l-Scalar-Plain'&gt;30&lt;/span&gt;
  &lt;span class='l-Scalar-Plain'&gt;sessions&lt;/span&gt;&lt;span class='p-Indicator'&gt;:&lt;/span&gt; &lt;span class='l-Scalar-Plain'&gt;100&lt;/span&gt;
  &lt;span class='l-Scalar-Plain'&gt;rate&lt;/span&gt;&lt;span class='p-Indicator'&gt;:&lt;/span&gt; &lt;span class='l-Scalar-Plain'&gt;100&lt;/span&gt;
  &lt;span class='l-Scalar-Plain'&gt;doc_size&lt;/span&gt;&lt;span class='p-Indicator'&gt;:&lt;/span&gt; &lt;span class='l-Scalar-Plain'&gt;100&lt;/span&gt;
  &lt;span class='l-Scalar-Plain'&gt;writes&lt;/span&gt;&lt;span class='p-Indicator'&gt;:&lt;/span&gt; &lt;span class='l-Scalar-Plain'&gt;10&lt;/span&gt;
  &lt;span class='l-Scalar-Plain'&gt;reads&lt;/span&gt;&lt;span class='p-Indicator'&gt;:&lt;/span&gt; &lt;span class='l-Scalar-Plain'&gt;10&lt;/span&gt;
  &lt;span class='l-Scalar-Plain'&gt;batchok&lt;/span&gt;&lt;span class='p-Indicator'&gt;:&lt;/span&gt; &lt;span class='l-Scalar-Plain'&gt;false&lt;/span&gt;
&lt;span class='l-Scalar-Plain'&gt;info&lt;/span&gt;&lt;span class='p-Indicator'&gt;:&lt;/span&gt;
  &lt;span class='l-Scalar-Plain'&gt;storage&lt;/span&gt;&lt;span class='p-Indicator'&gt;:&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;raid10,&lt;/span&gt;&lt;span class='nv'&gt; &lt;/span&gt;&lt;span class='s'&gt;4&lt;/span&gt;&lt;span class='nv'&gt; &lt;/span&gt;&lt;span class='s'&gt;disks,&lt;/span&gt;&lt;span class='nv'&gt; &lt;/span&gt;&lt;span class='s'&gt;ebs&amp;quot;&lt;/span&gt;
  &lt;span class='l-Scalar-Plain'&gt;anything&lt;/span&gt;&lt;span class='p-Indicator'&gt;:&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;stuff&amp;quot;&lt;/span&gt;
  &lt;span class='l-Scalar-Plain'&gt;more&lt;/span&gt;&lt;span class='p-Indicator'&gt;:&lt;/span&gt; &lt;span class='s'&gt;&amp;quot;foo&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;This configuration file specifies where the httperf executable lives, the host, port, user, password, and database to use for the test. Baracus puts all of the results and wsesslog files back into CouchDB for later consumption, the report_url is where you define this database.&lt;/p&gt;

&lt;p&gt;As I mentioned, Baracus uses httperf to perform benchmarks. Specifically it uses httperf&amp;#8217;s wsesslog feature. wsesslog is a simple file format that describes what httperf should do each session. Here&amp;#8217;s an example of an entry generated with Baracus that does an HTTP GET:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='yaml'&gt;&lt;span class='l-Scalar-Plain'&gt;/testdb/a12bf8572f788824dfd5169e2eb496ab method=GET&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Baracus creates two wsesslogs for each run, one for writes (POST) and one for reads (GET). Baracus generates these files based on a few items in your configuration. Specifically, the number of sessions, document size and how many reads or writes to do per session. Additionally in the configuration you can specify at what rate httperf should perform the operations within each wsesslog file. Baracus creates the wsesslog for writing with random data and creates the read file with random docs from &lt;em&gt;all&lt;/em&gt;docs. Since Baracus uses &lt;em&gt;all&lt;/em&gt;docs, it performs all the writes first. The above config will create 100 sessions with 10 writes and reads each at a rate of 100 per second. Each document will be roughly 100 bytes.&lt;/p&gt;

&lt;p&gt;The info section at the end of the config contains any additional information you may want to have tag along with your results. You can put anything you want in there; I generally use this to describe the system I just ran the tests on.&lt;/p&gt;

&lt;p&gt;Once you have a configuration you are happy with it&amp;#8217;s very simple to run your tests.&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='tcsh'&gt;&lt;span class='nv'&gt;$ &lt;/span&gt;baracus baracus.yml
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;This will print the standard httperf output as well as a tab delimited version. If you want to checkout the wsesslog files they will be written to the directory you ran Baracus in as well as to the results document in the reporting database. Here&amp;#8217;s what the results look like in Couch.&lt;/p&gt;

&lt;p&gt;&lt;img src='../images/baracus.jpg' alt='' /&gt;&lt;/p&gt;

&lt;p&gt;Baracus is meant to make repeatable benchmarking easy. If you have any questions, bugs or would like to contribute check out Baracus on &lt;a href='http://github.com/joewilliams/baracus'&gt;Github&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Cloudant at No:SQL (east)</title>
      <link>http://blog.cloudant.com/cloudant-at-nosql-east</link>
      <pubDate>Mon, 31 Aug 2009 00:00:00 PDT</pubDate>
      <author>Alan Hoffman</author>
      <guid>http://blog.cloudant.com/cloudant-at-nosql-east</guid>
      <description>&lt;p&gt;Cloudant&amp;#8217;s own Brad Anderson is helping to organize No:SQL (east), a conference centered around the latest nonrelational database systems. The conference will be held at the Georgia Tech Research Institute in Atlanta on October 28&amp;#8211;30. The description from the website reads:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;NoSQL East, a conference of non-relational data stores, aims to present the experiences of different companies using so-called &amp;#8216;NoSQL&amp;#8217; solutions in production.&lt;/p&gt;

&lt;p&gt;The reasons for using these new systems are varied, but often involve scale that relational solutions cannot achieve. We have a new tool in our toolbelts, and as you will see, some people are using them quite effectively.&lt;/p&gt;

&lt;p&gt;Join us in Atlanta as we discuss &amp;#8216;Big Data&amp;#8217; and the systems that are completely transforming how people look at data.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The organizers have a great venue picked out (courtesy of Georgia Tech) and an exciting group of speakers. A number of nonrelational systems will be covered, and Cloudant co-founder Mike Miller will be giving a talk on CouchDB. Anyone interested in the NoSQL space should really try to make it down to Atlanta to attend.&lt;/p&gt;

&lt;p&gt;Cloudant is one of two primary sponsors of the event, the other being &lt;span class='caps'&gt;GTRI&lt;/span&gt;. Many, if not all, of us will be attending the conference. We&amp;#8217;re always happy to talk about NoSQL, CouchDB, JQuery, The Bears winning the Superbowl, etc. You should come say hi.&lt;/p&gt;

&lt;p&gt;More information about No:SQL (east) can be found at &lt;a href='https://nosqleast.com/2009/'&gt;nosqleast.com&lt;/a&gt;. Check it out.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update (10/22/09):&lt;/strong&gt; Since posting the above, a couple other great companies, including Basho and Rackspace Cloud, have also joined on as sponsors for the event.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Well, how did I get here? – Talking Heads</title>
      <link>http://blog.cloudant.com/well-how-did-i-get-here-talking-heads</link>
      <pubDate>Wed, 08 Jul 2009 00:00:00 PDT</pubDate>
      <author>Alan Hoffman</author>
      <guid>http://blog.cloudant.com/well-how-did-i-get-here-talking-heads</guid>
      <description>&lt;p&gt;Dharmesh &lt;a href='http://onstartups.com/home/tabid/3339/bid/9008/Startup-Marketing-Tactical-Tips-From-The-Trenches.aspx'&gt;tells me&lt;/a&gt; that I&amp;#8217;m supposed to write a blog post explaining how we got to where we are. I&amp;#8217;ll try my best, but sometimes I feel like the guy in that Talking Heads song, looking around saying, &amp;#8220;This is not my beautiful house. This is not my beautiful wife.&amp;#8221; This company formed sometime between 2004 and 2008, but definitely around one of the rather large lunch tables on the first floor of the Stata Center at MIT. Adam, Mike, and I all worked in the same group in the physics department and every day we ate lunch around one of those oddly shaped tables. By January of 2008 came to the conclusion that we couldn&amp;#8217;t leave MIT without starting a company. We didn&amp;#8217;t really know what we wanted to do, but we did know 1) We were all fairly bright and industrious guys, 2) we enjoyed working together, and 3) we didn&amp;#8217;t want to go look for &amp;#8220;real&amp;#8221; jobs.&lt;/p&gt;

&lt;p&gt;Mike&amp;#8217;s original idea was for an automatic tamale maker. I&amp;#8217;m not kidding. That one got nixed when we found out we wereway behindalready.&lt;/p&gt;

&lt;p&gt;Eventually we decided to play to our strengths, which were in large-scale data processing and analysis. Our high-energy physics experiments generated some of the largest data sets in the world. It was our job to sift through the terabytes and petabytes to find rare particles and strange interactions. This is what we did for fun. Turns out that we&amp;#8217;re living in a data-centric world (more so every day) and many of the problems we had faced were popping up in the business world. What we wanted was a way to bring physics-style data analysis tools to the masses. All we had to do was build it.&lt;/p&gt;

&lt;p&gt;Toward the end of March someone sent me Paul Graham&amp;#8217;s essay &amp;#8220;A Student&amp;#8217;s Guide to Startups.&amp;#8221; I had never heard of PG before, but his essay resonated with me, especially the part about getting to stop treading water. I stumbled upon YCombinator literally by clicking random links on Graham&amp;#8217;s website. As it turned out, this YCombinator Company was pretty well known and respected, and they were asking for applications for startups that needed funding. Hey! We were a startup that needed funding and we were already in Boston. So we applied, almost on a whim. And to be honest, we were a little bit floored when we got accepted.&lt;/p&gt;

&lt;p&gt;After a number of back-and-forths with PG and other YC companies, we decided to focus on building a database designed for the specific needs of the web (hence our tagline &amp;#8220;A database for the web,&amp;#8221; clever huh?) One that would scale horizontally, could run on commodity hardware in a fault tolerant fashion, with a simple interface, and a powerful built-in analysis engine. We stumbled on Apache CouchDB, which at the time was in its relative infancy, and were very impressed with what they had built, especially the natural JSON-over-HTTP interface. We decided to take Couch and build it into a true &amp;#8216;cloud-ready&amp;#8217; database.&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s been more than a year since we started working on Cloudant. Since then a huge community has sprung up around CouchDB. Our own Adam Kocoloski was tapped to be an official committer on the project. We were able to raise significant additional funding late last year, just as the economy was collapsing &amp;#8211; a true testament to the vision of our &lt;a href='http://www.avalonvi.com/'&gt;amazing VC&lt;/a&gt;. The Cloudant Team has grown from 3 to 6 as we were able to convince a few top-notch hackers to help us build our vision.&lt;/p&gt;

&lt;p&gt;We&amp;#8217;ll soon be releasing a beta version of Cloudant: CouchDB-in-the-cloud. It seems as though we were on to something when we began tossing ideas around in the Stata Center 18 months ago. The NoSQL movement, which is gaining steam, indicates the need for a new type of database, one built for the specific needs of web applications. At Cloudant we hope to fill that need. If you want to learn more or sign-up to be notified of our impending release, &lt;a href='https://cloudant.com/'&gt;click here&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    

  </channel> 
</rss>
