[erlang-questions] CouchDB - An Erlang Project
Thu Jul 3 16:09:12 CEST 2008
Dear Erlang Community,
I'd like to tell you about a project that you might have
heard about, but don't know a lot about:
CouchDB is written an Erlang (why would I write otherwise),
but not very well established in the Erlang community. I'd
like to change this fact with the help of this email.
I went to the Erlang eXchange last week only to discover
that when I tell you guys about CouchDB, you get very
enthusiastic. Now, not all of you were in London and
I'd like you to give a chance to get enthusiastic, or at
least interested. (Sounds a bit like I would make a decent
sales person, not bad for a programmer...)
CouchDB is a distributed document database written in
less then 7k lines of pure Erlang (with a bit of C mixed in).
Here's the pitch:
Most data is not inherently relational, yet relational
databases are often the default when it comes to
storing data. The downside is that an RDBMS is hard
to learn and use upfront and hard to scale later. You
have been working with non-relational databases for
decades, you know that they are easier to use and
easier to scale.
CouchDB's main API is RESTful. It talks HTTP natively.
This helps to reduce the learning curve further since
everybody knows HTTP and all our tools support HTTP.
All you need to talk to CouchDB is a browser!
CouchDB stores data in the JSON format (through the API
and in Erlang terms internally). It targets not only Erlang
developers but everybody and JSON allows it to read and
write everybody's data.
CouchDB is built for concurrency. It stores data in an
ACID compliant MVCC data store. It supports any
number of parallel read and serialised write access.
The data storage module is optimised to reduce
hard-drive head seeks on reads and writes. It never
overwrites data that is safe on disk and as a result,
when it reports a write operation to be finished, the
database files are guaranteed to be consistent on
disk. If it crashes or if the hardware goes away,
CouchDB just restarts later and is up and running
without the need to run any lengthy consistency checks.
To make sense of the no-schema data you can store
with CouchDB, it support views. A map-reduce powered
mechanism that allows you to filter, collate and
aggregate your data that can be massively parallelised.
A single-node database is no good in the modern
computing world. To mitigate this problem CouchDB
comes with a world-class replication system (that is
influenced by the Lotus Notes database, but don't tell
anybody!). Replication solves the general problem
of data synchronisation. Be it for fault tolerance,
load balancing or distributed- (and offline-) work
environments. It comes with automatic conflict
detection and resolution. Pretty awesome.
Finally, CouchDB is free software released under the
BSD-like Apache 2.0 license.
for a more complete overview of what CouchDB wants to be.
A lot of things are working today and are working well, but it
still misses a few crucial features. Maybe you can jump aboard
and help out? If you do, get in touch.
Thanks for listening, this was a long read and I apologise,
but I couldn't find less words to tell the same. To wrap
You guys seem to be running an awesome party,
can we join?
PS: You can find CouchDB at http://couchdb.org/ and you
can even follow it on Twitter at http://twitter.com/CouchDB
More information about the erlang-questions