NoSQL Zone is brought to you in partnership with:

Mitch Pronschinske is a Senior Content Analyst at DZone. That means he writes and searches for the finest developer content in the land so that you don't have to. He often eats peanut butter and bananas, likes to make his own ringtones, enjoys card and board games, and is married to an underwear model. Mitch is a DZone Zone Leader and has posted 2569 posts at DZone. You can read more from them at their website. View Full User Profile

CouchDB Turns it Up to 0.11

03.31.2010
| 8514 views |
  • submit to reddit
The NoSQL-classified Apache CouchDB is a document-oriented store that specializes in running web apps offline.  The project recently left alpha and beta statuses behind with its version 0.11.0 release.  However, CouchDB was in production use by Ubuntu and other companies before this stable milestone.  Version 0.11.0 has finished adding new features in preparation for the release of a 1.0 version.  

CouchDB is used to power the Ubuntu One service, which can store and synchronize data.  Mozilla is currently experimenting with CouchDB in their Raindrop project and Sauce Labs is using it for all of their database needs.  Now that CouchDB 0.11 is out of beta, we'll see if more organizations are willing to try implementing the data store's unique features.

The latest release has fixed several bugs and now offers support for building windows installers, "raw" binary collation, and replication enhancements.  Here is the list of changes:

  • Added support for building a Windows installer as part of ‘make dist’.
  • Added optional ‘raw’ binary collation for faster view builds where Unicode collation is not important.
  • Improved view index build time by reducing ICU collation callouts.
  • Added option to implicitly create replication target databases.
  • Improved view information objects.
  • Provide Content-MD5 header support for attachments.
  • Improved the statistics calculations to use an online moving windowalgorithm.
  • Adds batching of multiple updating requests, to improve throughput with many writers.  
  • Improved speed and concurrency of config lookups.
  • Removed the now redundant couchbatchsave module.
  • Adds configurable compression of attachments.
  • Added default cookie-authentication and users db.
  • Added per-db reader access control lists.
  • Added per-db security object for configuration data in validation functions.
  • Added URL Rewriter handler.
  • Added proxy authentication handler.
  • Added ability to replicate documents by id.
  • Added virtual host handling.
  • Uses json2.js for JSON serialization compatiblity with native JSON.
  • Various improvements to the Futon UI.

The CouchDB Futon UI



Bug Fixes:

  • Bug fix for partial updates during view builds.
  • Bug fix for building couch.app’s module list.
  • Fixed a problem with statistics timers and system sleep.
  • Bug fix for premature termination of chunked responses.
  • Fixed an edge case for HTTP redirects during replication.
  • Fixed HTTP timeout handling for replication.
  • Fixed query parameter handling in OAuth’d replication.
  • Fixed a bug preventing mixing languages with lists and views.
  • Avoid OS process leaks in lists.
  • Avoid leaking file descriptors on automatic replication restarts.

CouchDB is perhaps best known for "Relaxing" offline JavaScript.  The database has an innovative replication strategy that allows its nodes to reconnect, sync, and reconcile differences after being disconnected for long periods of time.  CouchDB is written in Erlang and it can handle simple data types or more complex objects (ordered lists, etc.) for its values.  CouchDB nodes can exchange data as JSON objects using a RESTful API.  This process can be conducted using MapReduce.

CouchDB is already beginning to enable new distributed types of applications and data. NoSQL blogger Eric Florenzano predicts that CouchDB will one day become relevant to anyone who owns a computer: "I imagine that some day every computer will come with CouchDB pre-installed and it'll be a data store that we use without even knowing that we're using it."