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

3
我的客户是一家金融服务提供商,在500多个客户处部署了其软件。他们的应用程序是用C#编写的,使用SQL Server作为数据库后端。他们希望从所有客户的数据库中收集数据,并向客户发送少量数据。有一些要求:
1. 数据同步针对7个略有不同的数据库模式以及7个不同版本的软件中的500多个客户进行。 2. 可能会有新版本的软件,具有不同的模式,不能等待更新此数据同步机制。基本上,数据同步需要灵活支持任何模式,并且可以由集中位置进行控制,而不是将其更改与应用程序的发布相关联。 3. 需要使用.NET编写,因为他们所有的软件都在Windows上运行。 4. 可以同时部署一个特殊的数据同步客户端,该客户端可以访问每个客户的SQL Server数据库,但不能保证经常更新客户端。
是否已经有一个框架(除了使用数据库触发器的Microsoft Sync Framework)可用于开发此数据同步系统?
是否有任何关于多租户系统或数据同步的好书/文章,提供有关如何创建此类系统的一些好点子?

事件溯源技术会对你非常有帮助,但需要从客户端应用程序发布有意义的事件。 - Alexey Raga
你可能想考虑使用XML来适应可变和不断变化的模式。它为您提供了一种收集不同数据并稍后(尝试)解决细节问题的方法,只要始终包含足够的信息来识别模式版本即可。 - HABO
1个回答

3

不确定除了同步之外是否存在其他框架,我前段时间有类似的要求,但不能使用 MS Sync,因为我没有使用 mssql。

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

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

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

您可以创建一个具有以下属性的模式历史记录表,

  • 表名
  • 版本
  • 上次同步日期

然后,在需要进行同步的所有表中,每个值都具有日期更改和最后更改的用户属性,例如

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

当您进行同步时,

  1. 检查模式表,如果客户端版本小于服务器版本==>更新模式(运行更新模式脚本)
  2. 获取服务器更新内容,需要将新数据推送到客户端,其中 owner = server 且 datechanged > clientchangedate
  3. 将每个表的同步最后更改日期与模式表的最后同步日期进行比较

    如果更改日期 > 同步日期且用户 = client => 进行与服务器的同步(更新或插入)

如果您想要复制它,请查看 ms 同步概念 http://msdn.microsoft.com/en-us/sync/bb821992.aspx


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接