如何防止从mysql数据库中提取重复数据

问题描述 投票:0回答:1

我在mysql数据库中有大量数据。我想从数据库中轮询数据并将它们推送到camel中的activemq中。数据库和队列之间的连接将每15分钟丢失一次。在连接中断期间,某些消息会丢失。我需要知道丢失了哪些消息才能从数据库再次轮询它们。消息不应该多发送一次。这应该在数据库模式没有任何变化的情况下完成。(我不能在我的数据库中添加任何布尔状态字段)。

任何建议都受到欢迎。

mysql jpa apache-camel activemq
1个回答
1
投票

实质上,您需要在从源数据库中提取的数据中包含一些唯一标识符。也许它已经被定义为主键。或者,表可能有一些时间戳字段。或者,某些字段组合可能是唯一的。

一旦确定了这一点,当您将数据放入目标时,请拒绝目标中已有的任何密钥。您可以使用Camel的“idempotency”功能,但如果您能够检查目标数据库中的密钥,则可能不需要任何其他功能。

如果您必须决定要发送什么,但无法从App#1访问您的远程数据库,则需要在防火墙的另一侧保留记录。

你需要这样做,即使连接没有每15分钟就断开一次......因为你可能因其他原因而失败。

如果你可以拥有App#1的Idempotency数据库,另一种方法可能是将数据从本地数据库传输到其他一些本地表,并从中读取。然后轮询其他表,并在发送成功时删除。例:

看起来你正在使用MySql。如果两个数据库都在MySql上,您可以使用Camel查看MySql data-replication,而不是使用您自己的应用程序。

© www.soinside.com 2019 - 2024. All rights reserved.