【问题标题】:Hard time understanding Cassandra query很难理解 Cassandra 查询
【发布时间】:2020-12-02 17:10:40
【问题描述】:

在 Cassandra 中,我知道应该根据需要查询的内容创建表。例如,我目前有一个 Users 和 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,
    status int,
    user_id uuid,
    PRIMARY KEY (username, status, user_id) 
);

在这种情况下,如果用户离开,他们的记录不会被删除。相反,状态将从 1 更改为 0。

如果我将数据插入到 Users 表中,我是否也需要手动将数据插入到 Users_By_Status 表中?如果我在用户中更新状态会发生什么?是否也需要手动更新 Users_By_Status 表中的记录?

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

【问题讨论】:

    标签: cassandra nosql cql


    【解决方案1】:

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

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

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

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

    是的,当您更新表用户时,更新也会发生在物化视图 Users_By_Status 中。

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

    【讨论】:

    • 非常感谢!那好多了。非常感谢您的帮助。
    【解决方案2】:

    我是否也需要手动更新 Users_By_Status 表中的记录?

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

    【讨论】:

    • 啊是的。想试一试,但觉得这样行不通。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-13
    • 2010-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    相关资源
    最近更新 更多