主键和集群列如何在Cassandra中运行?

时间:2018-10-11 07:46:21

标签: cassandra cassandra-2.0 cassandra-3.0

我对Cassandra中的主键如何允许快速数据访问感到困惑。例如,我用以下模式列创建了一个Student表:

我选择主键为学生ID。我的理解是,基于此值的一些哈希值,所有学生都将被放置在集群周围。说我还选择“国家”作为“聚类”列。因此,在学生的每个分区(根据其ID进行划分)中,将按国家(按字母顺序)对其进行排序。

因此,如果我随后想要检索特定国家/地区的所有学生,我是否必须访问集群中的多个节点?虽然已按国家/地区在每个节点上对学生进行了排序,但是没有什么可说特定国家/地区的所有学生都存储在同一节点上?甚至支持这种查询吗?

如果我仅将5个学生添加到5个节点的群集中,如果学生ID是UUID,是否有可能所有学生都存储在单独的节点上?

1 个答案:

答案 0 :(得分:1)

  

因此,如果我随后想要检索特定国家/地区的所有学生,我是否必须访问集群中的多个节点?

是的

  

虽然在每个节点内按国家/地区对学生进行了排序,但没有什么可说特定国家/地区的所有学生都已存储在同一节点上?

正确。

  

甚至支持这种查询吗?

但是,这在Cassandra中被认为是反模式。发生的事情是,协调器(从客户端接收请求的节点)将不得不查询所有其他节点,因为它将必须扫描该列族的所有行。

  

如果我仅将5个学生添加到5个节点的群集中,如果学生ID是UUID,是否有可能所有学生都存储在单独的节点上?

是的

解决问题的方法是,在复制行时(创建时),每个查询都有一个列族(一个用于按学生ID选择,另一个用于按国家/地区选择,每个都有不同的主要查询)。一个学生,您必须将其插入两个列系列中。