复合分区键 - 行搜索 VS。列搜索
composite partition key - row searching VS. column searching
我的查询是获取特定学生在特定考试中的分数。对于 Cassandra table 设计,选项 1,
CREATE TABLE student_score (
student_name text,
exam_name text,
score int,
exam_time timeuuid
PRIMARY KEY (exam_name,student_name)
)
WITH CLUSTERING ORDER BY (student_name DESC);
exam_name 将作为分区键,所有学生都在宽行中。
选项 2,
CREATE TABLE student_score (
student_name text,
exam_name text,
score int,
exam_time timeuuid
PRIMARY KEY ((exam_name,student_name))
)
exam_name和student_name一起构成partition key,所以没有宽行。
选项 1 是标准方式。但是选项 2 有什么问题呢?
选项2没有问题,但选项2只能同时使用exam_name和student_name进行查询。
如果更多学生参加特定考试,选项一将面临数据分配问题,即数据将不会平均分配。
如果同一考试中出现多个同名学生,这两种方法都会遇到问题。
我的查询是获取特定学生在特定考试中的分数。对于 Cassandra table 设计,选项 1,
CREATE TABLE student_score (
student_name text,
exam_name text,
score int,
exam_time timeuuid
PRIMARY KEY (exam_name,student_name)
)
WITH CLUSTERING ORDER BY (student_name DESC);
exam_name 将作为分区键,所有学生都在宽行中。
选项 2,
CREATE TABLE student_score (
student_name text,
exam_name text,
score int,
exam_time timeuuid
PRIMARY KEY ((exam_name,student_name))
)
exam_name和student_name一起构成partition key,所以没有宽行。
选项 1 是标准方式。但是选项 2 有什么问题呢?
选项2没有问题,但选项2只能同时使用exam_name和student_name进行查询。
如果更多学生参加特定考试,选项一将面临数据分配问题,即数据将不会平均分配。
如果同一考试中出现多个同名学生,这两种方法都会遇到问题。