我在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;
我应该如何进行数据建模? 我应该如何设计以更快地进行上述选择和删除查询? 请指导..
先谢谢。
答案 0 :(得分:0)
嗨首先从PRIMARY KEY中取出CREATED_DT列,然后在PRIMARY KEY中留下两列。将CREATED_DT设为普通列,并创建要查询的二级索引。
要删除超过五天的数据(CREATED_DT + 5&lt; = sysdate),请使用Cassandra的TTL(生存时间)功能。
我希望它可以帮到你。
答案 1 :(得分:0)
这是事情。我认为你的表看起来不错,你需要从主键中取出CREATED_DT,因为你将它分组为DESC。而且,为了做到这一点,你必须使它成为一个集群列。
其次,Cassandra实践是一种查询驱动的方法。这意味着您创建一个表来满足查询。尽量避免尽可能多地创建辅助索引,并改为创建表以满足查询。
你DML应该基于分区键。