我们开发了一个在 MS SQL Server 上运行的 C# WinForms 应用程序。直到今天,我们都在使用一个非常简单的自制 OR-Mapper(使用反射),它带有一个用单例模式实现的廉价缓存机制。有一个用户触发的“重置”功能。该架构是一个简单的两层(客户端、服务器)三层(客户端上的表示和逻辑,MS SQL 作为服务器上的数据层)。
通常我们加载大约 300 行和大约 30 列,这些列经常更改(以及其他一些很少更改的表)。此应用程序的不同实例在不同的客户端计算机上运行,加载了相同的 300 行,并在随机行上更改数据。应用程序立即更新数据库上的数据。在他们这样做之前,会检查完整性,以便用户在出现问题时获得反馈。但是对于用户在屏幕上看到旧值的某些行,当他想确保拥有最新数据时,他必须手动重置缓存。
如果应用程序考虑更改的行本身,那就太好了。每隔几秒就会有更新。但只有其中一些更新与其他应用程序相关(取决于有源过滤器......)
我想到的解决方案:
- 使用带有公共缓存的 OR-Mapper(例如带有集群缓存的 NHibernate)
- 开放式问题:这些 L2 缓存是为客户端应用程序设计的吗?当缓存更改发生时,我可以触发 UI 更新吗?其他基于 OR-Mapper 的解决方案?
- 使用应用服务器实现另一层,将逻辑移至该应用服务器。只运行一个实例,它缓存数据并在逻辑对象上发送事件,通知其他客户端更新的数据。不要在客户端缓存任何数据。
- 开放式问题:在应用服务器上加载?与应用服务器的开销通信?将逻辑 DLL 移动到应用服务器中的工作量..?报告的数据源(直接/应用服务器)?
- 像这个用户考虑的东西:https ://stackoverflow.com/questions/7593884/what-technology-to-use-for-data-persistence-cache-and-synchronization-in-n-tier
- 在逻辑级别添加某种数据更改通知(基于广播的通知...)
- 开放式问题:现有库?在 SQL Server 上加载?
- 完全其他解决方案?
我知道我在这里没有得到解决方案。只需要对这些解决方案(或新解决方案)的一些想法......感谢您的任何投入!