Whether or not it can be made to work, it seems a poor fit for
Cassandra.  Why not use Zookeeper?

On Sun, Mar 14, 2010 at 9:46 AM, Toby DiPasquale <t...@cbcg.net> wrote:
> Hi all,
>
> I'm trying to write an application using Cassandra which requires the
> use of a global, monotonically-increasing counter. I've seen the
> previous threads on this subject which basically say that this can't
> be done in Cassandra as is, but I think I've come up with a method
> that might work. I wanted to get the list's feedback on whether or not
> this method is workable:
>
> * Each client maintains its own monotonically-increasing counter as a
> row in Cassandra
> * When a client wants to increment the counter, it will:
>  * increment its own counter key using a quorum write
>  * read all keys in the CF using a quorum read
>  * the sum of the values is then the value of the counter
>
> This method is robust against nodes coming and going (new nodes just
> get a new counter and dead nodes never increase their counter again).
> It also doesn't matter for my application if some possible values for
> the counter are skipped over, as long as every value is greater than
> the last. I believe this scheme to be commensurate to a vector clock,
> no?
>
> My question would be: assuming we're using both quorum reads and
> writes, is it possible that clients A and B could race in the
> following manner:
>
> * A updates its counter
> * B updates its counter
> * A reads the keys to get sum X
> * B reads the keys to get the same sum X
>
> ...thus violating the ever-increasing constraint?
>
> Google App Engine suggests a similar method for doing global counters
> on Datastore: 
> http://code.google.com/appengine/articles/sharding_counters.html.
> I'm troubled by their implementation, though, because the reads on the
> list of counters are not transactional and are potentially subject to
> the same race that I've described above.
>
> Any thoughts/ideas?
>
> --
> Toby DiPasquale
>

Reply via email to