首页 文章

如何创建高效的Cassandra Data模型?

提问于
浏览
1

我是Cassandra的新手并试图创建一个应用程序 . 其中我有一个实体'学生'由4列组成,如下所示:

  • student_id

  • student_name

  • dob

  • course_name

create table student(student_id uuid,student_name text,dob date,course_name text,PRIMARY KEY(student_id));

我必须按course_name搜索学生 . 现在根据Cassandra数据建模,按课程名称搜索学生我需要创建另一个表作为student_by_course_name,它由两列组成:

  • course_name

  • student_id

其中course_name将是分区键,student_id将是群集键,如下所示:

create table student_by_course_name(course_name text,student_id uuid PRIMARY KEY(course_name,student_id));

当学生改变他的课程时会出现问题 . 现在,我想更新student_by_course_name表中的课程名称,但由于course_name列是分区键,因此会引发错误 . 如何解决这个问题或者请问如果我错误地使用Cassandra数据建模?

3 回答

  • 1

    在这种情况下,您必须先删除旧条目,然后使用新课程向student_by_course_name添加新条目 .

    你的模型很好看

  • 1

    确实如Alex建议的那样,最好的方法 . 删除然后更新 .

    您可能需要注意几个问题 .

    • 如果您的课程有很多学生,它将生成大分区(对于这个特定情况可能不是问题)

    • 删除条目将导致逻辑删除,因此您应该准备好处理它们(例如:如果您认为将在表中设置unchecked_tombstones,将使用低GC_GRACE)

  • 1

    Cassandra不是最好的删除数据或就地更新数据 . 我相信你必须使用批处理语句来保持表同步 .

    你可以采取两种方法 . 第一种方法是删除现有的学生ID /课程名称组合 . 这将创建一个墓碑,但如果它不经常发生,它将不会是一个大问题 . 第二种选择是使用原始表并在课程名称上创建二级索引 . 这将允许更新和查询课程名称,但可能不会随着时间的推移而预先形成 .

相关问题