3

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

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

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

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

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

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

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

是否有任何关于多租户系统或数据同步的好书/文章可供阅读,它们为如何创建这样的系统提供了一些要点?

4

1 回答 1

3

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

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

对架构更改做出一些假设意味着

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

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

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

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

  • 项目 1,2013 年 1 月 1 日,服务器
  • 项目 2,2013 年 2 月 2 日,客户 1

同步时,

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

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

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

于 2013-01-30T05:16:40.017 回答