首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同步两个异构数据库

同步两个异构数据库
EN

Stack Overflow用户
提问于 2009-12-13 18:46:45
回答 4查看 1K关注 0票数 3

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

我想让它们保持同步。

数据将定期流动,信息流动将是双向的。

有没有人有什么策略/方法?

EN

回答 4

Stack Overflow用户

发布于 2009-12-13 19:32:53

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

完全提取和增量

对要同步的表中的每一行进行完整的、按键排序的转储,并将其与上次运行的同步中的转储逐行进行比较。对输出进行排序可以大大加快比较过程,因为您可以确定行是否被更改、删除或删除,而不需要

  • Pro:保证捕获所有的changes.
  • Pro:简单到Implement.
  • Con:慢。
  • Con:在运行时会给数据库带来很大的负载。

对于较小或中等大小的数据库,此选项应该是非常可行的。

事务日志

分析数据库中的事务日志,以找出发生了哪些更改,并将这些更改应用于其他数据库。

  • Pro:速度更快,因为它不需要从database
  • Pro:中读取所有内容对于implement
  • Con:来说仍然相对简单DBA有时必须清除日志来解决生产问题。这可能会导致错过未同步的更改。

如果您可以依赖可用的日志,这可能是一个好主意。

触发

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

  • Pro: Fast,因为它仅捕获changes.
  • Con:,因此会增加每个事务的开销

应用程序中的同步

只需确保应用程序同时写入两个数据库即可。

database.

  • Con:不可靠的
  • Pro:没有实际开销。只需要一个人忘记同时写入两个数据库。

如果应用程序只通过几个受控模块(即,没有太多地方可以忘记同时更新两个数据库)。在托管程度较低的设置中(即多个应用程序/不受控制的或分解不佳的数据库访问/即席脚本)这根本不是一个选项。

票数 2
EN

Stack Overflow用户

发布于 2009-12-13 19:02:05

阿南德,你可以在谷歌上找到这个。

sync mysql and mssql

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

票数 0
EN

Stack Overflow用户

发布于 2009-12-14 22:34:17

首先需要更多信息:

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

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

如果你不需要实时同步,拥有大量的数据量,或者有很大的转换需求,那么你最终会得到一个ETL解决方案。有相当多的选择,但它们大多是商业的。另一方面,如果您花时间了解最佳实践,那么您自己开发它们并不困难。奇怪的是,人们对此并没有太多的讨论。总之,Adam Luchjenbroers在识别ETL的大多数方法方面做得很好。如果你有能力在快照之间松散事务,我推荐文件增量方法-因为它是最准确的方法,因为所有其他方法都依赖于时间戳、触发器或日志,而这些时间戳、触发器或日志不能捕获所有更改。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1896138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档