On 13/03/2009, at 10:45 AM, Chris Anderson wrote:

It seems like most of these problems just go away if you
put all the data that needs to be edited transactionally into a single
document.

There is a tradeoff between document granularity and concurrency. A simplified example - if you have user documents and you need to transactionally move a token from one to the other, you can't solve this problem by putting both users in one document, because the operation is arbitrary, between any two users. Putting all the users in one document kills concurrency.

There might be ways to restructure the data model to get around any one problem (such as inversion of link directions or reifying the token in my example), but in practice I've found that multiple refactorings don't always co-operate, and the data model then affects the UI because sometimes relationships need to model a user's expectation, rather than what is convenient for the software.

I like your bank example - a useful answer to questions such as this might be a catalogue of model transformations and alternatives.

Without impugning it's awesomeness, CouchDB will not be the right tool for every job, and the cost of alignment with CouchDB semantics needs to be considered as part of a design - that isn't perculiar to CouchDB.

Antony Blakey
-------------
CTO, Linkuistics Pty Ltd
Ph: 0438 840 787

There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies.
  -- C. A. R. Hoare


Reply via email to