There are no transactions or locking in cassandra, if you want them you need to use Zookeeper or similar.
a) I think you are asking about isolation, eg. something like REPEATABLE READ or better transaction isolation for a read, this is not supported. AFAIK if you have a long running read that puts column FOO into the result it *may* be possible for that column to be deleted before the read completes.
b) If multiple clients are writing to the same column at roughly the same time, one with the highest timestamp will eventually win. However if your app relies of multiple threads updating the shared state cassandra may not be the best match.
Hope that helps.
On 21 Oct, 2010,at 01:34 PM, Wicked J <email@example.com> wrote:
I'm trying to persist the contents of my app. objects to Cassandra. The objects in here are loosely modeled on key value (KV) stores. If the KV store is extended from HashMap and mapped to a ColumnFamily with put and get ops mapping to insert/read from Cassandra. Then my questions are:
a) What operations in Cassandra can be considered to be atomic - reads? Is reading (of rows by concurrent threads/clients) atomic across one Column Family or across multiple (e.g. two) Column Families? assume get_range_slices ..with ConsistencyLevelQUORUM
b) Consistency of write/update/delete ops across CF's by concurrent clients/threads? In order to make them consistent or atomic, would insert(..) with ConsistencyLevel.QUORUM be a good idea. Or would you recommend external components like ZooKeeper or Hazelcast etc to coordinate such operations?