在Cassandra中,唯一列是否可以用作分区键?

问题描述

我有一个具有多列的表用户,每个用户都有一个唯一的用户ID。 因为它是唯一的,所以除非我想在查询中使用该列,否则不必指定集群键。这是不好的,因为每个分区都由一行组成吗?如果由于某种原因不好,在这种情况下最佳做法是什么? 谢谢您的帮助!

编辑:如果我有一个查询需要返回所有用户名,那么如何才能获得良好的性能呢?从该表执行此操作对我来说似乎不是很有效,我是否应该在另一个表中直接复制集合中的所有用户名?然后它们全部集中在一个地方,读取不必跳过多个节点。

解决方法

我只是answered the similar question。简而言之-它实际上取决于访问模式和表设置。您可能需要调整表参数以获得最佳性能,但设置可能取决于数据量和其他要求。

,

在Cassandra中定义主键时始终有两个(主要)注意事项:

  • 数据分发
  • 查询模式匹配

从数据分发的角度来看,没有比使用唯一键作为分区键更好的了。它们越多,它们应散列得越均匀,从而均匀分布。

但是,分配得很好但不符合所需查询模式的键却毫无用处。

tl; dr;

如果唯一键是查询表所依据的唯一键,那么它将为分区键做出选择。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...