您好我是Apache Cassandra的新手,我找到了有关Cassandra数据建模基本规则的文章。在示例1中创建了2个表
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_by_username
,另一个用于表users_by_email
。但是如何保持表之间的数据一致性。例如,当我将数据插入第一个表时,我忘了将数据插入第二个表......或者反之亦然
答案 0 :(得分:2)
作为开发人员,确保数据同步是您的工作。虽然,您可以使用物化视图之类的东西来生成另一个"表"主键略有不同(可以更改的内容有一些规则)。例如,对于您的情况,您可以拥有以下内容:
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