【问题标题】:use select with different attributes present in where clause Cassandra在 where 子句 Cassandra 中使用具有不同属性的 select
【发布时间】:2015-01-02 05:40:50
【问题描述】:

我需要创建一个具有以下属性的 Cassandra 列族。

id bigint,
content varchar,
year int,
frequency int,

我想使用此列族获取给定年份中频率最高的内容。 此外,在向表中插入数据时,对于给定的内容和年份,我需要检查一个 id 是否已经存在。如何使用 Cassandra 实现这一目标?

我尝试使用创建 CF

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 中的 (content,year) 对是否已经存在条目。

【问题讨论】:

    标签: database-design cassandra datastax denormalization nosql


    【解决方案1】:

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

    有了这张桌子,你就可以

    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 企业(搜索/分析)中的一些集成以进行即席查询。

    请观看以下有关数据建模的视频,以深入了解 c* 数据建模: https://www.youtube.com/playlist?list=PL75iJfNDd0_FI-Ia_b4z8aoDdOCQTi35I

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

    如果您总是要以相同的顺序提取数据,还可以考虑在表定义中使用Clustering Order By

    【讨论】:

      猜你喜欢
      • 2021-03-14
      • 2011-09-19
      • 2020-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-16
      • 2021-07-25
      相关资源
      最近更新 更多