gpt4 book ai didi

Cassandra 数据同步问题

转载 作者:行者123 更新时间:2023-12-02 01:39:00 26 4
gpt4 key购买 nike

我研究 Cassandra 超过 2 周,只是完全掌握了它。我已经阅读了几乎所有关于 Cassandra 的网络,但仍然不清楚某些概念。以下是:-

根据文档:- 我们根据查询对列族进行建模。因此,我们需要事先了解我们的查询,这在现实世界中是根本不可能的。我们可以事先有一组特定的查询,这些查询都会随着时间而变化。因此,如果我根据以前的查询设计了一个模型,那么在出现新需求后,我需要重新设计模型。正如阅读一个 SO 线程将来很难修复错误的 Cassandra 数据模型。例如:- 我想要一个 user 模型,其字段为

姓名、年龄、电话、imei、地址、州、城市、注册类型、创建时间

目前,我只需要按(比如说)state 进行过滤。我会将 PK 作为 state。让我们将模型命名为 UserByState。现在 2-3 个月后,我提出了按 created_at 过滤的要求。现在,我将创建一个模型 UserByCreatedAt,PK 为 created_at

现在有两个问题:-

a) 如果我在需求出现时创建一个新模型,那么我需要将数据迁移到新模型中,即如果我创建一个新模型,我需要在当前模型中也有以前的数据.因此,我需要将数据从 UserByState 迁移到 UserByCreatedAt,即我需要编写一个脚本来将数据从 UserByState 复制到 UserByCreatedAt如果我错了请纠正我!!!

如果出现另一个新的过滤需求,我将创建新模型,然后进行迁移等等。

b) 要根据查询预先创建模型,我需要保持数据同步,即在上述用户案例中,我为 2 个查询创建了 2 个模型。

UserByStateUserByCreatedAt

那么我是否需要应用 2 个不同的写入查询??,即

UserByState.create(row = value,......)
UserByCreatedAt.create(row = value,......)

如果我有其他模型,例如“UserByGender”等。我需要手动将不同的写入查询应用于不同的模型还是它自己发生???保持数据同步的问题出现了。

最佳答案

分布式系统中没有免费的午餐,您已经遇到了一些关键限制。

如果您想要水平扩展的极高性能写入,您最终不得不在数据库的其他部分做出让步。 Cassandra 选择牺牲查询模式的灵 active ,以确保极快地访问定义明确的查询模式。

当大多数用户遇到需要使用极其不同且频繁的查询模式的情况时,他们会构建第二个表并同时更新两个表。为了获得多表写入的原子性,可以使用日志批处理来确保要么写入所有数据,要么不写入任何数据。日志批处理会增加成本,因此这仍然是性能的另一个权衡。除此之外,正常的一致性级别权衡仍然适用。

要将数据从旧表移动到新表,Hadoop/Spark 是不错的选择。这些是基于批处理的系统,因此它们不会提供低延迟,但非常适合一次性使用,例如使用新索引和 cronjob 操作重建表。

关于Cassandra 数据同步问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29485026/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com