同步两个异构数据库

时间:2009-12-13 10:46:45

标签: database heterogeneous

我有2个异构数据库。 一个在mysql中,另一个在ms sql中。

我希望让它们保持同步。

定期会有数据流,信息流将是两种方式

任何人都有任何策略/方法吗?

4 个答案:

答案 0 :(得分:3)

假设您不打算使用某种形式的现成解决方案,那么您可以选择一些选项。基本上你要做的是找到一种方法来捕获在一个数据库中所做的更改并在另一个数据库中复制它们。

完全提取和增量
对要同步的表中的每一行进行完整的按键排序转储,并将其逐行与上次运行的同步转储进行比较。将输出排序使比较过程更快,因为您可以确定是否已更改,删除或删除行而不使用

  • Pro:保证捕获所有更改。
  • 专业版:易于实施。
  • Con:慢。
  • Con:运行时会在数据库上产生大量负载。

对于中小型数据库,此选项应该非常可行。

交易记录
分析数据库中的事务日志,以找出更改的内容,并将这些更改应用于其他数据库。

  • Pro:更快,因为它不需要读取数据库中的所有内容
  • 专业版:实施起来相对简单
  • Con: DBA有时必须清除日志以解决生产问题。这可能导致错过无法同步的更改。

如果你可以指望可用的日志,那么可能是一个好主意。

<强> 触发
使用触发器记录更改,并将其复制到其他数据库。

  • 专业版快,因为它只捕获更改。
  • Con:为每笔交易增加开销

应用程序中的同步
只需确保应用程序写入两个数据库。

  • Pro:数据库无实际开销。
  • Con:不可靠。只需一个人忘记写入两个数据库。

如果应用程序仅通过几个受控模块写入数据库(即忘记更新两个数据库的地方不多),则可以使用。在较少管理的设置中(即多个应用程序/不受控制或不良分解的数据库访问/临时脚本),这根本不是一种选择。

答案 1 :(得分:0)

Anand,你可以在谷歌找到这个。

sync mysql and mssql

我没有使用过这个软件,但是他们提供免费试用

答案 2 :(得分:0)

首先需要更多信息:

  • 你能承受多少同步延迟? 5秒? 5个小时? 15个小时?等。
  • 数据库之间有多少转换?在视图中可以处理什么或微不足道的更改,还是更实质的更改?
  • 数据量是什么样的?表格有多大,每天有多少数据变化,数据是否被分区?
  • 什么是并发要求?你可以关闭用户访问几分钟吗?
  • 会对同一个表或不同的表进行双向更改吗?
  • 什么是数据质量要求?如果两个不同的事务,每个事务在同一个表中但在不同的数据库中的同一行几乎同时更新,而另一个事务中的一个步骤,那么它是否正常?
  • 粒度是多少?您是否需要复制发生的每个事务,或者只复制某个时间点的当前快照(即使该时间点是每5分钟一次)?

通常,如果您需要实时同步,那么最终会得到一个复制解决方案。这通常可以处理非常少量的转换(通常通过存储过程发生)。它通常是一种嗅探日志的商业解决方案。由于大多数人不希望对日志格式具有代码依赖性,因此他们几乎总是使用打包的解决方案。

如果您不需要实时同步,拥有大量数据或具有重要的转换要求,那么您最终会得到一个ETL解决方案。有很多可供选择,但它们大多是商业性的。另一方面,如果您花时间了解最佳实践,他们自己也不难发展。奇怪的是,真的没有多少谈论。无论如何,Adam Luchjenbroers在确定ETL的大部分方法方面做得很好。如果您能够在快照之间放松交易,我建议使用文件增量方法 - 因为它是最准确的方法,因为所有其他方法都依赖于不捕获所有更改的时间戳,触发器或日志。

答案 3 :(得分:0)

看看synchrodb.com

SynchroDB比较两个数据库的内容,并根据源数据库的参数和内容更新目标数据库的内容。

SynchroDB使用功能键的概念来匹配源数据库和目标数据库中的行。

SynchroDB可高度自定义。默认行为是:

•在目标数据库中插入不包含的行。

•对于属于两个数据库的行,要逐个比较它们的字段,并在目标数据库中更新不同的字段。

•从目标数据库中删除源数据库中不存在的行。

SynchroDB是免费的。