我是Cassandra的新手并尝试创建一个应用程序。我有一个实体'学生'由4列组成,如下所示:
创建表学生(student_id uuid,student_name文本,dob日期,course_name文本,PRIMARY KEY(student_id));
我必须按course_name搜索学生。现在根据Cassandra数据建模,按课程名称搜索学生我需要创建另一个表作为student_by_course_name,它由两列组成:
其中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数据建模?
答案 0 :(得分:1)
在这种情况下,您必须先删除旧条目,然后使用新课程向student_by_course_name添加新条目。
你的模特看起来不错
答案 1 :(得分:1)
Cassandra不是最好的删除数据或就地更新数据。我相信你必须使用批处理语句来保持表同步。
您可以采取两种方法。第一种是删除现有的学生ID /课程名称组合。这将创建一个墓碑,但如果它不经常发生,它将不会是一个大问题。第二种选择是使用原始表并在课程名称上创建二级索引。这将允许更新和查询课程名称,但可能不会随着时间的推移而预先形成。
答案 2 :(得分:1)
最好的方式确实是亚历克斯建议的。删除然后更新。
您可能需要注意几个问题。