【发布时间】:2019-09-22 03:39:11
【问题描述】:
我是 cassandra 的新手,在以下场景的数据建模方面需要帮助。 在 oracle 中,我有两个类似于下面的表,我正在考虑迁移到 cassandra。
要解决的用例: 1. 繁重的读写。 2. 用户数据是先创建的,我们可以继续添加或删除帐户。 3.还将对其中一个用户帐户进行部分更新,例如更新帐户的金额或某些详细信息。 4. User_data 有一个字段来存储存在的活动 user_accounts 的计数。因此,每当我们在 user_account 表中添加或删除条目/行时。它将触发 user_data 中的更新。
基本上我不清楚如何为这些场景建模。是否只有一个表。但是有了这个,我不确定账户的数量 如果我有一个表并且将 user_accounts 作为 json 类型的列之一。然后,我相信我不能在那个 json 中进行部分更新。
考虑两个表的主要问题是事务管理。 如果我能够添加到 user_account,但无法更新 user_data,那么它将失败。
创建表 USER_DATA ( userId uuid 主键, 名称 varchar, noOfAccounts 整数,
..... #还有一些列...,
);
创建表 USER_ACCOUNTS (
用户标识 uuid
accountId uuid ,
整数,
..... #还有一些列...,
主键 (uuid,accountId) );
我尝试使用 FROZEN USER_ACCOUNTS 列表,但我们需要读取整个列表并在每次添加/删除或更新其中一个条目时回写。
我尝试使用json类型,但没有用。
【问题讨论】:
-
Cassandra 通常由查询用例建模。所有适当建模的身份在查询期间都使用分区键。所以你需要确保你构建的表有一个被查询的分区键。如果您以多种方式查询表(有时在 COLX 上进行过滤,有时使用 COLY),您将设计两张表,一张以 COLX 作为分区键,另一张以 COLY 作为分区键。从关系的角度来看,它并不漂亮,但这就是你实现速度的方式。分区键还决定数据分布。正如您所说,我相信必须完全更新 json 字段。
标签: cassandra