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

时间:2013-01-30 02:32:30

标签: c# .net sql-server multi-tenant

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

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

  1. 数据同步是针对500多个客户端,在7个不同版本的软件中有7个略有不同的数据库模式

  2. 随着时间的推移,可能会有新版本的软件具有不同的模式,等待更新此数据同步机制无法延迟。基本上,数据同步需要灵活,以支持任何架构并从中央位置进行控制,而不是将其更改与应用程序的发布相关联

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

  4. 可以有一个特殊的数据同步客户端部署在一起,可以访问每个客户端SQL Server数据库 - 但不保证经常更新客户端。

  5. 是否已有一个框架(Microsoft Sync Framework除了使用数据库上的触发器),这有助于开发此数据同步系统?

    是否有任何关于多租户系统或数据同步的好书/文章可以为如何创建这样的系统提供一些好处?

1 个答案:

答案 0 :(得分:3)

不确定是否存在除了同步之外的现有框架,我暂时有类似的要求,但由于我没有使用mssql,因此无法使用MS Sync。

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

对模式更改进行一些假设意味着

  • 可以添加新字段/属性
  • 现有字段不会被删除(即您不必迁移 现有数据)
  • 客户端和服务器上的时钟正在使用UTC并同步。

您可以使用以下属性

创建架构历史记录表
  • 表名称
  • 版本
  • 上次同步日期

然后,所有需要同步的表都有一个日期更改和最后更改的用户属性,例如

  • item1,1 / 1/13,server
  • item2,2 / 2/13,client1

同步时,

  1. 检查架构表,如果客户端的版本<服务器版本==> 更新架构(运行更新架构脚本)
  2. 获取服务器更新,将新数据推送到客户端,其中owner = server和datechanged> clientchangedate
  3. 将每个表与同步的最后更改日期与架构进行比较 表格的每个表格的最后同步日期

    如果更改日期>同步日期和user = client =>同步到服务器(更新或插入)

  4. 如果你想复制它,还可以查看ms同步概念http://msdn.microsoft.com/en-us/sync/bb821992.aspx