很难理解Cassandra查询

问题描述

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

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

如果我将数据插入到Users表中,是否也需要手动将数据插入到Users_By_Status表中?如果我更新“用户”中的状态会怎样?我还需要手动更新Users_By_Status表中的记录吗?

我觉得我对卡桑德拉的理解不正确。感谢所有我能得到的帮助。

解决方法

简而言之:是的,您需要手动删除。 在cassandra db中,您需要在应用程序层中编写更多代码以处理类似情况。

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

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

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

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

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

,

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

所以CoutinhoBR提到了它,但是我马上出来说。您无法在Cassandra中更新主键值。因此,这里需要一个finalCoffeBuyerList才能获取旧的状态值,然后写入新的状态值。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...