在一种情况下,我收到客户的出租车请求,然后将取车请求发送给多个驾驶员。现在,想象一下,如果有两个收到请求的驾驶员完全同时按下了“接受”按钮,那么哪个驾驶员将乘车。
我有一个带有ride_id,driver_id,complied(Boolean)列的行驶表。
到目前为止,我正在做的就是在点击“接受”按钮后立即调用API。该GET请求API会检查行程是否满足。如果是,我会向驾驶员显示一条消息,说骑行已经完成,否则我会遇到另一个POST API请求,该请求会将数据库中的已实现值更新为true并更新driver_id。
现在来看我们的场景,当两个驱动程序都同时点击“接受”时,将发出两个GET请求,并且两个驱动程序都将获得“未实现”,因为随后的响应都将发送一个POST请求。现在我很困惑谁的数据将在数据库中更新。
我在MySQL后端使用PHP进行数据库。
您正在通过运行SELECT
,然后运行来创建竞争条件UPDATE
。但是所有数据库可以非常有效地做的一件事就是管理并发。因此,一个更简单的解决方案是当驱动程序按下接受按钮时直接运行更新,例如:
UPDATE ride
SET driver_id = :driver_id, fulfilled = 1
WHERE ride_id = :ride_id AND fulfilled = 0
然后在您的应用程序中,检查记录是否受查询影响。如果是,则该驾驶员获胜。如果没有记录受到影响,则意味着之前有其他驾驶员接管了该旅程。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句