Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cassandra 卡桑德拉数据一致性问题_Cassandra_Nosql_Data Modeling - Fatal编程技术网

Cassandra 卡桑德拉数据一致性问题

Cassandra 卡桑德拉数据一致性问题,cassandra,nosql,data-modeling,Cassandra,Nosql,Data Modeling,大家好,我是Apache Cassandra的新手,我找到了一篇关于Cassandra数据建模基本规则的文章。在示例1中,创建了两个表 CREATE TABLE users_by_username ( username text PRIMARY KEY, email text, age int ) CREATE TABLE users_by_email ( email text PRIMARY KEY, username text, age in

大家好,我是Apache Cassandra的新手,我找到了一篇关于Cassandra数据建模基本规则的文章。在示例1中,创建了两个表

CREATE TABLE users_by_username (
    username text PRIMARY KEY,
    email text,
    age int
)

CREATE TABLE users_by_email (
    email text PRIMARY KEY,
    username text,
    age int
)

此表包含相同的数据(用户名、电子邮件和年龄)。在这里,我不明白如何将数据插入两个表中。我认为,我必须执行两个单独的插入。一个用于表
users\u(用户名)
,一个用于表
users\u(电子邮件)
。但是如何保持表之间的数据一致性。例如,当我将数据插入第一个表时,我忘记将数据插入第二个表。。。或者从另一个角度看,作为开发人员,您的工作就是确保数据同步。尽管如此,您可以使用物化视图之类的方法生成另一个主键稍有不同的“表”(关于可以更改的内容有一些规则)。例如,对于您的情况,您可以有以下内容:

CREATE TABLE users_by_username (username text PRIMARY KEY, 
   email text, age int);

create MATERIALIZED VIEW users_by_email as SELECT * from 
   users_by_username where email is not null and 
   username is not null primary key (email, username);
如果将数据作为

insert into users_by_username (username, email, age) 
   values ('test', 'test@domain.com', 30);
除了按用户名查询外,还可以在物化视图中查询数据

SELECT * from users_by_username  where username = 'test' ;

 username | age | email
----------+-----+-----------------
     test |  30 | test@domain.com

SELECT * from users_by_email where email = 'test@domain.com';

 email           | username | age
-----------------+----------+-----
 test@domain.com |     test |  30

作为开发人员,您的工作是确保数据同步。尽管如此,您可以使用物化视图之类的方法生成另一个主键稍有不同的“表”(关于可以更改的内容有一些规则)。例如,对于您的情况,您可以有以下内容:

CREATE TABLE users_by_username (username text PRIMARY KEY, 
   email text, age int);

create MATERIALIZED VIEW users_by_email as SELECT * from 
   users_by_username where email is not null and 
   username is not null primary key (email, username);
如果将数据作为

insert into users_by_username (username, email, age) 
   values ('test', 'test@domain.com', 30);
除了按用户名查询外,还可以在物化视图中查询数据

SELECT * from users_by_username  where username = 'test' ;

 username | age | email
----------+-----+-----------------
     test |  30 | test@domain.com

SELECT * from users_by_email where email = 'test@domain.com';

 email           | username | age
-----------------+----------+-----
 test@domain.com |     test |  30

谢谢但有一个问题与你的答案有关。我试图创建物化视图,但出现了一个警告:物化视图是实验性的,不建议在生产中使用。这仍然是实际警告?这取决于Cassandra的版本-在最新版本中应该更好,但3.11.2仍然显示此警告。尽管在DataStax中,此消息不存在,但MVs用于创建“查找表”,谢谢。但有一个问题与你的答案有关。我试图创建物化视图,但出现了一个警告:物化视图是实验性的,不建议在生产中使用。这仍然是实际警告?这取决于Cassandra的版本-在最新版本中应该更好,但3.11.2仍然显示此警告。尽管在DataStax中,此消息不存在,MVs用于创建“查找表”