很难理解 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
从那里获取旧状态值,然后写入新状态值的地方。
在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
从那里获取旧状态值,然后写入新状态值的地方。