数据库同步的方法

时间:2012-08-23 09:08:17

标签: database synchronization

我目前被指派为我的公司开发同步应用程序。我们的数据库服务器上有SQL服务器,它将与客户端数据库同步。客户端数据库是未知的,它们可以是SQLite或MYSQL等等。

此同步应用程序的作用是,检测服务器和服务器上发生的更改。客户数据库。保存这些更改并同步。如果服务器数据库发生更改,它将与客户端数据库同步,反之亦然。

我做了一些研究,并了解了许多解决方案。其中之一是使用Microsoft Sync Framework。但我几乎没有找到一个很好的实现示例来与远程数据库同步。

然后我遇到了SQL Server 2008上的变更数据捕获(CDC).CDC的工作原理是通过触发器检测源表的变化,并将这些变化放在一个名为sync_table的单独表上,然后将该表用于同步。 / p>

因为我无法使用CDC功能,因为我的机器上没有足够的数据库权限,我已经开始开发自己的解决方案,就像CDC一样。我为每个源表创建单独的sync_table,创建触发器以检测数据更改并将此数据放入sync_table。

但是,我建议我做更多的研究,以选择最佳的实施方法。

我需要记住以下事项,

  • 数据库可能/可能不在同一网络上。
  • 在服务器端,用户必须能够选择哪些表将参与同步过程。
  • 需要首先注册将与服务器数据库同步的设备。这意味着用户可以在开始同步之前注册所有客户端设备。

像往常一样,任何帮助将不胜感激:)

1 个答案:

答案 0 :(得分:3)

有一个名为SymmetricDS的开源项目具有许多相同的目标。看看documentation and data model,看看问题是如何解决的,也许你会得到一些想法。有一个sym_data表,而不是每个源表的单独影子表,其中所有数据都以逗号分隔值格式捕获。优势在于可以查找捕获的数据并检索属于同一事务的更改。在成功传输数据后,通常通过清除表来保持较小的表。它使用Web协议(HTTP)进行数据传输。优点是利用现有的Web服务器进行性能,管理以及通过防火墙进行的已知过滤。在允许客户端同步之前,还使用了注册协议。服务器管理员为客户机ID“打开注册”,允许客户端第一次连接。它支持许多不同的数据库,因此您可以找到如何在这些系统上编写触发器和检索唯一事务ID的示例。