Database design 在where子句Cassandra中使用具有不同属性的select

Database design 在where子句Cassandra中使用具有不同属性的select,database-design,cassandra,datastax,denormalization,nosql,Database Design,Cassandra,Datastax,Denormalization,Nosql,我需要创建具有以下属性的Cassandra柱族 id bigint, content varchar, year int, frequency int, 我希望使用此专栏系列获得给定年份中频率最高的内容。 另外,在向表中插入数据时,对于给定的内容和年份,我需要检查id是否已经存在。我怎样才能用卡桑德拉做到这一点 我尝试使用 CREATE TABLE sinmin.word_time_inv_frequency ( id bigint, content varchar, year int, fr

我需要创建具有以下属性的Cassandra柱族

id bigint,
content varchar,
year int,
frequency int,
我希望使用此专栏系列获得给定年份中频率最高的内容。 另外,在向表中插入数据时,对于给定的内容和年份,我需要检查id是否已经存在。我怎样才能用卡桑德拉做到这一点

我尝试使用

CREATE TABLE sinmin.word_time_inv_frequency (
id bigint,
content varchar,
year int,
frequency int,
PRIMARY KEY((year), frequency)
);
然后使用

SELECT id FROM word_time_inv_frequency WHERE year = 2010 ORDER BY frequency ;

但使用此项时,我无法检查CF中(内容,年份)对的条目是否已经存在。

您可以使用复合分区键来选择by(内容,年份),并且仍然可以按频率排序:

有了这张桌子,你就可以

create table test2 (
 id bigint,
 content varchar,
 year int,
 frequency int, 
PRIMARY KEY((year, content), frequency)
);
您的查询将如下所示:

select * from test2 where content ='puppies' and year=2014 order by frequency ;
维护不同的表以满足查询需求是最佳实践。您可以在datastax enterpise(搜索/分析)中查看一些用于特殊查询的集成

请查看以下有关数据建模的视频,以深入了解c*数据建模:

顺便问一下,id是此数据集的唯一标识符吗?在您提供的表def中,如果记录的年份和频率相同,您将覆盖这些记录。确保在主键中获得唯一标识符。

也可以考虑在表定义中使用,如果总是以相同的顺序拉数据。