Re: Having Counters in a Collection, like a map<int, counter>?

2016-11-09 Thread Vladimir Yudovin
The keys however are dynamic in my case.

Why is it problem for you? As you said "if something related to 5 happened, 
then i'd get the counter for 5 and increment / decrement it."


So do "UPDATE cnt SET value = value + SOMETHING where id = 5;"

If counter for event 5 exists it will be changed, if not - created set to  
initial value.




Best regards, Vladimir Yudovin, 

Winguzone - Hosted Cloud Cassandra
Launch your cluster in minutes.





 On Wed, 09 Nov 2016 07:52:29 -0500Ali Akhtar ali.rac...@gmail.com 
wrote 




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 mapint, 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, SortedMapmap_name, SortddMapmap_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 MAPint,counter);

InvalidRequest: Error from server: code=2200 [Invalid query] message="Counters 
are not allowed inside collections: mapint, 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 mapint, 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 - Hosted Cloud Cassandra
Launch your cluster in minutes.





 On Wed, 09 Nov 2016 07:17:53 -0500Ali Akhtar 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 mapint, 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 mapint, counters 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 mapint, counter that i need?




















Re: Having Counters in a Collection, like a map<int, counter>?

2016-11-09 Thread Ali Akhtar
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  wrote:

> "Is there a way to do this in c* which doesn't require creating 1 table
> per type of map 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 >>
>
> 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 
> 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);
>> InvalidRequest: Error from server: code=2200 [Invalid query]
>> message="Counters are not allowed inside collections: map"
>>
>> 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 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  - Hosted Cloud
>> CassandraLaunch your cluster in minutes.*
>>
>>
>>  On Wed, 09 Nov 2016 07:17:53 -0500*Ali Akhtar > >* 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 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 maps 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 that i need?
>>
>>
>>
>


Re: Having Counters in a Collection, like a map<int, counter>?

2016-11-09 Thread DuyHai Doan
"Is there a way to do this in c* which doesn't require creating 1 table per
type of map 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 >>

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 
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);
> InvalidRequest: Error from server: code=2200 [Invalid query]
> message="Counters are not allowed inside collections: map"
>
> 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 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  - Hosted Cloud
> CassandraLaunch your cluster in minutes.*
>
>
>  On Wed, 09 Nov 2016 07:17:53 -0500*Ali Akhtar  >* 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 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 maps 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 that i need?
>
>
>


Re: Having Counters in a Collection, like a map<int, counter>?

2016-11-09 Thread Vladimir Yudovin
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 MAPint,counter);

InvalidRequest: Error from server: code=2200 [Invalid query] message="Counters 
are not allowed inside collections: mapint, 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 mapint, 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 - Hosted Cloud Cassandra
Launch your cluster in minutes.





 On Wed, 09 Nov 2016 07:17:53 -0500Ali Akhtar 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 mapint, 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 mapint, counters 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 mapint, counter that i need?