On Wednesday, 29 January 2014 at 21:19, Jens Alfke wrote:
> > On Jan 29, 2014, at 5:48 AM, Benoit Chesneau <[email protected] > (mailto:[email protected])> wrote: > > > I wonder if someone already thought to implement distributed counters using > > couchdb? > > > > Quick and dirty idea: Implement the counter as a document storing a map from > UUIDs to deltas (1 or -1). To modify the count, add a new UUID key whose > value is the amount to increment/decrement by. The value of the counter is > the sum of all the increment values. When there's a conflict, just merge > together the two documents keeping all key/value pairs that occur in either > map. > > You can store more info if you want by using something descriptive in place > of the UUID, for example a username+timestamp. Just as long as it's > guaranteed to be unique. > Thats fragile/brittle in a distributed system. Imagine you had a large number of conflicts, with a very complicated revision history - the simple merge isn’t practical. You need the inc/dec’s to be standalone documents and do the summing in the database via a view. A similar pattern can work for sets, I think, but requires a more complex view, and possibly a bit more logic outside of the DB. Cheers Simon
