双向数据同步的最佳实践/模式


52

在我的工作中,经常会出现数据库系统之间的2路数据同步的想法。经典示例是两个稍微不同的CRM系统(例如,Raiser's Edge和Salesforce),并且需要在它们之间进行双向联系人数据同步。

撇开API的考虑,假设您有一个要同步的共享密钥,并且纯粹考虑要使用的算法/模式,这是非技术人员经常低估的一项任务。

例如,您必须当心:

  • 您可以轻松地检测到两个系统中的哪些记录已更改(或者您必须比较两个系统之间的所有记录以检测更改)
  • 如果要进行每N小时一次的同步,那么在两个系统中相同记录或多或少同时发生更改的情况下,如何处理冲突
  • 如果您要进行实时同步(例如,一个系统中的更新会立即触发另一个系统的更新),如何处理由于错误或系统崩溃而导致的时间差异。

我个人可以考虑解决所有问题的方法,但是我想知道是否可以参考任何众所周知的模式,文献或最佳实践。


您所描述的听起来很像联邦数据库系统 -正确吗?
gnat 2012年

@gnat:谢谢您的链接,其中一些问题是相似的(例如,处理异构性),但是我说的是同步来自两个自治数据库的数据子集,而这似乎更多是关于为所有内容创建完全集成的视图跨多个数据库。
codeulike

1
7年后,有50个投票,但只有1个像样的答案。那里一定有一些同步模式或最佳实践吗?
codeulike

Answers:


8

是的,这个难题很容易被低估。可能需要做很多工作。如果您使用Microsoft技术,则可能需要在此处此处查看Microsoft Sync Framework 。


1
谢谢,那很有趣。我听说过Sync Framework女士,但没有意识到它是如此的笼统。基本上,这是一种通常用于处理同步问题的模式。
codeulike

2
Microsoft Sync Framework被Microsoft Sync Framework Toolkit取代。
Tomas Kubes 2014年

我对那些不清楚的文档感到沮丧,尤其是针对非SQL Server ADO.NET数据提供程序的文档。此外,我的工作场所正在寻找不需要在生产环境中添加基础结构表/进行更改的东西。因此,我将放弃此一个。
Veverke '17

0

关于远程站点数据库同步有许多理论。首先从INSERT开始。处理这一操作很容易-因为您可以为每个网站创建唯一的ID(例如,网站名称的首字母+ ID(数字):site_a_177与site_b_53)

因此,插入不应造成任何冲突。问题是更新。我不相信有100%的故障证明方法,但是您可以通过“锁定”远程数据库中的记录来开始更新,并且只有在您获取到句柄之后-继续更新,并通过同步更新来完成然后才释放锁。


1
谢谢,我想您是在谈论具有相同架构的分布式数据库并处理分布式事务。我想更多的情况是两个DB是完全自治的(例如,它们以完全不同的方式分配唯一的ID,而架构也有所不同),但您想同步其中的一部分数据。
codeulike

听起来好像不应该有任何冲突。在这种情况下,它应该非常简单-只需保存已为每个表同步的“最后一个记录ID”,然后从那里继续。
alfasin 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.