【问题标题】:Cassandra Insert/Update without duplication when you can't rely on the primary key or uuid当您不能依赖主键或 uuid 时,Cassandra 插入/更新不重复
【发布时间】:2020-01-08 21:44:34
【问题描述】:

这就是问题所在。

作为批量文件上传 (CSV) 的一部分,我们的“客户”会定期被客户提取。我们从他们那里得到的数据是姓名、地址、邮政编码、客户参考号。

我们将这些保存到 cassandra 的“客户表”中。

当我们这样做时,我们会分配一个 UUID,然后我们会在整个系统的其余部分使用它。

问题是关于主键的……我们真的有两个选择 1) UUID 作为主键或,2)(姓名、地址、邮政编码)的复合主键。

这些选项的问题是:1)我们在初始插入时没有 UUID,“客户”可能重复,那么我们如何进行重复数据删除?获取(选择)后跟 upsert 将是低效的。 2) 有几个问题:a) 如果我们执行更新操作,则 UUID 可能会被覆盖…… b) 还有一个问题是名称、地址、邮政编码无法更新,因为它们是复合主键... a) 可能不是问题,因为对 UUID 的更改将发出一个事件,该事件将被其他感兴趣的服务接收...但是有点删除 UUID 的点... b) 我们可以保留别名 (AKA) 字段为客户提供首选或更新的详细信息,同时保留原始数据以供参考……虽然这感觉很笨拙。

首选且最简单的方法是选择选项 1,但不使用主键进行初始创建 - 不确定这是否可行?使用选项 2,我们还需要能够更新所有字段,但 UUID 列除外……

【问题讨论】:

    标签: cassandra primary-key uuid insert-update upsert


    【解决方案1】:

    只有事先知道,才能真正使用 UUID 作为分区键。如果您没有 UUID,您将无法将新客户插入表中。

    根据您的描述,您使用 UUID 作为系统其余部分的唯一 ID,因此它确实是完美的分区键。但是,您需要为没有客户 UUID 的情况找到解决方案。干杯!

    【讨论】:

    • 我们基本上已经得出结论,我们将不得不进行“获取”电话。就我们所见,实际上没有其他方法可以解决它......我们的目标是通过拆分生成获取的服务、响应获取的服务和插入/更新数据的服务来尽可能高效.利用我们的 kafka 队列来提高速度并减少服务必须处理的处理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-20
    相关资源
    最近更新 更多