incubator-couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jan Lehnardt <>
Subject Re: Newbie questions
Date Wed, 24 Sep 2008 07:46:11 GMT

On Sep 24, 2008, at 2:15 , Ayende Rahien wrote:

> First, I must admit that I am a complete newbie with Erlang.
> Nevertheless, I tried to read couch db source in order to see if I can
> actually understand what is going on.
> You can see the results here:

> I would be happy if someone could point out all the gross  
> inaccuracies that
> are undoubtedly there.

I'm only halfway through, but I'll send in my comments soon.

> Anyway, I had a few questions that I hope I'll be able to get some  
> answers
> for.
> merge conflicts - how does couch db decides on "best" revision?

It arbitrarily choses one revision. The only guarantee that is made is  
that for
the same conflict all nodes in a CouchDB cluster choose the same latest
revision to ensure data consistency.

> does couchdb store all documents on all servers? implements sharding?
> from browsing the code, it seems like all documents exists on all  
> servers,

For the moment, yes all docs on all nodes, but we will have sharding.  
consistent hashing in your data storage layer could already emulate  

> and it is up to the servers management to decide how to replicate  
> between
> them. Something like master / 2 slaves between each three nodes  
> should do
> quite well, I imagine.


> Two questions that are of particular interest to me, and I haven't  
> been able
> to get from the code so far are:
> - How is the data stored? I think that it is a binary tree on disk,  
> but I am
> not following how updates to that can be safe to do so with ACID  
> guarantees.

Writes are serialized. Only one write can happen at a time and it is  
flushed and committed to disk (2 x fsync()) before another write comes  
in. Writes
are append-only. No data is ever overwritten. This gives us the ACID &  
buzzcronyms :-)

> - How are views stored?

In the same way as a database.


View raw message