很难理解cassandra查询

wbrvyc0a  于 2021-06-13  发布在  Cassandra
关注(0)|答案(2)|浏览(390)

在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的理解是错误的。谢谢你给我的帮助。

2skhul33

2skhul331#

简短回答:是的,在您的情况下,您需要手动删除。在cassandradb中,您需要在应用程序层中编写更多代码来处理这样的cenarios。
但我们还有其他选择,比如物化视图或批处理语句。
对于您的解决方案,我认为物化视图是最佳选择。您可以从表用户创建物化视图。这样地:

CREATE MATERIALIZED VIEW Users_By_Status
AS SELECT username, status, userid 
FROM Users
PRIMARY KEY(username, status, userid);

是的,当您更新表用户时,更新也会在物化视图users按状态进行。
参考文献:https://docs.datastax.com/en/cql-oss/3.3/cql/cql_using/usecreatemv.html

wtlkbnrh

wtlkbnrh2#

我是否也需要手动更新users\ by\ u status表中的记录?
所以coutinhobr提到了,但我会直接说出来。不能在cassandra中更新主键值。所以这就是 DELETE 需要从中获取旧的状态值,然后写入新的状态值。

相关问题