cassandra - 是否可以在不指定第一个的情况下按第二个簇键进行过滤?

标签 cassandra primary-key

我刚刚开始接触 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_idtstamp 是簇键。我可以按范围过滤 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 进行过滤。因此,如果有一种方法可以在不指定 tstamp 的情况下按 item_id 进行过滤,我就会得到答案。

有什么方法可以实现我的目标吗?

最佳答案

这个问题的答案是建立两个表。一个与您想要的每个主键方案。在具有不同模式的表中复制数据相对便宜,因为在 Cassandra 中写入速度非常快。

关于cassandra - 是否可以在不指定第一个的情况下按第二个簇键进行过滤?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28222755/

相关文章:

docker - 通过 Docker 的本地 DSE 集群

c - 哪个 NoSQL 数据库适合 MoSTLy 写作

尽管有相等运算符和二级索引,Cassandra CQL 范围查询仍被拒绝

sql - 如何在 SQL 中定义复合主键?

python - 我应该为我的 sqlalchemy 模型使用代理键(id=1)还是自然主键(标签 ='sqlalchemy')?

java - 更改 Cassandra 2.2.5 中的时区

Cassandra 删除提交日志文件

sql - 将主键字段添加到现有 Derby 表

mysql - 3张表的复合主键异或引用

SQL合并两列的值作为主键