【发布时间】:2013-02-19 18:54:31
【问题描述】:
我有一张表,它在字段上记录其行插入/更新时间戳。
我想将此表中的数据与另一个数据库服务器上的另一个表同步。两个数据库服务器未连接,同步是一种方式(主/从)。不适合使用表触发器
我的工作流程:
- 我使用全局 last_sync_date 参数和查询表 Master 更改/插入的记录
- 将结果行输出到 xml
- 使用更新和插入解析 xml 和更新表 Slave
在处理Master表的删除记录时,问题的复杂性增加了。为了捕获已删除的记录,我想我必须为先前插入的记录维护一个日志表并使用 sql“NOT IN”。这在处理大型数据集时会成为性能问题。
处理这种情况的替代工作流程是什么?
【问题讨论】:
-
你使用的是什么数据库? (主从?)
-
目前使用 MsSql 作为 master 和 mysql 作为 slave,所以我不认为特定于数据库的解决方案会有所帮助
-
也可以看看这个稍微相关的链接en.wikipedia.org/wiki/CAP_theorem
-
问题的措辞不符合其内容,我怀疑。如果服务器未连接,那么您唯一的选择是将文件导出到可移动磁盘并以这种方式传输数据,否则它们会以某种方式连接。 Connected 包括网络,因此您可以使用触发器等选项。您不应该使用它们的唯一原因是 DBA 拒绝它,我从未遇到过 DBA 会拒绝使用触发器,如果它被证明是有益的。如果您合法地这样做,则可以克服防火墙限制等。
-
@JustAguy 我为你感到同情,因为我提供了消息队列的解决方案,因为他标记了问题spring-batch。恕我直言,他应该使用真正的复制或消息队列。他还担心一个甚至还不是问题的性能问题(即:NOT IN 问题)。
标签: java sql spring-batch