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?
>>
>>
>>
>

Reply via email to