我不知道如何正确表达我的问题。但是,为了提供关于我试图解决的问题的更多细节,让我描述一下我的应用程序。假设我正在尝试实现一个队列保留应用程序,并且我大致维护了一个表中的插槽数。
id | appointment | slots_available | slots_total
---------------------------------------------------
1 | apt 1 | 30 | 30
2 | apt 2 | 1 | 5
.. | .. | .. | ..
所以,在竞争场景中,假设所有东西都在应用程序端工作。一个场景可能发生在应用程序中:
user 1 -> reserves apt 2 -> [validate if slot exists] -> update slot_available to 0 -> reserve (insert a record)
user 2 -> reserves ap2 2 -> validate if slot exists -> [update slot_available to 0] -> reserve (insert a record)
如果用户1和2碰巧发现
同时为APT2提供插槽
在用户界面中?(当然,如果有一个槽,我会首先验证,但如果还没有一个槽单击,它们将在ui中看到相同的值)。然后两人同时提交预订。
现在,如果用户1验证是否有可用的插槽,即使用户2已经使用了该插槽,但更新操作尚未完成,该怎么办?然后
会有两个插页
.
不管怎样,我怎样才能保证只有一个人在
数据库级别
?我确信这是一个常见的场景,但是我还不知道如何实现这样的场景。只要解决了这种情况,重新建模的建议也是可以接受的。