cassandra数据一致性问题

时间:2018-03-22 14:24:22

标签: cassandra nosql data-modeling

您好我是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。但是如何保持表之间的数据一致性。例如,当我将数据插入第一个表时,我忘了将数据插入第二个表......或者反之亦然

1 个答案:

答案 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