答案 0 :(得分:4)
关于并发性问题,您的应用程序应设计为尽可能缩短与数据库的连接。数据库上的每个操作都应该包括:打开连接,对数据库进行操作,关闭连接而不是:打开连接,做一堆可能与获取/更新/插入数据有关的工作,然后在“最后“关闭连接。
现在,关于应用程序并发性,最终会出现两种情况。在方案一中,我将其称为“最后写入获胜”,无论最后写入给定行的连接是存储的数据的版本。如果Alice然后Bob同时写入同一行的Name列,Bob的版本将是存储的。这是迄今为止最简单的,但如果您可能有很多人更新相同的数据,则可能会出现问题。
另一种选择是“第一次写赢”,也称为乐观并发。在这种情况下,第二个调用检查数据自上次检索以来是否未更改,如果有,则回滚其事务。接下来会发生什么取决于您的申请。有些系统只是抛出错误并要求用户重新输入他们的信息(丢弃他们的原始更改)。这显然更容易实现。某些应用程序告诉用户数据已更改并提供有关不同内容的一些信息,并询问他们是否要覆盖此更改。根据系统的体系结构,这可能会更复杂。
有关详情,请参阅Optimistic Concurrency。
答案 1 :(得分:1)
有许多方法可以处理并发问题,每种方法都有自己的专业和协议。
This article提供了一个很好的一般性介绍。
如果您希望在并发性方面分享更多关于您的要求:
我很乐意提出更具体的建议。
答案 2 :(得分:0)