给出一个场景,其中您有一个User
表,其中id
作为主键。
您有一个名为email
的列和一个名为name
的列。
您要基于UPDATE
{p} User.name
我意识到User.email
命令要求您输入一个PRIMARY KEY。这是否意味着我不能使用单纯的UPDATE
迁移,并且需要先查询CQL
主键,然后才能User.id
?
在这种情况下,我确实知道PRIMARY KEY,因为UPDATE
和dev
的UUID相同,但是感觉很脏。
答案 0 :(得分:3)
是的,您是对的-您需要知道记录的主键才能对数据进行更新或删除特定记录。这里有几个选项,具体取决于您的数据模型:
User.email
作为分区键来创建实例化视图,并获取所有您可以更新的消息ID(但是您需要在应用程序中进行此操作)在CQL中不支持嵌套查询)。但也请注意,物化视图是Cassandra中的“实验性”功能,并且可能并非始终有效(在DataStax Enterprise中更稳定)。另外,如果您的某些用户拥有数十万封电子邮件,则可能会创建较大的分区。 答案 1 :(得分:1)
我认为Alex's answer涵盖了您的问题-“我如何在PK列中找到一个值,而不是从非PK列的值开始倒数?”。
但是,我认为值得注意的是,问这个问题表明您应该重新考虑数据模型。在C *数据模型设计中,经验法则是从考虑所需的查询开始,而您错过了UPDATE
查询用例。您也许可以在不更改模型的情况下使事情正常运行,但是如果发现您需要进行其他您不准备进行的查询,则会遇到很多索引和/或MV的操作问题。
更一般地,搜索有关Cassandra数据建模的文章和其他资源。听起来您基本上是将C *用于关系用例,所以您需要对此进行研究。