Java 在cassandra primary中包含枚举列是否会影响cassandra负载平衡?

Java 在cassandra primary中包含枚举列是否会影响cassandra负载平衡?,java,enums,cassandra,primary-key,Java,Enums,Cassandra,Primary Key,考虑创建一个表: DROP TABLE IF EXISTS my_table; CREATE TABLE my_table (my_id varchar, my_date varchar, enum_one varchar, enum_two varchar PRIMARY KEY (my_id, my_date, enum_one, enum_two) ); 列enum_one和enum_two具有固定的值(6和~20)。是否应该在主键中包含枚举列 考虑这样一种情况,当我

考虑创建一个表:

DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
  (my_id varchar,
  my_date varchar,
  enum_one varchar,
  enum_two varchar
  PRIMARY KEY (my_id, my_date, enum_one, enum_two)
);
enum_one
enum_two
具有固定的值(6和~20)。是否应该在主键中包含枚举列

考虑这样一种情况,当我有许多行具有一个
enum\u one
值,而少数行具有其他值。
cassandra是如何处理这种情况的?它是平衡加载还是大多数请求都发送到一个节点?

cassandra基于分区键进行负载平衡,因此如果您在分区键中包含枚举列,那么它将对负载平衡产生影响

在您的示例中,您使用my_id作为分区键。如果您的读写操作倾向于使用不同的my_id值,那么这将保持数据平衡

如果您的读取和写入往往只使用少量my_id值(即,如果my_id的基数较低),那么数据在Cassandra节点之间的负载平衡将不好。如果是这种情况,那么包含enum字段将增加分区键的基数,并导致更均衡的数据负载

另一方面,使用不同的分区键可能会影响您可以有效执行的查询类型。在单个分区内查询数据是有效的,因此如果在分区键中包含枚举列,则必须在单独的查询中而不是在单个查询中查询枚举列的每个值