CREATE TABLE vote (
doodle_id uuid,
user_id uuid,
schedule_id uuid,
vote int,
PRIMARY KEY ((doodle_id), user_id, schedule_id)
);
select * from vote where doodle_id = c4778a27-f2ca-4c96-8669-15dcbd5d34a7 and user_id = 97a7378a-e1bb-4586-ada1-177016405142;
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的新手,但请纠正我,如果我错了,在复合主键中,第一部分是分区键,它是强制性的,以便Cassandra知道在哪里查找数据。其馀部分是聚类键对数据进行排序。
但我还是不明白为什么我的第一个请求有效,而第二个却不行?
在Cassandra中,您应该设计适合查询的数据模型。因此,支持第二个查询(通过doodle_id
和schedule_id
进行查询,但不必使用user_id
)的正确方法是创建一个新表来处理该特定查询。除了主键略有不同外,此表将基本相同:
CREATE TABLE votebydoodleandschedule (
doodle_id uuid,
user_id uuid,
schedule_id uuid,
vote int,
PRIMARY KEY ((doodle_id), schedule_id, user_id)
);
现在这个查询可以工作了:
SELECT * FROM votebydoodleandschedule
WHERE doodle_id = c4778a27-f2ca-4c96-8669-15dcbd5d34a7
AND schedule_id = c37df0ad-f61d-463e-bdcc-a97586bea633;
这使得您不得不指定Allow Filtering
。依赖Allow Filtering
从来都不是一个好主意,当然也不应该在生产集群中这样做。
我试图在Cassandra CLI版本1.1.6中创建一个列族,我不确定如何将主键指定为MovieID。
我在Cassandra中有一个表,定义为 我在这张表中插入了数十亿条记录。现在我想用CQL查询表 null 谢谢!
请针对以下需求对Cassandra表的数据模型给出一些建议/想法。我不确定这是否可以实现。如果可以实现,我们就不需要编写外部程序了 注意:这有助于连接两个Kafka主题和任何更新发生在任何一个Kafka,两者将反映在非ormalized格式在卡桑德拉表 根据我们的要求,任何一个主键的值是相同的,应该向上。未插入。
我正在从事一个laravel项目,其中我设置了一个自定义主键。但是,项目允许两个不同的条目在设置为主键的字段中具有相同的值。我如何限制这一点? 我已将模型上的public$incrementing属性设置为false,并将protected$keyType属性设置为string。 我预计代码将引发一个错误,如果我输入两个记录将相同的值在'reg_no'字段,这被定义为主要的,但记录被保存没有错误。