【问题标题】:cassandra data consistency issuecassandra 数据一致性问题
【发布时间】:2018-09-01 00:54:38
【问题描述】:

您好,我是 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。但是如何保持表之间的数据一致性。例如,当我将数据插入第一个表时,我忘记将数据插入到第二个表中......或其他方式

【问题讨论】:

    标签: cassandra nosql data-modeling


    【解决方案1】:

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

    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 中,此消息不存在,并且 MV 用于创建“查找表”
    猜你喜欢
    • 2014-10-13
    • 2017-02-23
    • 2017-01-09
    • 2018-07-26
    • 2017-04-03
    • 2011-08-16
    • 2016-04-06
    • 2018-10-29
    • 2016-10-04
    相关资源
    最近更新 更多