【问题标题】:Cassandra Data Modelling approachCassandra 数据建模方法
【发布时间】:2014-06-05 10:56:40
【问题描述】:

我在 cassandra 中最初设计了静态列族

create table APP_DATA (
CODE varchar, 

DATA varchar,

CREATED_DT timestamp,

REQUEST_TYPE int,

STATUS int,

..... #Some more columns ...,

PRIMARY KEY ((CODE,DATA),CREATED_DT))

 with clustering order by (CREATED_DT desc);

现在,我想查询以下内容

1)选择

SELECT * FROM APP_DATA WHERE CODE='1' AND DATA='1111111111';

SELECT * FROM APP_DATA WHERE CODE='1' AND DATA='1111111111' AND CREATED_DT<=dateof(now()) AND STATUS=0;

SELECT * FROM APP_DATA WHERE CODE='1' AND DATA='1111111111' AND CREATED_DT<=dateof(now()) AND STATUS=0 AND REQUEST_TYPE=9;

2)删除

DELETE FROM APP_DATA WHERE CREATED_DT+5<=sysdate;

我应该如何进行数据建模? 我应该如何设计以使上述选择和删除查询更快? 请指导..

提前致谢。

【问题讨论】:

    标签: cassandra cql3


    【解决方案1】:

    嗨,首先从 PRIMARY KEY 中取出 CREATED_DT 列,并在 PRIMARY KEY 中留下两列。将 CREATED_DT 设为普通列,并创建二级索引进行查询。

    使用 Cassandra 的 TTL (Time to live) 功能删除超过五天 (CREATED_DT+5

    希望对你有帮助。

    【讨论】:

      【解决方案2】:

      事情就是这样。我认为您的表看起来不错,您确实需要从主键中取出 CREATED_DT,因为您将其分组为 DESC。而且,为了做到这一点,您必须将其设为聚类列。

      其次,Cassandra 实践是一种查询驱动的方法。这意味着您创建一个表来满足查询。尽量避免创建二级索引,而是创建表来满足查询。

      你的 DML 应该基于分区键。

      【讨论】:

      • 您能否在不创建 CREATED_DT 作为聚类列的情况下进行分组。
      • @Syed。在 Cassandra 中,只能对集群列进行分组。它们基本上用于磁盘中的排序标准,而分区键用于对数据进行分组。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-22
      • 2015-12-25
      • 2015-04-09
      • 2017-01-24
      • 1970-01-01
      • 2019-09-02
      相关资源
      最近更新 更多