例如,如果我的主键是a
,而群集列是b
和c
。
我只能在以下条件下使用以下内容吗?
select * from table where a = 1 and b = 2 and c = 3
或者我可以使用其他查询吗?
我要使用
select * from table where a=1
和
select * from table where a = 1 and b = 2 and c = 3 and d = 4
有可能吗?
如果没有,那么我该如何为我的数据建模呢?
答案 0 :(得分:4)
卡桑德拉(Cassandra)具有很多优点,但并不适合所有需求。
当您需要处理大量写入时,Cassandra是一个不错的选择。人们喜欢它,因为Cassandra易于扩展,因此可以处理庞大的数据集和高度容错的。
您需要记住,使用Cassandra(如果您真的想利用它)的基本规则是对数据进行建模以适合您的查询。不要围绕关系建模。不要围绕对象建模。 围绕查询进行建模。这样,您可以最大程度地减少分区读取。
当然,您不仅可以查询主键和分区列。您可以:
但是,当然,这些表并不像具有良好的表格那样有效。
答案 1 :(得分:0)
例如,如果我的主键是a,聚类列是b和c。
因此,这转换为以下定义:PRIMARY KEY ((a),b,c)
。基于此...
我还可以使用其他查询吗?
是的。一些重要的要点;是带有主键的查询的WHERE子句:
select * from table where a=1
是的,此查询将起作用。那是因为您仍在通过分区键(a
)查询。
select * from table where a = 1 and b = 2 and c = 3 and d = 4
但是,这将 不 有效。这是因为d
(基于我对您的第一句话的理解)并不属于您的PRIMARY KEY定义。
如果没有,那么我该如何为我的数据建模呢?
正如Andrea所说,您应该根据表需要支持的查询来构建表。因此,如果您需要按a
,b
,c
,和 d
进行查询,则需要输入d
您的主键的一部分。