如果数据库不提供回滚功能,则清理数据的设计替代方案是什么?

时间:2018-11-30 08:58:38

标签: cassandra-3.0

我想Cassandra不提供回滚功能。在我的场景中,需要将一条数据写入两个不同的数据库(UserAddress)。

例如,说我要添加有关用户的信息。它有他们的名字,地址。我想将此信息分为两部分,以便我可以根据用户的电子邮件ID和所在的国家/地区查询用户。因此,我将创建两个数据库(每种查询类型一个),并将使用email idcountry作为分区键。

我可能会遇到的问题是-(1)用户创建配置文件(带有所有与用户相关的信息的HTTP请求)(2)我向User数据库发出Cassandra请求以在其中添加部分信息user数据库(电子邮件,名称)(3)我再次发出Cassandra请求,将地址信息添加到Address数据库。

现在,如果第3步失败,我需要回滚第2步。由于Cassandra没有这样做,所以我必须编写代码。但是不能保证我对步骤2的回滚将成功!

要处理这种情况,我认为逻辑应该在应用程序设计中,而不是代码中。您认为我应该如何设计应用程序?我的想法是

1)创建包含所有信息(分区键电子邮件ID)的Master数据库。当用户请求进入时,仅填充此数据库。每行都有一个字段,用于指示该行中的数据是否已分发。如果在Master中添加了数据,则用户将获得成功确认 2)另一个单独的过程负责获取行(标记为非分布式)并将其数据添加到两个数据库UserMaster中。我可以在此过程中实现保持数据一致性的逻辑(例如,如果两个操作均成功,则首先在User中添加数据,然后在Masterdistributed field in Master gets set to true中添加数据由于这是一个独立的后端过程,因此我可以根据需要进行多次尝试,而不必担心用户等待确认。

你怎么看?

0 个答案:

没有答案