我是否必须在每个查询中指定分区键和所有集群键?
Do I have to specify the partition key and all clustering keys in every query?
例如,如果我的主键是 a
并且集群列是 b
和 c
。
我只能在where条件下使用下面的吗?
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
这可能吗?
如果没有,那么我如何为我的数据建模以实现这一点?
Cassandra 有很多优点,但它并不能满足所有需求。
当您需要处理大量写入 时,Cassandra 是一个不错的选择。人们喜欢它,因为 Cassandra 易于扩展,可以处理巨大的数据集并且高度容错。
您需要记住,使用 Cassandra(如果您真的想使用它)的基本规则是对数据建模以适合您的查询。不要围绕关系建模。不要围绕对象建模。 围绕您的查询建模。这样您可以最大限度地减少分区读取。
当然,您不仅可以查询主键和分区列。您可以:
- 将 secondary index 添加到某些列或
- 使用 ALLOW FILTERING 关键字
但是,当然,这些并不像建模良好的 table 那样有效。
For example, if my primary key is a and clustering columns are b and c.
所以这转化为定义:PRIMARY KEY ((a),b,c)
。基于此...
are there any other queries that I can use?
是的。需要理解的一些要点;是查询的 WHERE 子句与 PRIMARY KEYs:
- 必须在订单中指定。
- 无法跳过。
- 可以省略,只要指定前面的键即可。
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 定义的一部分。
If not, then how can I model my data to make this possible?
正如 Andrea 提到的,您应该根据需要支持的查询来构建您的 table。因此,如果您需要通过 a
、b
、c
、 和 d
进行查询,则需要使 d
主键的一部分。
例如,如果我的主键是 a
并且集群列是 b
和 c
。
我只能在where条件下使用下面的吗?
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
这可能吗?
如果没有,那么我如何为我的数据建模以实现这一点?
Cassandra 有很多优点,但它并不能满足所有需求。
当您需要处理大量写入 时,Cassandra 是一个不错的选择。人们喜欢它,因为 Cassandra 易于扩展,可以处理巨大的数据集并且高度容错。
您需要记住,使用 Cassandra(如果您真的想使用它)的基本规则是对数据建模以适合您的查询。不要围绕关系建模。不要围绕对象建模。 围绕您的查询建模。这样您可以最大限度地减少分区读取。
当然,您不仅可以查询主键和分区列。您可以:
- 将 secondary index 添加到某些列或
- 使用 ALLOW FILTERING 关键字
但是,当然,这些并不像建模良好的 table 那样有效。
For example, if my primary key is a and clustering columns are b and c.
所以这转化为定义:PRIMARY KEY ((a),b,c)
。基于此...
are there any other queries that I can use?
是的。需要理解的一些要点;是查询的 WHERE 子句与 PRIMARY KEYs:
- 必须在订单中指定。
- 无法跳过。
- 可以省略,只要指定前面的键即可。
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 定义的一部分。
If not, then how can I model my data to make this possible?
正如 Andrea 提到的,您应该根据需要支持的查询来构建您的 table。因此,如果您需要通过 a
、b
、c
、 和 d
进行查询,则需要使 d
主键的一部分。