问题描述
在Cassandra中,我了解应该根据需要查询的表来创建表。例如,我目前有一个Users and Users_By_Status表。
##Users##
CREATE TABLE Users (
user_id uuid,name text,password text,status int,username text,PRIMARY KEY (user_id)
);
CREATE INDEX user_username_idx ON Users (username);
##Users_By_Status##
CREATE TABLE Users_By_Status (
username text,user_id uuid,PRIMARY KEY (username,status,user_id)
);
在这种情况下,如果用户离开,其记录将不会被删除。相反,状态将从1更改为0。
如果我将数据插入到Users表中,是否也需要手动将数据插入到Users_By_Status表中?如果我更新“用户”中的状态会怎样?我还需要手动更新Users_By_Status表中的记录吗?
我觉得我对卡桑德拉的理解不正确。感谢所有我能得到的帮助。
解决方法
简而言之:是的,您需要手动删除。 在cassandra db中,您需要在应用程序层中编写更多代码以处理类似情况。
但是我们还有其他选择,例如物化视图或BATCH语句。
对于您的解决方案,我认为实例化视图是最佳选择。您可以从表“用户”创建实例化视图。像这样:
CREATE MATERIALIZED VIEW Users_By_Status
AS SELECT username,status,userid
FROM Users
PRIMARY KEY(username,userid);
是的,当您更新表用户时,更新也会在实例化视图Users_By_Status中发生。
参考:https://docs.datastax.com/en/cql-oss/3.3/cql/cql_using/useCreateMV.html
,我也需要手动更新Users_By_Status表中的记录吗?
所以CoutinhoBR提到了它,但是我马上出来说。您无法在Cassandra中更新主键值。因此,这里需要一个finalCoffeBuyerList
才能获取旧的状态值,然后写入新的状态值。