c# - 全网数据同步

标签 c# nhibernate architecture appserver

我们开发了一个在 MS SQL Server 上运行的 C# WinForms 应用程序。直到今天,我们仍在使用一个非常简单的自制 OR-Mapper(使用反射)以及通过单例模式实现的廉价缓存机制。有一个用户触发的“重置”功能。该体系结构是一个简单的两层(客户端、服务器)三层(客户端上的表示和逻辑,服务器上的 MS SQL 作为数据层)。

通常我们加载大约 300 行和大约 30 列,这些列经常变化(以及其他一些很少变化的表)。此应用程序的不同实例在不同的客户端计算机上运行,​​加载了相同的 300 行,并且正在更改随机行上的数据。应用程序立即更新数据库上的数据。在这样做之前,会检查完整性,以便用户在出现问题时得到反馈。但对于用户在屏幕上看到旧值的某些行,当他想确保拥有最新数据时,他必须手动重置缓存。

如果应用程序考虑更改的行本身,那就太好了。每隔几秒就有更新。但其中只有一些更新与其他应用程序相关(取决于事件过滤器...)

我想到的解决方案:

  1. 使用带有公共(public)缓存的 OR-Mapper(例如带有集群缓存的 NHibernate)
    • 悬而未决的问题:这些二级缓存是为客户端应用程序设计的吗?当缓存发生更改时,我可以触发 UI 更新吗?其他基于 OR-Mapper 的解决方案?
  2. 使用应用程序服务器实现另一层,将逻辑移至此应用程序服务器。仅运行一个实例,该实例缓存数据并在逻辑对象上发送事件,通知其他客户端更新的数据。不要在客户端上缓存任何数据。
  3. 在逻辑级别添加某种数据更改通知(基于广播的通知...)
    • 未决问题:现有库?在 SQL Server 上加载?
  4. 完全不同的解决方案?

我知道我在这里没有得到解决方案。只需要一些关于这些解决方案(或新解决方案)的想法...感谢您的任何意见!

最佳答案

我想在这里分享我的经验。在类似的情况下,所有客户端都在一个公司 LAN 上。我在客户端应用程序中实现了一个 UDP 客户端(发送方/接收方),每当客户端更新数据时,它就会在网络广播地址上广播“DataRefreshMessage”。所有其他客户端在收到“DataRefreshMessage”后都会更新其 View 。

我知道 UDP 并不可靠,但对于我的要求来说足够可靠,并且我的解决方案工作得很好。

关于c# - 全网数据同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8125582/

相关文章:

c# - 如何在 Java 中生成伪随机字符串 "readable"?

c# - 对象引用未设置为对象错误的实例,试图使用 LINQ 递归查找对象

c# - 实现休眠。类+抽象基类

c# - NHibernate 3.2 按代码 (Conformist) 字典属性的类映射

c# - jQuery AJAX 的 ASP.Net MVC 路由问题

c# - 验证文本框不起作用

ASP.NET MVC 图像上传存储位置(数据库与文件系统)

java - 使用以数据为中心的方法在 Spring MVC 中维护干净的架构

spring - 在微服务架构中组织用户和身份验证

java - Tomcat集群环境的架构问题