【问题标题】:How to deal with concurrency in database in stock market app?如何在股市应用程序中处理数据库中的并发?
【发布时间】:2013-11-20 21:09:41
【问题描述】:

我正在为一个简单的股票市场开发一个 Java 应用程序,人们可以在其中买卖股票。我在想的问题是如何处理买/卖并发并确保2+并发买单不会为不同用户创建重复共享?

我使用 MySQL 来存储所有信息并将买卖订单转到特定表。

当两个用户同时立即为同一股票发出买单时,我如何确保他们不会获得比可用股票更多的股票?

客户端连接到服务器,服务器将请求发送到 RMI 服务器。 RMI 连接到 MySQL 以存储数据。

【问题讨论】:

  • 这完全取决于设计。这更像是一个设计决定。分享表格设计,以便思考解决方案
  • @HarshaBhat 编辑了帖子。订单的表格设计很简单。它包含他想买什么和多少钱。客户端向服务器发送买单,服务器调用 RMI 来创建买单。在每个买入订单之后,RMI 执行 matchOrders() 匹配现有的买入和卖出订单。

标签: java mysql concurrency


【解决方案1】:

只要您围绕每笔交易使用交易,那么使用任何合理的数据库设计,数据库都不会让这种情况发生。如果两个线程都尝试提交对所提供共享计数的更改,一个会成功,另一个会失败并出现错误。然后第二个线程只需要重试交易。

【讨论】:

    【解决方案2】:

    如果是这种情况,则 DB 旨在处理这种情况。 这是任何 RDBMS 系统的 ACID 属性之一,

    记录在一个事务更新值时被锁定,并且仅在提交或回滚时解锁。 第二个事务要么等待,要么返回错误。

    如果您想处理它,请处理数据库中的锁以向用户提供自定义消息。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-06
      • 1970-01-01
      • 2011-05-24
      • 2018-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多