[ZODB-Dev] [OT] NoSQL

Shane Hathaway shane at hathawaymix.org
Sat Nov 14 17:33:47 EST 2009


Wichert Akkerman wrote:
> On 11/13/09 21:33 , Shane Hathaway wrote:
>> I've been studying how to build an enormous database based on what I
>> know.  There are an incredible number of distributed databases these
>> days, but all of them concern me in one way or another.
> 
> Can you share some of those concerns with us? I'ld be interested to hear 
> what kind of problems you see.

The best article I've found is a simple presentation and overview:

http://highscalability.com/blog/2009/11/5/a-yes-for-a-nosql-taxonomy.html

The article neatly categorizes a lot of the NoSQL databases.  It 
suggests that document stores have the right level of complexity.  Wide 
columnar stores like Cassandra could be too complicated to gain a lot of 
traction, while simpler databases might lack features we would normally 
take for granted.

In other articles, I learned about CouchDB conflict resolution.  CouchDB 
allows any conflict and it stores both conflicting values, expecting the 
application to resolve the conflict later.  Clearly, CouchDB is designed 
to solve the PDA use case: I change a contact's phone number differently 
on my PDA and my desktop, then when I sync, I click some UI button to 
indicate which is correct.  I think that sort of conflict resolution 
would cause security holes for the application I am working on, but it 
would probably work for a lot of other applications.

Current versions of CouchDB expect applications to scale using 
replication.  Replication is not a substitute for sharding.  The 
couchdb-lounge project seems to be solving that with proxies:

http://tilgovi.github.com/couchdb-lounge/

The Mongo DB guys have a pretty thorough and fair comparison of CouchDB 
and Mongo:

http://www.mongodb.org/display/DOCS/Comparing+Mongo+DB+and+Couch+DB

The bottom of the page lists use cases for MongoDB.  It says people 
building a system with "very critical" transactions should choose a 
traditional RDBMS.  That seems like reasonable advice for the 
application I'm building, except that I consider ZODB to be at least as 
reliable as an RDBMS.  (RelStorage uses a subset of RDBMS functionality 
that I have found to be reliable.)

I think that by "very critical", the MongoDB authors are referring to 
applications that must not allow conflicting updates.  Conflict 
resolution is probably my main concern with all of these new databases. 
  I have no doubts about ZODB's conflict resolution policy, while I can 
imagine a variety of different policies these other databases might 
implement.  A "four or five dimensional hash" like Cassandra might even 
have a conflict resolution policy that changes with every release.

Shane


More information about the ZODB-Dev mailing list