4

如果我有一个最终一致的分布式数据库,如果我有一个网站,我正在销售产品并且我正在更改商品的价格,会发生什么?

如果产品的价格为 X,而我将其更新为价格 Y,则某些版本的数据库可能仍显示价格 X。如果客户结账,是否有策略确保他们实际上获得最新价格,所以他们没有收取不正确的费用?

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

4

3 回答 3

4

我们曾经有一个自定义脚本来跟踪复制滞后,但那是几年前的事了。从那时起,我们就转向了Percona Toolkit提供的心跳监视器。

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

于 2012-03-21T03:00:27.003 回答
1

您的数据库应该有一个价格、下一个价格和价格生效的日期/时间。然后在用户指示订单时检查交易的时间戳。然后,您应该将该价格与交易一起存储,从那时起对该购买生效。

更好的是,为商品/价格组合创建一个唯一标识符,并在您显示目录时将其记录下来 - 这样与您提供的内容相比,不会有任何意外。(当然有一些合理的超时来防止滥用。)

于 2012-03-21T03:02:50.140 回答
0

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

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

如果您在更新数据库时没有将整个站点关闭至少一两分钟以进行更新,那么在每笔交易向支付网关发出请求之前,如果不运行脚本,我无论如何都无法解决这个问题. 特别是如果您的用户已经在会话中。


您可以在用户将请求转发到支付网关之前在每个数据库中查找商品价格,如果它们不相同,则重定向回产品页面?

如果更新间隔一秒钟,我可以看到这是一个切实可行的解决方案。

于 2012-03-21T03:19:38.377 回答