cassandra 主键列不能被限制 [英] cassandra primary key column cannot be restricted

查看:26
本文介绍了cassandra 主键列不能被限制的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我第一次在 Web 应用程序中使用 Cassandra,但遇到了查询问题.这是我的标签:

I am using Cassandra for the first time in a web app and I got a query problem. Here is my tab :

CREATE TABLE vote (
    doodle_id uuid,
    user_id uuid,
    schedule_id uuid,
    vote int,
    PRIMARY KEY ((doodle_id), user_id, schedule_id)
);

在每个请求中,我都会指明我的分区键,doodle_id.例如,我可以毫无问题地制作:

On every request, I indicate my partition key, doodle_id. For example I can make without any problems :

select * from vote where doodle_id = c4778a27-f2ca-4c96-8669-15dcbd5d34a7 and user_id = 97a7378a-e1bb-4586-ada1-177016405142;

但是在我提出的最后一个请求中:

But on the last request I made :

select * from vote where doodle_id = c4778a27-f2ca-4c96-8669-15dcbd5d34a7 and schedule_id = c37df0ad-f61d-463e-bdcc-a97586bea633;

我收到以下错误:

Bad Request: PRIMARY KEY column "schedule_id" cannot be restricted (preceding column "user_id" is either not restricted or by a non-EQ relation)

我是 Cassandra 的新手,但如果我错了,请纠正我,在复合主键中,第一部分是 PARTITION KEY,它是强制 Cassandra 知道在哪里查找数据的必要条件.然后其他部分是对数据进行排序的CLUSTERING KEY.

I'm new with Cassandra, but correct me if I'm wrong, in a composite primary key, the first part is the PARTITION KEY which is mandatory to allow Cassandra to know where to look for data. Then the others parts are CLUSTERING KEY to sort data.

但我仍然不明白为什么我的第一个请求有效,而第二个无效?

But I still don't get why my first request is working and not the second one ?

如果有人能帮忙,我将非常高兴.

If anyone could help it will be a great pleasure.

推荐答案

在 Cassandra 中,您应该设计数据模型以适合您的查询.因此,支持第二个查询的正确方法(通过 doodle_idschedule_id 查询,但不一定使用 user_id)是创建一个新表处理该特定查询.该表将几乎相同,除了 PRIMARY KEY 会略有不同:

In Cassandra, you should design your data model to suit your queries. Therefore the proper way to support your second query (queries by doodle_id and schedule_id, but not necessarilly with user_id), is to create a new table to handle that specific query. This table will be pretty much the same, except the PRIMARY KEY will be slightly different:

CREATE TABLE votebydoodleandschedule (
    doodle_id uuid,
    user_id uuid,
    schedule_id uuid,
    vote int,
    PRIMARY KEY ((doodle_id), schedule_id, user_id)
);

现在这个查询将起作用:

Now this query will work:

SELECT * FROM votebydoodleandschedule 
WHERE doodle_id = c4778a27-f2ca-4c96-8669-15dcbd5d34a7 
AND schedule_id = c37df0ad-f61d-463e-bdcc-a97586bea633;

这让您不必指定ALLOW FILTERING.依赖 ALLOW FILTERING 从来都不是一个好主意,当然也不是你应该在生产集群中做的事情.

This gets you around having to specify ALLOW FILTERING. Relying on ALLOW FILTERING is never a good idea, and is certainly not something that you should do in a production cluster.

这篇关于cassandra 主键列不能被限制的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆