我的客户是一家金融服务提供商,他们的软件部署在 500 多家客户身上。
他们的应用程序是用 C# 编写的,并使用 SQL Server 作为数据库后端。他们希望从所有客户数据库中收集数据,并将少量数据发回给客户。有几个要求:
数据同步针对 500 多个客户端,这些客户端在其软件的 7 个不同版本中具有 7 个略有不同的数据库架构
随着时间的推移,他们的软件可能会出现具有不同架构的新版本,不能因为等待更新此数据同步机制而延迟。基本上,数据同步需要灵活以支持任何模式并从中央位置进行控制,而不是将其更改与应用程序的发布联系起来
需要用 .Net 编写,因为他们所有的软件都在 Windows 上运行
可以一起部署一个特殊的数据同步客户端,它可以访问每个客户端的 SQL Server 数据库 - 但不能保证经常更新客户端。
是否已经有一个框架(除了在数据库上使用触发器的 Microsoft Sync Framework)可以帮助开发这个数据同步系统?
是否有任何关于 Multi-Tenancy 系统或数据同步的好书/文章可以提供有关如何创建这样的系统的一些要点?
最佳答案
不确定是否有除同步之外的现有框架,前阵子我有类似的要求但无法使用 MS Sync,因为我没有使用 mssql。
这就是我所做的,一些自定义代码,
要对模式变化做一些假设意味着
- 可以添加新的字段/属性
- 现有字段不会被删除(即您不必迁移 现有数据)
- 客户端和服务器上的时钟使用 UTC 并同步。
您可以创建具有以下属性的模式历史表,
- 表名
- 版本
- 上次同步日期
然后所有需要同步的表都有一个日期更改和最后更改的用户属性,例如
- item1,1/1/13,服务器
- 项目 2,2/2/13,客户 1
同步时,
- 检查模式表,如果客户端版本<服务器版本==> 更新架构(运行更新架构脚本)
- 获取服务器更新,将新数据推送到客户端,其中 owner = server and datechanged > clientchangedate
将每个表的同步最后更改日期与架构进行比较 每个表的表的最后同步日期
if change date > sync date and user = client => 同步到服务器(更新或插入)
另请查看 ms 同步概念 http://msdn.microsoft.com/en-us/sync/bb821992.aspx如果你想复制它。
关于c# - .Net 多个客户端和中央服务器之间的数据同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14595738/