我们开发了一个在MS SQL Server上运行的C#WinForms应用程序。直到今天,我们使用一个非常简单的自制OR-Mapper(使用Reflection)和一个用单例模式实现的廉价缓存机制。用户触发了“重置”功能。该体系结构是一个简单的两层(客户端,服务器)三层(客户端上的表示和逻辑,MS SQL作为服务器上的数据层)。
通常我们加载大约300行,大约30列,这些列经常变化(以及其他一些很少变化的表)。在不同客户端计算机上运行的此应用程序的不同实例具有相同的300行加载并且正在随机行上更改数据。应用程序立即在数据库上更新数据。在他们这样做之前,检查完整性,以便在出现问题时用户得到反馈。但是对于用户在屏幕上看到旧值的某些行,他必须在他想确保拥有最新数据时手动重置缓存。
如果应用程序考虑更改的行本身会很好。每隔几秒就会有更新。但只有部分更新与其他应用程序相关(取决于活动过滤器......)
我想到的解决方案:
我知道我在这里没有解决方案。只需要对这些解决方案(或新的解决方案)有所了解......感谢任何投入!
答案 0 :(得分:3)
我想在此分享我的经验。在类似的情况下,所有客户都在一个企业局域网上。我在客户端应用程序中实现了一个UDP客户端(发送器/接收器),每当客户端更新数据时,它就会在Network BroadCast地址上广播“DataRefreshMessage”。所有其他客户端在收到“DataRefreshMessage”时更新了它们的视图。
我知道UDP不可靠,但对我的要求足够可靠,我的解决方案工作得很好。
答案 1 :(得分:1)
我自己没有使用过,但我相信当对以前查询过的数据进行更改时,SQL Server有dependency functionality that can notify your application。
我不知道与订阅这些通知的应用程序数量有多大关系。我链接的那个页面上有一条说明,说这种方法并不适合大量客户使用。
答案 2 :(得分:0)
老实说,听起来像是你正在鼹鼠山上建造一座山。如果您只是加载300条记录,只需每隔一段时间重新加载数据库中的数据,而不必担心缓存。数据集非常小,无论如何都会非常快,你不会有额外的复杂性和使用分布式缓存的失败点等等。
如果您需要确保只有一个人写入数据库,并且该人写入最新数据。您可以实现某种数据库锁定表,并在执行此操作之前检查其他人是否正在编写。