On 06/04/2010 18:53, Tatu Saloranta wrote:
>> I've read all about QUORUM, and it is generally useful, but as far as I
>> can tell, it can't give me a transaction...
>>     
> Correct. Only individual operations are atomic, and ordering of
> insertions is not guaranteed.
>   
As I thought.
> I think there were some logged Jira issues to allow grouping of
> operations into what seems to amount to transactions, which could help
> a lot here... but I can't find it now (or maybe it has only been
> discussed so far?).
> If I understand this correctly, it would just mean that you could send
> a sequence of operations, to be completed as a unit (first into
> journal, then into memtable etc).
>   

I think we're on the same page.  I need an atomic 'transaction'
affecting multiple keys - so I write a tuple of all the updates
(inserts/deletes) as a single value into a 'merge-pending' keyset... and
(somehow - perhaps with memtable) I modify data read from  other keysets
to be as-if this 'merge-pending' data had already been been applied to
the independent keysets to which it relates.  A process/thread on each
node would continuously attempt to apply the multiple updates from the
merge-pending data before deleting it and dropping the associated
merge-data from the in-memory transformations. Latency should be very
low (like with a log-based file-system) and throughput should be
reasonably high because there should be a lot of flexibility in batch
processing the 'merge-pending' data.

This way, if there's a failure during merging, there's sufficient
durable record to complete the merge before serving any more remote
requests.  To the remote client, it appears indistinguishable from an
atomic transaction that affected more than one key.

Reply via email to