[ https://issues.apache.org/jira/browse/CASSANDRA-8649?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jeremy Hanna updated CASSANDRA-8649: ------------------------------------ Labels: LWT (was: ) > CAS per (partition key + clustering key) and not only per (partition key) > ------------------------------------------------------------------------- > > Key: CASSANDRA-8649 > URL: https://issues.apache.org/jira/browse/CASSANDRA-8649 > Project: Cassandra > Issue Type: New Feature > Reporter: Dobrin > Priority: Major > Labels: LWT > Fix For: 2.2.0 beta 1 > > > Reading the description at > http://www.datastax.com/dev/blog/lightweight-transactions-in-cassandra-2-0 : > ... > * The columns updated do NOT have to be the same as the columns in the IF > clause. > * Lightweight transactions are restricted to a single partition; this is the > granularity at which we keep the internal Paxos state. As a corollary, > transactions in different partitions will never interrupt each other. > ... > So my understanding of the above is that if multiple writers for example > perform CAS inserts (INSERT...IF NOT EXISTS) using the same partition key and > different clustering keys will interrupt/interfere with each other? > Is this understanding correct? (my tests seems to confirm it) > For example if I want to model users from different country/city/area and I > want to be able to list all the users from a given country ordered by > (city,area) and also I know that a single cassandra node will be able to > store all the users from a given country but I need to partition users from > different countries because a single cassandra node will not be enough: > CREATE COLUMNFAMILY user ( > country text, > city text, > area text, > id text, > json text, > version bigint, > PRIMARY KEY ((country), city, area, id) > ); > Where id is the user id and json is a JSON serialized user object (an > aggregate) containing more information about the user. > I want to be able to CAS insert many users into the same country concurrently > using > INSERT INTO user(country, city, area, id, json, version) VALUES > ('x',...) IF NOT EXISTS; > > and be able to CAS update users from the same country concurrently: > UPDATE user SET json='{...}',version=18 WHERE country='x' AND city='y' > AND area='z' AND id='123' IF version=17; > > As I understand this will not be efficient because all the above concurrent > statements will have to be "ordered" by the same paxos instance/state per > country 'x'? (and trying it results in a lot of WriteTimeoutException-s) > If yes - can we made paxos to support IF statements per column/cell? > By cell/column I mean all the underlying persistent state that is behind the > compound primary key (partition key + clustering key) - in the above example > the state is json and version > the partition key is the country > and the clustering key is (city, area, id) > ( > I'm stating it explicitly as I'm not completely sure whether this is a single > cell or double cells underneath at the storage engine, references used: > http://www.datastax.com/dev/blog/cql3-for-cassandra-experts > http://www.datastax.com/dev/blog/does-cql-support-dynamic-columns-wide-rows > ) > In other words is it possible to make CAS per (partition key + clustering > key) and not only per (partition key)? -- This message was sent by Atlassian JIRA (v7.6.3#76005) --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org