Ok, so based on everyone's input it seems that I need to put some sort of server in front of Cassandra to handle locking and exclusive access.
I am planning on building a system (DMS) that will store resources (document, images, media, etc) using Cassandra for data. As my target user is going to be someone without any understanding of a 'diff' I have elected for locking instead of conflict resolution in versions. This means I require a method of exclusive access. Suggestions have been Cage and Zookeeper, I'm going to be writting this is C# for .net and mono. Any other suggestions besides just building a simple solution? I currently have an application sitting between the end client and Cassandra to handle business logic, by the sound of it I should just implement a method of communication between however many "servers" I will have (it will support distributed deployment) to apply a lock to the resource, system wide. I understand the technical aspects of how that should work; however, before I begin that, does anyone have any suggestions or tips? Thanks, - Lucas Nodine On Sun, Sep 26, 2010 at 4:34 PM, Jonathan Ellis <jbel...@gmail.com> wrote: > Atomic (all of it will complete, or none), but not isolated (readers > can see parts of a write before they see the whole thing). > > On Sun, Sep 26, 2010 at 1:19 PM, Aaron Morton <aa...@thelastpickle.com> > wrote: > > Mutations against a single key on a single machine are > > atomic http://wiki.apache.org/cassandra/FAQ#batch_mutate_atomic > > > > Aaron > > On 27 Sep, 2010,at 07:48 AM, Norman Maurer <nor...@apache.org> wrote: > > > > To be more clear (maybe I was not before). BatchMutate is not atomic. > > So it only "batch up" mutates to reduce overhead. So it can be that > > you will receive data from it even if the whole operation is not > > complete or will not complete. > > > > bye, > > Norman > > > > > > 2010/9/26 Norman Maurer <nor...@apache.org>: > >> Comments inside.. > >> > >> 2010/9/26 Lucas Nodine <lucasnod...@gmail.com>: > >>> I'm looking at a design where multiple clients will connect to > Cassandra > >>> and > >>> get/mutate resources, possibly concurrently. After planning a bit, I > ran > >>> into the following scenero for which I have not been able to research > to > >>> find an answer sufficient for my needs. I have found where others have > >>> recommended Zookeeper for such tasks, but I want to determine if there > is > >>> a > >>> simple solution before including another product in my design. > >>> > >>> Make the following assumption for all following situations: > >>> Assuming multiple clients where a client is someone accessing Cassandra > >>> using thrift. All reads and writes are performed using the QUORUM > >>> consistency level. > >>> > >>> Situation 1: > >>> Client A ("A") connects to Cassandra and requests a QUORUM consistency > >>> level > >>> get of an entire row. At or very shortly thereafter (before A's > request > >>> completes), Client B ("B") connects to Cassandra and inserts (or > mutates) > >>> a > >>> column (or multiple columns) within the row. > >>> > >>> Does A receive the new data saved by B or does A receive the data prior > >>> to > >>> B's save? > >> > >> Shoud receive A stuff. > >>> > >>> Situaton 2: > >>> B connects and mutates multiple columns within a row. A requests some > >>> data > >>> therein while B is processing. > >>> > >>> Result? > >> > >> Depends.. is it done in BatchMutate or not ? > >> > >>> > >>> Situation 3: > >>> B mutates multiple columns within multiple rows. A requests some data > >>> therein while B is processing. > >>> > >>> Result? > >> > >> See above.. > >> > >>> > >>> Justification: At certain points I want to essentially lock a resource > >>> (row) > >>> in cassandra for exclusive write access (think checkout a resource) by > >>> setting a flag value of a column within that row. I'm just considering > >>> race > >>> conditions. > >>> > >> You will need to use cages or something like that.. > >> > >> > >>> Thanks, > >>> > >>> Lucas Nodine > >> > >> Bye, > >> Norman > >> > > > > > > -- > Jonathan Ellis > Project Chair, Apache Cassandra > co-founder of Riptano, the source for professional Cassandra support > http://riptano.com > -- Lucas J. Nodine Assistant Labette County Attorney 201 S. Central, Suite B Parsons, KS 67357 (620) 421-6370