cassandra数据一致性问题

cassandra data consistency issue

您好,我是 Apache Cassandra 的新手,我找到了有关 Cassandra 数据建模基本规则的文章。在示例 1 中创建了 2 tables

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
)

此 tables 包含相同的数据(用户名、电子邮件和年龄)。这里我不明白如何向两个table中插入数据。我想,我必须执行两个单独的插入。一份用于 table users_by_username,一份用于 table users_by_email。但是如何保持tables之间的数据一致性。例如,当我将数据插入第一个 table 时,我忘记将数据插入第二个 table ... 或者相反

作为开发人员,您的工作是确保数据同步。虽然,您可以使用物化视图之类的东西生成另一个主键略有不同的 "table"(关于可以更改的内容有一些规则)。例如,对于您的情况,您可以具有以下内容:

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