Jonathan, thanks for this pointer. I've new had a look at contrib/mutex.
Coming back to my point, the use of Zookeeper within Cassandra for the
purpose of then being able to deliver a "unique key generation function" out
of Cassandra seems like overkill, in this case the application could use
Zookeeper directly to accomplish this task.

However, I think we're already more than half-way without Zookeeper: the
problem is, that after the "concurrent" insert, both reads might try to
repair in the opposite direction, thus the inconsistency is not deleted but
rather only turned upside down. This could be prevented by introduction of a
tie-breaker.

Imagine the following rule: if we are in doubt whether to repair a column
with timestamp T (because two values X and Y are present within the cluster,
both at timestamp T), then we always repair towards X if md5(X)<md5(Y). In
this case, even after an inconsistency on the first insert, this would be
cleared by any node that triggers a repair afterwards.

And then you're done: a Cassandra can create a unique transaction ID by
inserting a column with the ID this clients wants to grab as key, and some
random stuff as value, then the clients reads the just inserted column, and
if the ID and the same random stuff is there - voila, the ID is unique for
this client.

-Roland



2010/4/29 Jonathan Ellis <jbel...@gmail.com>

> 2010/4/28 Roland Hänel <rol...@haenel.me>:
> > Thanks Jonathan, that hits exactly the heart of my question.
> Unfortunately
> > it kills my original idea to implement a "unique transaction identifier
> > creation algorithm" - for this, even eventual consistency would be
> > sufficient, but I would need to know if I am consistent at the time of a
> > read request.
>
> right, for that kind of thing you'd really want to use contrib/mutex
>
> --
> Jonathan Ellis
> Project Chair, Apache Cassandra
> co-founder of Riptano, the source for professional Cassandra support
> http://riptano.com
>

Reply via email to