我有2个异构数据库。 一个在mysql中,另一个在ms sql中。
我希望让它们保持同步。
定期会有数据流,信息流将是两种方式
任何人都有任何策略/方法吗?
答案 0 :(得分:3)
假设您不打算使用某种形式的现成解决方案,那么您可以选择一些选项。基本上你要做的是找到一种方法来捕获在一个数据库中所做的更改并在另一个数据库中复制它们。
完全提取和增量
对要同步的表中的每一行进行完整的按键排序转储,并将其逐行与上次运行的同步转储进行比较。将输出排序使比较过程更快,因为您可以确定是否已更改,删除或删除行而不使用
对于中小型数据库,此选项应该非常可行。
交易记录
分析数据库中的事务日志,以找出更改的内容,并将这些更改应用于其他数据库。
如果你可以指望可用的日志,那么可能是一个好主意。
<强> 触发 强>
使用触发器记录更改,并将其复制到其他数据库。
应用程序中的同步
只需确保应用程序写入两个数据库。
如果应用程序仅通过几个受控模块写入数据库(即忘记更新两个数据库的地方不多),则可以使用。在较少管理的设置中(即多个应用程序/不受控制或不良分解的数据库访问/临时脚本),这根本不是一种选择。
答案 1 :(得分:0)
答案 2 :(得分:0)
首先需要更多信息:
通常,如果您需要实时同步,那么最终会得到一个复制解决方案。这通常可以处理非常少量的转换(通常通过存储过程发生)。它通常是一种嗅探日志的商业解决方案。由于大多数人不希望对日志格式具有代码依赖性,因此他们几乎总是使用打包的解决方案。
如果您不需要实时同步,拥有大量数据或具有重要的转换要求,那么您最终会得到一个ETL解决方案。有很多可供选择,但它们大多是商业性的。另一方面,如果您花时间了解最佳实践,他们自己也不难发展。奇怪的是,真的没有多少谈论。无论如何,Adam Luchjenbroers在确定ETL的大部分方法方面做得很好。如果您能够在快照之间放松交易,我建议使用文件增量方法 - 因为它是最准确的方法,因为所有其他方法都依赖于不捕获所有更改的时间戳,触发器或日志。
答案 3 :(得分:0)
看看synchrodb.com
SynchroDB比较两个数据库的内容,并根据源数据库的参数和内容更新目标数据库的内容。
SynchroDB使用功能键的概念来匹配源数据库和目标数据库中的行。
SynchroDB可高度自定义。默认行为是:
•在目标数据库中插入不包含的行。
•对于属于两个数据库的行,要逐个比较它们的字段,并在目标数据库中更新不同的字段。
•从目标数据库中删除源数据库中不存在的行。
SynchroDB是免费的。