早上好/下午/晚上好!
有 2 个系统 - CRM (customized SplendidCRM) и home-brewedmonster (crm+cms+backoffice)。
- CRM - Asp.Net 2.0 网站,Sql Server 2008;使用视图、存储过程、触发器实现;例如审计被实现为触发器+SP;网站是一个简单的用户界面;Ado DataSets 用作 Dtos
- 自酿怪物 - Asp.Net 3.5 WebApplication,SqlServer 2008;使用 ListToSql 实现;Sql Server 仅用作存储;在 C# 代码中实现的所有逻辑和审计;VS 的设计器生成的类用作 Dtos。
我需要在它们之间实现“双工”同步:
object is updated in Crm -> changes are applied in home-brewed monster
object is updated in home-brewed monster -> changes are applied in Crm
同步应该在“几乎实时模式”下工作——延迟是可以接受的。数据不多——目前大约有 35000 个对象和 120000 个审计条目,最多可以有 100000 个对象。对象也不是很大(数据库中有 60 列)。
对于这两个系统,都有一个允许更新的 Api:用于 Crm 的 Web 服务和用于自制怪物的 Wcf 服务。由于怪物的实现更改只能通过 Wcf 服务应用(例如,用于审计工作)。至于 Crm - 它可以通过 Web 服务调用或直接 SP 调用来更新(但最好使用 Web 服务)。
目前,Crm 中有一个包含对象外部 ID 的列,并且需要一种同步但更强大和更专业的解决方案。
由于某些原因(管理员失败或应用了错误的更新),两个系统都可能“脱机”。这不应该影响同步 - 系统恢复后应立即应用所有更新。重要的是,来自自制怪物的数据具有更高的优先级,并且应该覆盖来自 Crm 的更改。
问题是哪种技术/库更好用?如果可以将同步“从系统中取出”,那就太好了(系统会触发数据已更改的事件,而外部工具会同步更改)。这是由于系统和同步规则经常发生变化 - 例如,同步的第一个“版本”在某些情况下从 Crm 中删除对象,第二个版本没有删除但导出的数据更少,在“第三版”中更多一些添加了两个系统共有的字段。此更改将在将来出现,因此我不想触及其他系统(或非它们)并仅更改同步规则。