如何在Cassandra中维护多个表之间的数据一致性? [英] How to maintain data consistency across multiple tables in cassandra?

查看:8
本文介绍了如何在Cassandra中维护多个表之间的数据一致性?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我弄不清楚如何跨多个表维护属性更新以确保数据一致性。

例如,假设我在演员和粉丝之间有多对多的关系。一个粉丝可以支持很多演员,一个演员有很多粉丝。我制作了几个表来支持我的查询

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并可以在上面键入。

但是,我无法在fans_by_actor上更改我的fan_attr_1,除非首先查询与该风扇绑定的ACTOR_ID。

当您想要更新fansactors的任何属性时,都会出现此问题。

我试着在网上查找遇到类似问题的人,但找不到他们。例如,在DataStax的数据建模课程中,他们使用多对多关系中的演员和视频的示例,其中他们有表actors_by_videovideos_by_actor。与我参考过的其他在线资源一样,本课程讨论了查询后的表建模但没有深入探讨如何维护数据完整性。在actors_by_video表中,如果我想要更改参与者的属性,会发生什么?不必遍历actors_by_video的每一行来查找包含参与者的分区并更新属性?这听起来非常低效。另一种选择是事先寻找视频ID,但我在其他地方读到,在Cassandra中,先读后写是一种反模式。

无论从数据建模的角度还是从CQL的角度,解决此问题的最佳方法是什么?

编辑: -固定的句子存根 -添加上下文和之前的研究

推荐答案

数据建模

Cassandra不是关系数据库,在数据建模上需要遵循某些基本规则,在较高级别上,我们的数据模型需要遵循以下目标。

1)在群集中均匀分布数据

2)将读取的分区数降至最低

此外,我们应该选择单个大表,而不是将其拆分成多个表并在表之间添加关系。在这种方法中,将出现记录的重复。复制记录并不是成本更高的操作,因为它只占用稍微多一点的磁盘空间,而不是CPU、内存、磁盘IOPS或网络。

请注意,列键名称和值有大小限制。最大列键(和行键)大小为64KB。最大列值大小为2 GB。但由于没有流,并且请求时在堆内存中提取整个值,因此将大小限制为仅几MB。

更多信息:

http://www.datastax.com/dev/blog/basic-rules-of-cassandra-data-modeling

http://www.ebaytechblog.com/2012/07/16/cassandra-data-modeling-best-practices-part-1/

http://www.ebaytechblog.com/2012/08/14/cassandra-data-modeling-best-practices-part-2/

https://docs.datastax.com/en/cql/3.1/cql/cql_reference/refLimits.html

CQL

可以使用BatchMaterialized Views来维护表之间的一致性。从3.0版开始提供实例化视图

请参阅

How to ensure data consistency in Cassandra on different tables?

我的首选是更改数据模型并进行设计 因此,对于我们的查询,如果可能,请将其作为一个大表。

希望能有所帮助!

这篇关于如何在Cassandra中维护多个表之间的数据一致性?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆