>
> As long as the conflict resolver knows that two writers each tried to
> increment, then it can increment twice. The conflict resolver must know
> about the semantics of "increment" or "decrement" or "string append" or
> "binary patch" or whatever other merge strategy you choose. You'll register
> your "strategy" with Cassandra and it will apply it. Presumably it will also
> maintain enough context about what you were trying to accomplish to allow
> the merge strategy plugin to do it properly.
>
>
>> That is to say, my understanding was that vector clocks would be
>> required but not sufficient for reconciliation of concurrent value
>> updates.
>
>
The way I envisioned "eventually consistent counters" working would require
something slightly more sophisticated... but not too bad. As incr/decr
operations happen on distributed nodes, each node would keep a (vector
clock, delta) tuple for that node's local changes. When a client fetched the
value of the counter the vector clock deltas and the reconciled count would
be combined into a single result. Similarly, when a replication /
hinted-handoff / read-repair reconciliation occurred the counts would be
merged into a single (vector clock, count) tuple.

Maybe there's a more elegant solution, but that's how I had been thinking
about this particular problem.

Mike

Reply via email to