如何在C#中的客户端 - 服务器应用程序中处理数据库并发?

时间:2010-04-10 17:52:21

标签: c# mysql wpf

  1. 我正在使用C#WPF开发一个具有客户端 - 服务器架构的应用程序(客户端将进行产品销售计费)。我是这方面的新手,我问这个问题是为了开始我的开发过程。 Click here to view question.

    所以,最终我选择了MySQl,WCf& WPF。现在我有一个愚蠢的问题。我是否需要在我的应用程序中显式处理数据库并发(如同时插入数据的3个客户端)或MySQl将处理此问题而没有任何冲突?
  2. 为了完成我的项目,我想,我将在WCf中创建一个服务,它将从客户端应用程序进行数据库查询。您是否有任何建议可以提高我的应用程序性能。

3 个答案:

答案 0 :(得分:4)

关于并发性问题,您的应用程序应设计为尽可能缩短与数据库的连接。数据库上的每个操作都应该包括:打开连接,对数据库进行操作,关闭连接而不是:打开连接,做一堆可能与获取/更新/插入数据有关的工作,然后在“最后“关闭连接。

现在,关于应用程序并发性,最终会出现两种情况。在方案一中,我将其称为“最后写入获胜”,无论最后写入给定行的连接是存储的数据的版本。如果Alice然后Bob同时写入同一行的Name列,Bob的版本将是存储的。这是迄今为止最简单的,但如果您可能有很多人更新相同的数据,则可能会出现问题。

另一种选择是“第一次写赢”,也称为乐观并发。在这种情况下,第二个调用检查数据自上次检索以来是否未更改,如果有,则回滚其事务。接下来会发生什么取决于您的申请。有些系统只是抛出错误并要求用户重新输入他们的信息(丢弃他们的原始更改)。这显然更容易实现。某些应用程序告诉用户数据已更改并提供有关不同内容的一些信息,并询问他们是否要覆盖此更改。根据系统的体系结构,这可能会更复杂。

有关详情,请参阅Optimistic Concurrency

答案 1 :(得分:1)

有许多方法可以处理并发问题,每种方法都有自己的专业和协议。

This article提供了一个很好的一般性介绍。

如果您希望在并发性方面分享更多关于您的要求:

  • 当你想要发生什么? 多人尝试编辑相同的内容 数据?
  • 您希望用户多久编辑一次相同的数据?

我很乐意提出更具体的建议。

答案 2 :(得分:0)

  1. 数据库服务器非常擅长处理多个更新。
  2. 使用netTcpBinding