【问题标题】:MySQL: how to ensure integrity in multiple read only architectureMySQL:如何在多个只读架构中确保完整性
【发布时间】:2010-06-24 18:31:00
【问题描述】:

场景描述起来很简单,但答案可能很复杂:

想象一下你有一个只写 mysql 数据库的情况。然后你有大约 5 或 6 个只读数据库。写入数据库具有特定库存的计数。您有成千上万的用户在使用这个特定的库存项目,但数量有限。为了争论,说 10 个项目。

确保只售出 10 件商品的最佳方法是什么?如果只读从站更新的时间之间甚至有 200 毫秒的增量,那么计数的完整性是否会过时,从而销售您没有的库存?

您将如何解决/扩展这个问题?

【问题讨论】:

  • 库存低于零在现实中很常见——这些东西是缺货的。作为一个企业,你真的不会仅仅因为你手头没有物品就接受美元吗? ;)
  • 我的问题或多或少是个问题。我只是编造了一个我想进一步了解的假设场景。
  • @OMG Ponies:这真的取决于业务。如果物品稀有且缺货,并且有交货期限,您可能不想冒险接受 $ :)

标签: mysql database database-design scaling high-load


【解决方案1】:

并发用户的基本解决方案可能也会涵盖这一点。在“购买”交易的某个时刻,您需要减少库存(在写入服务器上)。通过任何方法,强制库存不能低于零。

如果剩下一件物品,而有两个人想买它,那么一个人就倒霉了。

复制延迟完全相同。两个用户看到可用的产品,但当他们尝试购买时,它已经消失了。该场景的一个很好的解决方案包括复制延迟和用户简单地从另一个用户下抢夺最后一个项目。

【讨论】:

    【解决方案2】:

    这完全取决于您决定锁定主表以进行更新的时间和窗口。

    A.如果您必须 100% 确定某件商品只有在确实可用时才会尝试购买。您必须在向特定用户列出商品后立即为特定用户锁定商品(这意味着您将暂时减少库存)

    B.如果您可以展示“抱歉,我们刚刚缺货”的消息。您应该在结账之前锁定该项目(好吧,您可以在交易完成后这样做。但要以非常愤怒的客户为代价)

    我会选择方法 A 进行锁定,并且可能会针对剩余库存非常少的商品标记“即将售罄”警告。 (如果这种情况非常频繁,您还可以计算同时点击该项目的用户数并给出更准确的警告)

    从业务角度来看,您不希望库存如此之低(低于并发买家的数量)这当然在“圣诞节”时期是不可避免的,因为它可以缺货 :)

    【讨论】:

      猜你喜欢
      • 2016-12-04
      • 1970-01-01
      • 2019-12-03
      • 1970-01-01
      • 2016-04-06
      • 2011-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多