当您不能依赖主键或uuid时,cassandra插入/更新不会重复

iklwldmw  于 2021-06-10  发布在  Cassandra
关注(0)|答案(1)|浏览(430)

问题来了。
我们的“客户”作为客户批量文件上传(csv)的一部分定期接收。我们从他们那里得到的数据是姓名、地址、邮政编码、客户参考号。
我们把这些存到Cassandra的“客户表”里。
当我们这样做时,我们分配一个uuid,然后在系统的其余部分使用它。
问题是主键…我们有两个选择:1)uuid作为主键,2)复合主键(姓名、地址、邮政编码)。
这些选项的问题是:1)我们在初始插入时没有uuid,可能“客户”是重复的,所以我们如何去重复?get(select)后跟upsert将是低效的。2) 有两个问题:a)如果我们执行更新操作,uuid有可能被覆盖…b)还有一个问题,名称、地址,邮政编码无法更新,因为它们是一个复合主键…a)可能不是问题,因为对uuid的更改将发出一个事件,该事件将由其他感兴趣的服务接收…但某种程度上删除了uuid的点…b)我们可以保留客户首选的别名(aka)字段,或更新的详细信息,同时保留原始数据作为参考…尽管这感觉很笨拙。
首选且最简单的方法是选择选项1,但不使用主键进行初始创建-不确定这是否可行?使用选项2,我们还需要能够更新所有字段,但uuid列除外…

suzh9iv8

suzh9iv81#

只有事先知道是否可以,才能真正使用uuid作为分区键。如果没有uuid,就无法将新客户插入表中。
根据您的描述,您使用uuid作为系统其余部分的唯一id,因此它确实是完美的分区密钥。但是,您需要为没有客户uuid的情况找到解决方案。干杯!

相关问题