我刚开始接手cassandra
。
我很好奇我能否做到以下几点:
session.execute("CREATE TABLE IF NOT EXISTS mykeyspace.newtable
(user_id int,
item_id int,
tstamp timestamp,
PRIMARY KEY(user_id, item_id, tstamp))")
我的理解:
我知道我的user_id
是一个分区键,我只能按=
对其进行过滤。我的item_id
和tstamp
是群集密钥。我可以按范围过滤item_id
(使用相等符号),对于给定的item_id
我可以按tstamp
的范围过滤,但如果未指定item_id
,我可以无法按tstamp
进行过滤。
我的问题:
有没有办法指定我的PRIMARY KEY
,以便我可以:
1)按=
过滤user_id(我已经拥有)
2)按=
item_id过滤(我已经拥有)
3)按tstamp的范围过滤(我没有)
如果我将PRIMARY KEY
规范更改为:
PRIMARY KEY(user_id, tstamp, item_id)
然后我将无法再按item_id
进行过滤。因此,如果有一种方法以某种方式按item_id
过滤而未指定tstamp
,我会得到答案。
有没有办法实现我想要的目标?
答案 0 :(得分:5)
答案是建立两个表。一个与您想要的每个主键方案。在具有不同模式的表中复制数据相对便宜,因为在Cassandra中写入速度非常快。