我无法弄清楚如何跨多个表维护属性更新以确保数据一致性。
例如,假设我在演员和粉丝之间有多对多的关系。一个粉丝可以支持很多演员,一个演员有很多粉丝。我制作了几张表来支持我的查询
CREATE TABLE fans (
fan_id uuid,
fan_attr_1 int,
fan_attr_2 int
PRIMARY KEY ((fan_id))
)
CREATE TABLE actors (
actor_id uuid,
actor_attr_1 int,
actor_attr_2 int
PRIMARY KEY ((actor_id))
)
CREATE TABLE actors_by_fan (
fan_id uuid,
actor_id uuid,
actor_attr_1 int,
actor_attr_2 int
PRIMARY KEY (fan_id, actor_id)
)
CREATE TABLE fans_by_actor (
actor_id uuid,
fan_id uuid,
fan_attr_1 int,
fan_attr_2 int
PRIMARY KEY (actor_id, fan_id)
)
假设我是粉丝,并且在我的设置页面上,我想将我的值更改fan_attr_1
为不同的值。
在fans
桌子上我可以很好地更新我的属性,因为应用程序知道我的 fan_id 并且可以键入它。
但是,如果不先查询与风扇相关的 actor_ids,我就无法更改我fan_attr_1
的设置。fans_by_actor
fans
每当您要更新或的任何属性时,都会出现此问题actors
。
我尝试在网上寻找遇到类似问题的人,但我找不到他们。例如,在 Datastax 的数据建模课程中,他们使用具有多对多关系的演员和视频的示例,其中他们有表格actors_by_video
和videos_by_actor
. 与我咨询过的其他在线资源一样,该课程讨论了查询后的建模表,但没有深入研究如何维护数据完整性。在actors_by_video
表格中,如果我想改变一个演员的属性会发生什么?不必遍历每一行actors_by_video
来查找包含参与者的分区并更新属性吗?这听起来非常低效。另一种选择是事先查找视频 ID,但我在其他地方读到,在写入之前读取是 Cassandra 中的反模式。
从数据建模的角度或从 CQL 的角度来看,解决这个问题的最佳方法是什么?
编辑: - 固定句子存根 - 添加上下文和先前的研究