gpt4 book ai didi

cassandra - 如何处理非规范化数据的变化

转载 作者:行者123 更新时间:2023-12-04 21:37:28 24 4
gpt4 key购买 nike

在整个包含它的表中更新未索引的常规列(与主键相关)的最佳方法是什么?

即用户发布了一些东西,并且该帖子在许多表中被复制以进行快速检索。但是当该帖子更改(通过编辑)时,它需要在整个数据库中更新,在包含该帖子的所有表中(在具有不同和未知主键的表中)。

我想到的解决方案:

  • 有一个映射表来跟踪所有这些表中的主键,但它似乎会导致表爆炸(post 不是唯一可能改变的属性)。
  • 使用 Solr 进行映射,但我担心我会将它用于错误的目的。

  • 任何启示将不胜感激。

    编辑(虚构模式)。

    如果帖子变了怎么办?甚至用户的 display_name ?
    CREATE TABLE users (
    id uuid,

    display_name text,

    PRIMARY KEY ((id))
    );

    CREATE TABLE posts (
    id uuid,

    post text,
    poster_id uuid,
    poster_display_name text
    tags set<text>,
    statistics map<int, bigint>,

    PRIMARY KEY ((id))
    );

    CREATE TABLE posts_by_user (
    user_id uuid,
    created timeuuid,

    post text,
    post_id uuid,
    tags set<text>,
    statistics map<int, bigint>,

    PRIMARY KEY ((id), created)
    );

    最佳答案

    这取决于更新的频率。例如,如果用户很少更新他们的名字(每个用户帐户几次),那么使用二级索引可能是可以的。只要知道使用 2i 是一种分散收集,所以如果它是一个常见的操作,你会看到性能问题。在这些情况下,您需要使用物化 View (3.0 中的 View 或您自己管理的 View )来获取给定用户的所有帖子的列表,然后更新用户的显示名称。

    我建议在后台作业中执行此操作,并给用户一条消息,例如“您的姓名更改可能需要 [某个时间单位] 才能反射(reflect)到任何地方”。

    关于cassandra - 如何处理非规范化数据的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34554643/

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