很难理解 Cassandra 查询

Hard time understanding Cassandra query

在Cassandra中,我理解table应该是根据需要查询的内容来创建的。例如,我目前有一个 Users 和 Users_By_Status table.

##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。

如果我将数据插入用户 table,是否也需要手动将数据插入 Users_By_Status table?如果我更新用户中的状态会怎样?我是否也需要手动更新 Users_By_Status table 中的记录?

我感觉我对 Cassandra 的理解有误。感谢我能得到的所有帮助。

简答:是的,您的情况需要手动删除。 在 cassandra db 中,您需要在应用层中编写更多代码来处理这样的场景。

但我们还有其他选项,例如物化视图或 BATCH 语句。

对于您的解决方案,我认为物化视图是最佳选择。您可以从 table 用户创建实体化视图。像这样:

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

是的,当您更新 table 用户时,更新也会在实体化视图 Users_By_Status 中进行。

参考:https://docs.datastax.com/en/cql-oss/3.3/cql/cql_using/useCreateMV.html

Do I need to manually update the record in Users_By_Status table too?

所以 CoutinhoBR 提到了它,但我会直接说出来。您无法在 Cassandra 中更新主键值。所以这就是需要 DELETE 从那里获取旧状态值,然后写入新状态值的地方。