Thanks Ben and all experts. I am almost a newbie to NoSQL world and thus I have a very general question how does consumer application of Cassandra/other NoSQL technologies deal with atomicity & other factors when there is need to normalize data. For example:
Let us say I have requirement for queries - find all hotels by name - Find all hotels by Point of Interest (POI) - Find POI near by a hotel For these queries I would end up more or less in following tables hotels_by_name(hotel_name,hotel_id,city,........) primary key - hotel_name hotels_by_poi(poi_name,poi_id,hotel_id,hotel_name,......) primary key - poi_name poi_by_hotel(hotel_id,poi_name,poi_id,poi_loc,hotel_name,......) primary key - hotel_id So, If I have to add/remove a hotel from/into hotels_by_name , I may need to add/remove into/from tables hotels_by_poi/poi_by_hotel. So, here my assumption is these operations would need to be atomic( and may be supporting other ACID properties) . How these kind of operations/usecases being handled in Cassandra/NoSQL world? Appreciate your response. Thanks, Rajesh On Fri, Apr 20, 2018 at 11:07 AM, Ben Slater <ben.sla...@instaclustr.com> wrote: > The second SO answer just says the partitions will be collocated (ie on > the same server) not that the two tables will use the same partition. In > any event, Cassandra does not have the kind of functionality you are > looking for. The closest is logged batch but as Sylvain said, "all that > guarantees is that if some operations of a batch are applied, then all of > them will > *eventually* get applied” and “batch have no rollback whatsoever”. > > As Cassandra won’t help you here, a potential (although admittedly more > complex) option is to do implement compensating transactions at the > application level (eg in the catch block delete the records that were > inserted). That, however, does not provide you the isolation part of ACID. > > You also tend to find that if you have properly denormalised your data > model for Cassandra there is less requirement for these type of batched > updates. > > Cheers > Ben > > On Fri, 20 Apr 2018 at 15:21 Rajesh Kishore <rajesh10si...@gmail.com> > wrote: > >> Re-framing my question: >> >> So, it means that having different tables will not result into same >> partition even though you have same partition key. >> Ex. >> TableA( Partionkey(id)) >> TableB( Partionkey(id)) >> TableC( Partionkey(id)) >> >> >> and as part of batch operation I am somehow providing same id say "20" >> It wont be considered as Atomic as it will result into different >> partition key and there would not be any way to rollback ? >> The same is being claimed in https://stackoverflow.com/ >> questions/36700859/does-the-same-partition-key-in- >> different-cassandra-tables-add-up-to-cell-theoret >> >> Now, the other forum says that how we can keep two tables in same >> partition >> https://stackoverflow.com/questions/34294830/how-to- >> keep-2-cassandra-tables-within-same-partition >> >> Which one is correct ? Please confirm >> >> Basically , our requirement is - we should be able to achieve similar >> functionality as that of JDBC >> try { >> txn.start() >> operation a >> operation b >> >> ...... >> operation n >> txn.commit(); >> } catch (Exception e) >> { >> txn.rollback() >> } >> >> Thanks in advance. >> >> Regards, >> Rajesh >> >> On Fri, Apr 20, 2018 at 9:38 AM, Rajesh Kishore <rajesh10si...@gmail.com> >> wrote: >> >>> So, it means that having different tables will not result into same >>> partition even though you have same partition key. >>> Ex. >>> TableA( Partionkey(id)) >>> TableB( Partionkey(id)) >>> TableC( Partionkey(id)) >>> >>> >>> and as part of batch operation I am somehow providing same id say "20" >>> It wont be considered as Atomic as it will result into different >>> partition key and there would not be any way to rollback ? >>> The same is being claimed in https://stackoverflow.com/ >>> questions/36700859/does-the-same-partition-key-in- >>> different-cassandra-tables-add-up-to-cell-theoret >>> >>> Please confirm >>> >>> Thanks in advance. >>> >>> Regards, >>> Rajesh >>> >>> >>> >>> On Thu, Apr 19, 2018 at 3:10 PM, Jacques-Henri Berthemet < >>> jacques-henri.berthe...@genesys.com> wrote: >>> >>>> When using BATCH on multiple tables you’ll need to use a LOGGED batch. >>>> When you send the request, it will be written to the batch log of all >>>> (relevant) nodes, when this write is successful it will be “accepted” >>>> and nodes will try to apply the batch operations. If for any reason a >>>> statement fails the node will keep retrying forever. In that case you may >>>> see partially applied batch until it’s fixed. >>>> >>>> >>>> >>>> Note that you can’t mix BATCH and LWT on different tables/partitions. >>>> >>>> >>>> >>>> You can get more details here: >>>> >>>> http://cassandra.apache.org/doc/latest/cql/dml.html#batch >>>> >>>> https://inoio.de/blog/2016/01/13/cassandra-to-batch-or-not-to-batch/ >>>> >>>> *--* >>>> >>>> *Jacques-Henri Berthemet* >>>> >>>> >>>> >>>> *From:* Rajesh Kishore [mailto:rajesh10si...@gmail.com] >>>> *Sent:* Thursday, April 19, 2018 11:13 AM >>>> *To:* user@cassandra.apache.org >>>> >>>> *Subject:* Re: Does Cassandra supports ACID txn >>>> >>>> >>>> >>>> Thanks for the response. Let me put my question again wrt a example >>>> >>>> I want to perform a atomic txn say insert/delete/update on a set of >>>> tables >>>> >>>> TableA >>>> >>>> TableB >>>> >>>> TableC >>>> >>>> When these are performed as batch operations and let us say something >>>> goes wrong while doing operation at TableC >>>> >>>> Would the system rollback the operations done for TableA TableB ? >>>> >>>> -Rajesh >>>> >>>> >>>> >>>> >>>> >>>> On Thu, Apr 19, 2018 at 1:25 PM, Jacques-Henri Berthemet < >>>> jacques-henri.berthe...@genesys.com> wrote: >>>> >>>> Cassandra support LWT (Lightweight transactions), you may find this doc >>>> interesting: >>>> >>>> https://docs.datastax.com/en/cassandra/3.0/cassandra/dml/ >>>> dmlDataConsistencyTOC.html >>>> >>>> >>>> >>>> In any case, LWT or BATCH you won’t have external control on the tx, it >>>> ’s either done or not done. In case of timeout you won’t have a way to >>>> know if it worked or not. >>>> >>>> There is no way to rollback a statement/batch, the only way is to send >>>> an update to modify the partition to its previous state. >>>> >>>> >>>> >>>> Regards, >>>> >>>> *--* >>>> >>>> *Jacques-Henri Berthemet* >>>> >>>> >>>> >>>> *From:* DuyHai Doan [mailto:doanduy...@gmail.com] >>>> *Sent:* Thursday, April 19, 2018 9:10 AM >>>> *To:* user <user@cassandra.apache.org> >>>> *Subject:* Re: Does Cassandra supports ACID txn >>>> >>>> >>>> >>>> No ACID transaction any soon in Cassandra >>>> >>>> >>>> >>>> On Thu, Apr 19, 2018 at 7:35 AM, Rajesh Kishore < >>>> rajesh10si...@gmail.com> wrote: >>>> >>>> Hi, >>>> >>>> I am bit confused by reading different articles, does recent version of >>>> Cassandra supports ACID transaction ? >>>> >>>> I found BATCH command , but not sure if it supports rollback, consider >>>> that transaction I am going to perform would be on single partition. >>>> >>>> Also, what are the limitations if any? >>>> >>>> >>>> >>>> Thanks, >>>> >>>> Rajesh >>>> >>>> >>>> >>>> >>>> >>> >>> >> -- > > > *Ben Slater* > > *Chief Product Officer <https://www.instaclustr.com/>* > > <https://www.facebook.com/instaclustr> <https://twitter.com/instaclustr> > <https://www.linkedin.com/company/instaclustr> > > Read our latest technical blog posts here > <https://www.instaclustr.com/blog/>. > > This email has been sent on behalf of Instaclustr Pty. Limited (Australia) > and Instaclustr Inc (USA). > > This email and any attachments may contain confidential and legally > privileged information. If you are not the intended recipient, do not copy > or disclose its content, but please reply to this email immediately and > highlight the error to the sender and then immediately delete the message. >