I can't do this, otherwhise i won't be able to query the item_id using a key with a query like : Select * from item_id_by_key where user_id=... and key=....
Le 25 oct. 2016 07:15, "Ben Slater" <ben.sla...@instaclustr.com> a écrit : > Move item_id_by_key into a collection field in item table? (Would > probably be a “better” C* data model anyway.) > > On Tue, 25 Oct 2016 at 16:08 Mickael Delanoë <delanoe...@gmail.com> wrote: > >> Ok, I understand, thanks. >> So now i would like to know if there is some best practices to do what i >> want. >> I.e inserting entries in several tables (with same partition key) only if >> there is not already an entry in the main table. >> >> Keep in mind i wanted to do that inside a single batch because I can have >> 2 concurrent request trying to insert something different but with the same >> primary key in the main table. >> >> If i split the batch in 2 requests(1 with the LWT, 1 with the rest), how >> can i ensure the last batch won't override the previous data and that the >> whole data will be saved (in case of a problem between request1 and >> request2) ? >> >> Le 24 oct. 2016 12:47, "DuyHai Doan" <doanduy...@gmail.com> a écrit : >> >> >> >> "So I guess in that case the Paxos operation does not span multiple table >> but operates only the table that has the condition. Am I wrong?" >> >> --> The fact that you're using a BATCH with LWT means that either ALL >> statements succeed or NONE. And to guarantee this, Paxos ballot must cover >> all statements. In your case since they span on multiple tables it's not >> possible >> >> On Mon, Oct 24, 2016 at 11:34 AM, Mickael Delanoë <delanoe...@gmail.com> >> wrote: >> >> Thanks DuyHai for the info. >> I already see this JIRA, however the use case I describe is slightly >> different from the JIRA as there is only ONE condition on ONE table. Other >> statements of the batch does not have any condition. >> So I guess in that case the Paxos operation does not span multiple table >> but operates only the table that has the condition. Am I wrong? >> >> >> >> 2016-10-24 10:21 GMT+02:00 DuyHai Doan <doanduy...@gmail.com>: >> >> As far as I remember, there is an optimization in Cassandra to manage >> Paxos ballot per table. So asking a Paxos operation to span multiple tables >> (even if same partition key) would require a lot of changes in the current >> impl. >> >> The question has already been raised, you may want to convince the >> committers by adding some comments here: https://issues.apache. >> org/jira/browse/CASSANDRA-10085 >> >> On Mon, Oct 24, 2016 at 9:58 AM, Mickael Delanoë <delanoe...@gmail.com> >> wrote: >> >> Hi, >> >> I would like to use lightweight transaction inside a batch but the >> request is rejected by cassandra, however I think this is a use case than >> could be handled without problem. >> Below is what I wanted to do. >> >> I am using cassandra 3.7. >> >> CREATE KEYSPACE test_ksp WITH replication = {'class': 'SimpleStrategy', >> 'replication_factor': '1'}; >> >> CREATE TABLE test_ksp.item ( >> user_id bigint, >> item_id text, >> item_value text, >> item_key1 text, >> item_key2 text, >> PRIMARY KEY ((user_id), item_id)); >> >> CREATE TABLE test_ksp.item_id_by_key ( >> user_id bigint, >> item_key text, >> item_id text, >> PRIMARY KEY ((user_id), item_key)); >> >> USE test_ksp; >> >> BEGIN BATCH >> INSERT INTO item (user_id, item_id, item_value, item_key1, item_key2) >> values (1,'i11','item-C', 'key-XYZ-123', 'key-ABC-789') IF NOT EXISTS; >> INSERT INTO item_id_by_key (user_id, item_key, item_id) VALUES (1, >> 'key-XYZ-123', 'i11'); >> INSERT INTO item_id_by_key (user_id, item_key, item_id) VALUES (1, >> 'key-ABC-789', 'i11'); >> APPLY BATCH; >> >> >> So as you can see this is a batch that targets 2 tables but with the same >> partition key (i.e the same target nodes). Moreover It uses only ONE >> condition on one table only. >> I don't understand why cassandra returns an error "Batch with conditions >> cannot span multiple tables" in that case. >> >> I understand that if I had used several conditions on different tables it >> could be a problem, but in my case there is only one condition and moreover >> I have always the same partition key for every table inside the batch. >> As there is only one condition, I expected the paxos protocol just act on >> this condition and as the partition keys are all the same, the paxos >> protocol has only to work with the same replica nodes (not span across >> multiple partition). >> In my point of view this is as if the LWT was in a single statement, >> except that after the LWT is accepted a complete batch has to be executed. >> >> Is there someone that could explain why this use case need to be rejected >> by cassandra? And do you think this is something that cassandra could >> handle in a future version ? >> >> Regards, >> Mickaël >> >> >> >> >> >> -- >> Mickaël Delanoë >> >> >> >>