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