C# 多个客户端和中央服务器之间的.Net数据同步

C# 多个客户端和中央服务器之间的.Net数据同步,c#,.net,sql-server,multi-tenant,C#,.net,Sql Server,Multi Tenant,我的客户是一家金融服务提供商,他们的软件部署在500多个客户上 他们的应用程序是用C#编写的,并使用SQL Server作为数据库后端。他们希望从所有客户机数据库收集数据,并将少量数据发送回客户机。有几个要求: 数据同步针对500多个客户机,这些客户机在7个不同版本的软件中有7个稍微不同的数据库模式 随着时间的推移,他们的软件可能会有具有不同模式的新版本,而这些新版本不能因为等待更新此数据同步机制而延迟。基本上,数据同步需要灵活,以支持任何模式,并从一个中心位置进行控制,而不是将其更改绑定到应用

我的客户是一家金融服务提供商,他们的软件部署在500多个客户上

他们的应用程序是用C#编写的,并使用SQL Server作为数据库后端。他们希望从所有客户机数据库收集数据,并将少量数据发送回客户机。有几个要求:

  • 数据同步针对500多个客户机,这些客户机在7个不同版本的软件中有7个稍微不同的数据库模式

  • 随着时间的推移,他们的软件可能会有具有不同模式的新版本,而这些新版本不能因为等待更新此数据同步机制而延迟。基本上,数据同步需要灵活,以支持任何模式,并从一个中心位置进行控制,而不是将其更改绑定到应用程序的发布

  • 需要在.Net中编写,因为他们的所有软件都在Windows上运行

  • 可以一起部署一个特殊的数据同步客户机,它可以访问每个客户机的SQL Server数据库,但不能保证经常更新客户机

  • 是否已经有一个框架(Microsoft Sync framework除外,它在数据库上使用触发器)可以帮助开发此数据同步系统


    有没有关于多租户系统或数据同步的好书/文章可以阅读,这些书/文章提供了一些关于如何创建这样一个系统的好观点?

    不确定是否存在除同步之外的现有框架,我之前也有类似的要求,但无法使用MS sync,因为我没有使用mssql

    这就是我做的,一些自定义代码

    我们将对模式更改方法进行一些假设

    • 可以添加新字段/属性
    • 不会删除现有字段(即,您不必迁移 (现有数据)
    • 客户端和服务器上的时钟使用UTC并同步
    您可以创建具有以下属性的架构历史记录表

    • 表名
    • 版本
    • 上次同步日期
    然后,对于所有需要同步的表,每个值都有一个日期更改和上次更改的用户属性,例如

    • 第1项,第1/1/13项,服务器
    • 项目2,2/2/13,客户1
    同步时

  • 如果客户端版本<服务器版本==> 更新架构(运行更新架构脚本)
  • 获取服务器更新、要推送到客户端的新数据,其中owner=server和datechanged>clientchangedate
  • 将每个表的同步上次更改日期与架构进行比较 每个表的表的上次同步日期

    如果更改日期>同步日期且用户=客户端=>同步到服务器(更新或插入)


  • 如果您想复制ms syncing概念,还可以查看它。

    事件源技术将对您有很大帮助,但它需要从客户端应用程序发布有意义的事件。您可能需要考虑使用XML来适应变量和更改模式。它为您提供了一种收集不同数据并(尝试)在以后整理细节的方法,只要您始终包含足够的信息来标识模式版本。