如何创建一个高效的Cassandra数据模型?



我是Cassandra的新手,正在尝试创建一个应用程序。其中我有一个实体"学生"由 4 列组成,如下所示:

  • student_id
  • student_name
  • 多布
  • course_name

创建表学生(student_id UUID、student_name文本、出生日期、course_name文本、主键(student_id((;

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

  • course_name
  • student_id

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

创建表格student_by_course_name(course_name文本,student_id UUID 主键(course_name、student_id((;

当学生改变课程时,就会出现问题。现在我想更新student_by_course_name表中的课程名称,但它抛出错误,因为course_name列是分区键。如何解决此问题或建议我是否错误地使用了 Cassandra 数据建模?

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

您的模型看起来不错

最好的方法确实是像亚历克斯建议的那样。删除然后更新。

有几个问题比您可能需要注意的要多。

  1. 如果您的课程有很多学生,它将生成大分区(对于此特定情况可能不是问题(
  2. 删除
  3. 条目将导致逻辑删除,因此您应该准备好处理它们(例如:如果您认为会在表格unchecked_tombstones生成大量条目,请使用低GC_GRACE(

>Cassandra并不是删除数据或就地更新数据的最佳选择。我相信您必须使用批处理语句来保持表同步。

您可以采取两种方法。第一种是删除现有的学生证/课程名称组合。这将创建一个墓碑,但如果它不经常发生,那也没什么大不了的。第二种选择是使用原始表格并在课程名称上创建二级索引。这将允许更新和查询课程名称,但随着时间的推移可能无法很好地执行。

最新更新