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字段将增加分区键的基数,并导致更均衡的数据负载 另一方面,使用不同的分区键可能会影响您可以有效执行的查询类型。在单个分区内查询数据是有效的,因此如果在分区键中包含枚举列,则必须在单独的查询中而不是在单个查询中查询枚举列的每个值