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
您好,我是 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