2

I know that as of 0.8, Cassandra guarantees that row updates are atomic.

However, if I prepare (using MutationBatch) several row modifications or modifications across several column families, is it guaranteed that the rows will be updated in the order that in which I set them up? e.g. If I have

  • Update CF 1, Row 1
  • Update CF 1, Row 2
  • Update CF 2, Row 3

is it possible for CF 2 to be updated while CF 1 remains unchanged due to failure?

What happens if I had set up:

  • Update CF 1, Row 1, Column A
  • Update CF 1, Row 2
  • Update CF 2, Row 3
  • Update CF 1, Row 1, Column B

Alternatively, should I be preparing instead three MutationBatches and executing them separately?

Nan L
  • 361
  • 1
  • 3
  • 9

2 Answers2

2

All updates are done in parallel, so no ordering is ever guaranteed. Partial success will result in the batchlog taking over and finishing the batch starting in 1.2: http://www.datastax.com/dev/blog/atomic-batches-in-cassandra-1-2

jbellis
  • 19,347
  • 2
  • 38
  • 47
1

Playorm provides flush support which pushes all your persists down in one shot so it is sort of sends it as a unit of work(NOT a transaction)

http://buffalosw.com/wiki/flush-support/

Easility
  • 716
  • 2
  • 8
  • 19
  • 1
    Yes, I wanted to further elaborate here. Many may send only half their data down then do something then the next half but if there is an exception in application code, you can end up with corrupt data in your storage then. the flush support here helps with that in that all your stuff is sent down in a unit of work. On the cassandra side though, things are not all atomic at once – Dean Hiller Apr 03 '13 at 12:34