具有相同SQL数据库的多个网络应用程序

时间:2015-07-09 09:07:20

标签: sql

我将在同一网络上运行多台计算机,并运行相同的C#应用​​程序,并连接到SQL数据库。

我想知道是否需要使用服务代理来确保如果我更新机器1上的表B中的记录A,则更改将推送到计算机2.我已经看到需要使用消息服务器来完成此操作的应用程序之前,我想知道为什么这是必要的,当然如果他们连接到同一个数据库,一台机器的任何更改都会反映在另一台机器上?

谢谢:)

1 个答案:

答案 0 :(得分:1)

这主要是关于一致性和延迟。

如果你的应用程序总是在数据库上执行原子操作,并且它们总是在没有缓存的情况下读取所需内容,那么一切都将是一致的。

在实践中,这种情况很少发生。有很多隐藏的缓存机会,比如当你有一个编辑表单时 - 它具有实体在你开始编辑过程之前的价值,但是如果有人在同一时间修改了这些值呢?您只需使用数据重写更改。

解决这个问题是一堆架构决策。不同的场景需要不同的方法。

在数据库中提交数据后,阅读它的每个人都会看到同样的事情 - 但只有当他们真正开始阅读它时,这两个读取才会被另一个提交分开。

更新通知主要涉及使缓存无效,也许还有一些推送式处理(例如,IM客户端可能会向您显示弹出窗口,说明您收到了新消息)。但是,SQL Server通知不可靠 - 无法保证您将收到通知,甚至更少,以便您及时获得通知。这意味着为了确保一致性,您不能依赖缓存的数据,并且必须偶尔强制一次无效,即使您没有收到更改通知。

请记住,即使您实际使用的数据库与ACID足够接近,它通常也不是默认设置(主要是针对性能和可用性)。您需要了解您将获得什么样的保证,以及如何编写代码来处理此问题。如果您的应用程序引入了这些不一致性,即使是最完美的ACID数据库也无法帮助您保持一致性。