Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java在不同服务器上同步两个表的有效方法_Java_Sql_Database_Optimization_Jdbc - Fatal编程技术网

使用java在不同服务器上同步两个表的有效方法

使用java在不同服务器上同步两个表的有效方法,java,sql,database,optimization,jdbc,Java,Sql,Database,Optimization,Jdbc,我们有一个从各种外部系统更新的源表。我要求目标表(在不同的服务器中)与此源表同步。目标表不是源表的精确副本,在将数据插入/更新到目标表之前,必须进行一些数据处理 我想到了以下逻辑 我们每15分钟运行一次java消费代码,它获取创建时间戳的记录,而不是之前更新的记录,并存储在CachedRowSet中。并调用一个以CachedRowSet为参数的存储过程,其中完成数据处理并将数据插入/更新到目标表中 您认为上述方法有效吗?因为我们每次更新都要处理超过一百万条记录 此外,在中的源表中删除记录时,将不

我们有一个从各种外部系统更新的源表。我要求目标表(在不同的服务器中)与此源表同步。目标表不是源表的精确副本,在将数据插入/更新到目标表之前,必须进行一些数据处理

我想到了以下逻辑

我们每15分钟运行一次java消费代码,它获取创建时间戳的记录,而不是之前更新的记录,并存储在
CachedRowSet
中。并调用一个以
CachedRowSet
为参数的存储过程,其中完成数据处理并将数据插入/更新到目标表中

您认为上述方法有效吗?因为我们每次更新都要处理超过一百万条记录


此外,在中的源表中删除记录时,将不会使用上述方法复制!您能否建议在这种情况下应该做些什么

类似于数据库用于保存点和回滚的技术。
只要源表中有一些变化,例如CRUD。按照目标表所需的格式保留更改脚本。您可以定期将这些更改推送到目标服务器。由于源表由各种外部系统更新,您需要在源表上设置触发器以保存脚本日志。

您可能需要从Maatkit工具中签出mk table sync:


你需要小心你桌子周围的差异

以下是一些现有的解决方案:


根据时间戳进行同步时,应确保两台服务器也从同一(NTP)服务器同步时钟。。。不过,我宁愿设置一个主从模式,在远程位置复制数据,根据需要进行处理(存储成本低廉,您可以将所有同步问题留给数据库本身),然后将处理后的数据存储在单独的表中。mk-table-sync是一个Perl实现。用户正在寻找基于JAVA的解决方案,JAVA可以调用命令行脚本。让我选择使用开源工具,或者从头开始重写一个,我想我很想了解这个工具。这比看起来要复杂得多。