在cassandra中,我理解应该根据需要查询的内容来创建表。例如,我当前有一个users和users\ by\ u 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,
status int,
user_id uuid,
PRIMARY KEY (username, status, user_id)
);
在这种情况下,如果用户离开,他们的记录将不会被删除。相反,状态将从1更改为0。
如果我将数据插入到users表中,是否也需要手动将数据按状态插入users表?如果更新用户的状态会发生什么?我是否也需要手动更新users\ by\ u status表中的记录?
我觉得我对Cassandra的理解是错误的。谢谢你给我的帮助。
2条答案
按热度按时间2skhul331#
简短回答:是的,在您的情况下,您需要手动删除。在cassandradb中,您需要在应用程序层中编写更多代码来处理这样的cenarios。
但我们还有其他选择,比如物化视图或批处理语句。
对于您的解决方案,我认为物化视图是最佳选择。您可以从表用户创建物化视图。这样地:
是的,当您更新表用户时,更新也会在物化视图users按状态进行。
参考文献:https://docs.datastax.com/en/cql-oss/3.3/cql/cql_using/usecreatemv.html
wtlkbnrh2#
我是否也需要手动更新users\ by\ u status表中的记录?
所以coutinhobr提到了,但我会直接说出来。不能在cassandra中更新主键值。所以这就是
DELETE
需要从中获取旧的状态值,然后写入新的状态值。