【问题标题】:composite partition key - row searching VS. column searching复合分区键 - 行搜索 VS。列搜索
【发布时间】:2016-06-07 18:07:33
【问题描述】:

我的查询是获取特定学生在特定考试中的分数。对于 Cassandra 表设计,选项 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 共同构成分区键,因此没有宽行。

选项 1 是标准方式。但是选项2有什么问题?

【问题讨论】:

    标签: cassandra cassandra-2.0


    【解决方案1】:

    选项 2 没有问题,但选项 2 只能同时使用exam_name 和 student_name 进行查询。

    如果更多学生参加特定考试,选项一将面临数据分布问题,即数据分布不均。

    如果多个同名学生出现在同一个考试中,这两种方法都会遇到问题。

    【讨论】:

    • Tks。假设是学生姓名的唯一性。是的,选项 1 可能会出现热点问题。除了查询的 where 子句差异之外,还有什么优点和缺点?比如存储、查询速度等。
    • 是的,查询速度肯定会提高,因为不必像选项 1 那样过滤掉数据。选项 2 将创建类似于 RDMS 行的结构
    猜你喜欢
    • 2014-01-04
    • 2020-12-28
    • 1970-01-01
    • 2021-11-26
    • 2017-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多