On Oct 20, 2008, at 3:31 PM, Nick Johnson wrote:


If you have 'user' docs and 'email' docs (which may simply contain nothing but a reference to the user that owns the email), you can attempt to insert both a new user doc and a new email doc in a single bulk write transaction.
The transaction will fail if either one already exists.

This doesn't really work with my proposed sharding method, however, since you can't guarantee both entities will hash to the same shard. You could insert one doc then the other, and if the second insert fails, roll back the
first one, though.


yup, basically what i'm doing, the only issue is that the 412 from a bulk upload tells you not which operation failed, so i'm doing it peice-wise sorta like this

http://s3.amazonaws.com/drawohara.com.snippets/create_user_with_unique_fields_rb.html

notice the object isn't *really* a user until the last step, once the doc has been created and each of it's fields inserted in a way that ensures they are unique. because it's peicewise i can let the user know which bit was non-unique. because the unique docs track their parent a kill -9 can be recovered from.

it looks that, more and more, any real world situation is going to be *massively* simplified by having a single write master. another, similar, approach, is to use a rdbms for generating these sorts of unique bits and possibly indices of documents, but to use to store the actual object graphs.

cheers.

a @ http://codeforpeople.com/
--
we can deny everything, except that we have the possibility of being better. simply reflect on that.
h.h. the 14th dalai lama



Reply via email to