gpt4 book ai didi

cassandra - 在 Cassandra 中可靠更新大量行的最佳实践(关系更新)

转载 作者:行者123 更新时间:2023-12-03 06:50:05 25 4
gpt4 key购买 nike

我有几个彼此相关的表,看起来像这样:

organizations: 
- id
- name
- ... other fields

users:
- id
- name
- organization_id
- organization_name
- ... other fields

我将 organization_name 字段保留在 users 表中,这样就不必查找组织来获取组织名称

问题是,如果组织名称发生更改,则必须更新与该组织相关的所有用户以反射(reflect)新名称。在我的真实场景中,有更多表用于存储 organization_name

问题:目前我只是异步启动更新语句,如果中途失败,那么我最终会得到不一致的数据

问题:是否有处理此类问题的最佳实践?

可能的解决方案:

  • 使用BATCH语句。但我发现它非常有限,因为默认情况下它只允许 50kb 查询大小(在我的情况下,1 次更新可能会导致更新来自两个或三个不同表的 8,000 个其他实体,字段值的长度不同 - 因此查询大小相当不可预测)
    • 我实际上尝试使用 BATCH 语句更新 100 个项目(共 600 个项目需要更新),但失败并出现“批量大小太大”异常...
  • 更新失败时重试

PS - 我的行不太宽,每个表最多大约 20 列


更新:

忘了补充,这是一个Web应用程序,需要尽快反射(reflect)更新,因此批处理作业不适用


更新 2:

关于读取模式,我当前的示例过于简单,但无论如何我都需要获取用户列表(可以来自多个组织) - 这可能会返回数百个组织的数千个用户,这就是我存储的原因 users 表中的 organization_name 据我了解,使用 Cassandra 数据非规范化是可行的方法

最佳答案

就像在每个长时间运行的更新过程中一样,您应该使用书签的概念:

  • 运行(例如 100 个)异步更新的作业,然后将刚刚完成的 100 行更新存储在某个位置。
  • 运行另外 100 行的另一个作业,然后为您刚刚更新的 200 行添加书签。
  • 等等...

如果发生崩溃,您只需阅读书签即可从崩溃的地方恢复。

要执行此类任务,您必须已经知道必须更新哪些记录,但我假设您已经知道它们或知道如何检索该信息。

关于cassandra - 在 Cassandra 中可靠更新大量行的最佳实践(关系更新),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43489258/

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