确保数据库一致性

时间:2012-03-21 02:44:18

标签: database replication eventual-consistency

如果我有一个最终一致的分布式数据库,如果我有一个类似于我正在销售产品的网站并且我正在改变商品的价格会怎么样?

如果产品的价格为X且我将其更新为Y价格,则某些版本的数据库可能仍会显示价格X.如果客户要退房,是否有策略确保他们实际获得最新价格价格,所以他们没有收取不正确的价值?

在某些时候,我不需要对数据进行一些完整性检查以确保使用最新的值吗?

3 个答案:

答案 0 :(得分:3)

我们曾经有一个自定义脚本可以跟踪复制延迟,但那是几年前的事了。从那时起,我们转移到Percona Toolkit提供的心跳监视器。

您可能还想考虑将他们选择的产品添加到他们的会话中,因此如果价格确实在结帐前发生变化,他们就不会受到惊吓。

答案 1 :(得分:1)

您的数据库应具有价格,下一个价格以及价格生效时的日期/时间。然后在用户指示订单时检查trandaction的时间戳。然后,您应该将该交易的价格存储为该交易的有效期。

更好的是,为商品/价格组合创建一个唯一的标识符,并在显示目录时记录它 - 然后与您提供的相比,不会有惊喜。 (当然有一些合理的超时以防止滥用。)

答案 2 :(得分:0)

正如 Mike Purcell 所说:“您可能还想考虑将他们选择的产品添加到他们的会话中,因此如果价格确实在结账之前发生变化,他们就不会受到惊吓。”

我认为这对你很重要,因为如果你正在更新两个和一个finsihes,但另一个不同时进行购买,用户可能会陷入错误的价格。

如果您在更新数据库时没有将整个站点关闭至少一两分钟来进行更新,那么在每个事务发出请求之前,如果不运行脚本,我无法想到处理此问题支付网关。特别是如果您的用户已经在会话中。


在用户向支付网关发送请求之前,您可以执行类似查找每个数据库中商品价格的操作,如果它们不相同,则会重定向回产品页面?

如果更新是第二次,我可以看到这是一个切实的解决方案。