incubator-couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Attila Nagy <...@fsn.hu>
Subject Picking first free document from database
Date Fri, 04 Jun 2010 09:57:51 GMT
Hello,

I would like to build an application on CouchDB, which allocates free 
documents to the users. Each document would have a status, which 
indicates whether it's available for assigning, or not.
Because of the great number of new users wanting available documents, I 
think the default model of writing a view, which lists available 
documents, and picking one from it (for efficiency limiting the number 
of return values to one and picking that) won't work. The contention 
will make applications do a lot of conflicts, which slows down (or even 
make it impossible) the new assignments, and is a lot of unnecessary 
load for both the server and the client applications.

So I would need a method, which would pick the first document from the 
database which has "available" in its status field, and immediately 
(atomically) set it to "unavailable", and return the document ID to the 
caller.

I've found two posts, which do something similar (server side changes to 
documents):
http://blog.couch.io/post/410290711/atomic-increments-in-couchdb
http://wiki.apache.org/couchdb/Document_Update_Handlers

I'm very new to CouchDB, and I can't yet to see whether these can be 
adapted to the above task (these two are tied to a given document).

So in short I would need: a server-side function, which traverses on all 
entries (uses a view for efficiency?), picks the first one which has 
status: available, sets that to unavailable and returns the docID to the 
client. And of course all of this atomically, meaning no two calls to 
this method should give back the same docID.

Is this doable somehow with CouchDB?

Thanks,

Mime
View raw message