首页 > 解决方案 > 具有非规范化的 cassandra 数据建模

问题描述

我读了cassandra 数据建模,除了非规范化数据可能会改变之外,一切都很清楚。我如何同步它?email从此示例更改用户电子邮件时的更新方式是什么:

CREATE TABLE groups ( groupname text, username text, email text, age int, hash_prefix int, PRIMARY KEY ((groupname, hash_prefix), username) )

groupname是组的一部分,数据模型中的用户可能不知道任何组,因此在用户更改后无法更新电子邮件。

下面描述的解决方案是否合适?

向用户模型添加一列groups(类型set<text>

如果用户模型有一个主键username,那么我可以向应用程序添加一些DAOperUser(username)withupdateNameaddGroup方法。

对于每个username实例化自己的对象(通过工厂),它将user在初始化时从表中读取状态。这样它将具有usernameand groups,因此可以将更改视为write batch两个表 (usersgroups)。

标签: cassandradata-modeling

解决方案


在插入或更新数据时,需要使用 BATCH 语句来保持两个表之间的数据同步,users并且groups.

例如:

BEGIN BATCH
  INSERT INTO users (...) VALUES (...);
  INSERT INTO groups (...) VALUES (...);
APPLY BATCH;

如果您有兴趣,https ://www.datastax.com/dev 上有一个免费教程,其中详细解释了这些概念,并在预安装在同一浏览器选项卡上运行的 Cassandra 集群上进行了动手练习——原子性和批次。干杯!


推荐阅读