Cassandra 卡桑德拉数据一致性问题
大家好,我是Apache Cassandra的新手,我找到了一篇关于Cassandra数据建模基本规则的文章。在示例1中,创建了两个表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
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用于创建“查找表”