简体   繁体   中英

Cassandra wide row with every column as composite key

I have a wide row table with column

page_id int, user_id int, session_tid timeuuid and end_time timestamp

with partition key = user_id

I need to do multiple queries on the table, some based on one column and some based on another - and it turns out that I have cases with where clause on every column

As Cassandra doesnt allow me to use where clause on non-indexed, non-key column, is it ok if I make all of the columns my composite key? (currently all but end_time column are already composite key, with user_id as the partition key)

Making all columns as part of the primary key will not allow you to perform where conditions to each column in the way you're thinking.

To make an easy example if you create such a primary key

PK(key1, key2, key3, key4)

you won't be able to perform a query like

select * from mytable where key2 = 'xyz';

Because the rule is that you have to follow the order of keys to create a "multiple-where" condition.

So valid queries with multiple where are the following:

select * from mytable where key1 = 'xyz' and key2 = 'abc';
select * from mytable where key1 = 'xyz' and key2 = 'abc' and key3 = 11;
select * from mytable where key2 = 'xyz' and key2 = 'abc' and key3 = 11 and key4 = 2014;

You can ask for keyN only providing keyN-1

HTH, Carlo

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM