The only issue with the last 2 solutions is, they require knowing the key in advance in order to look up the counters.
The keys however are dynamic in my case. On Wed, Nov 9, 2016 at 5:47 PM, DuyHai Doan <doanduy...@gmail.com> wrote: > "Is there a way to do this in c* which doesn't require creating 1 table > per type of map<int, counter> that i need?" > > You're lucky, it's possible with some tricks > > > CREATE TABLE my_counters_map ( > partition_key id uuid, > map_name text, > map_key int, > count counter, > PRIMARY KEY ((id), map_name, map_key) > ); > > This table can be seen as: > > Map <partition_key, SortedMap<map_name, SortddMap<map_key, counter>>> > > The couple (map_key, counter) simulates your map > > The clustering column map_name allows you to have multiple maps of > counters for a single partition_key > > > > On Wed, Nov 9, 2016 at 1:32 PM, Vladimir Yudovin <vla...@winguzone.com> > wrote: > >> Unfortunately it's impossible nor to use counters inside collections >> neither mix them with other non-counter columns : >> >> CREATE TABLE cnt (id int PRIMARY KEY , cntmap MAP<int,counter>); >> InvalidRequest: Error from server: code=2200 [Invalid query] >> message="Counters are not allowed inside collections: map<int, counter>" >> >> CREATE TABLE cnt (id int PRIMARY KEY , cnt1 counter, txt text); >> InvalidRequest: Error from server: code=2200 [Invalid query] >> message="Cannot mix counter and non counter columns in the same table" >> >> >> >Is there a way to do this in c* which doesn't require creating 1 table >> per type of map<int, counter> that i need? >> But you don't need to create separate table per each counter, just use >> one row per counter: >> >> CREATE TABLE cnt (id int PRIMARY KEY , value counter); >> >> Best regards, Vladimir Yudovin, >> >> *Winguzone <https://winguzone.com?from=list> - Hosted Cloud >> CassandraLaunch your cluster in minutes.* >> >> >> ---- On Wed, 09 Nov 2016 07:17:53 -0500*Ali Akhtar <ali.rac...@gmail.com >> <ali.rac...@gmail.com>>* wrote ---- >> >> I have a use-case where I need to have a dynamic number of counters. >> >> The easiest way to do this would be to have a map<int, counter> where the >> int is the key, and the counter is the value which is incremented / >> decremented. E.g if something related to 5 happened, then i'd get the >> counter for 5 and increment / decrement it. >> >> I also need to have multiple map<int, counter>s of this type, where each >> int is a key referring to something different. >> >> Is there a way to do this in c* which doesn't require creating 1 table >> per type of map<int, counter> that i need? >> >> >> >