如何防止从 mysql 数据库中提取重复数据
how to perevent polling duplicated data from mysql database
我在 mysql 数据库中有大量数据。我想从数据库中轮询数据并将它们推送到骆驼的 activemq 中。数据库和队列之间的连接将每 15 分钟丢失一次。一些消息在连接中断期间丢失。我需要知道丢失了哪些消息才能从数据库中再次轮询它们。消息不应发送超过一次。这应该在不更改数据库模式的情况下完成。(我不能向我的数据库添加任何布尔状态字段)。
欢迎任何建议。
本质上,您需要在从源数据库中提取的数据中有一些唯一标识符。也许它是已经定义为主键的任何东西。或者,也许 table 有一些时间戳字段。或者,也许某些字段组合是唯一的。
一旦确定,当您将数据放入目标时,拒绝目标中已有的任何键。您可以使用 Camel 的 "idempotency" 功能,但如果您能够检查目标数据库中的密钥,您可能不需要其他任何东西。
如果您必须决定要发送什么,但无法从 App #1 访问您的远程数据库,您需要在防火墙的另一边。
您需要这样做,即使连接没有每 15 分钟中断一次...因为您可能会因其他原因而失败。
如果您可以为 App#1 提供幂等性数据库,另一种方法可能是将数据从本地数据库传输到其他本地数据库 table,然后从中读取。然后你轮询另一个 table,并在发送成功时删除。
示例:
您似乎在使用 MySql。如果两个数据库都在 MySql 上,您可以查看 MySql data-replication,而不是使用您自己的 Camel 应用程序。
我在 mysql 数据库中有大量数据。我想从数据库中轮询数据并将它们推送到骆驼的 activemq 中。数据库和队列之间的连接将每 15 分钟丢失一次。一些消息在连接中断期间丢失。我需要知道丢失了哪些消息才能从数据库中再次轮询它们。消息不应发送超过一次。这应该在不更改数据库模式的情况下完成。(我不能向我的数据库添加任何布尔状态字段)。
欢迎任何建议。
本质上,您需要在从源数据库中提取的数据中有一些唯一标识符。也许它是已经定义为主键的任何东西。或者,也许 table 有一些时间戳字段。或者,也许某些字段组合是唯一的。
一旦确定,当您将数据放入目标时,拒绝目标中已有的任何键。您可以使用 Camel 的 "idempotency" 功能,但如果您能够检查目标数据库中的密钥,您可能不需要其他任何东西。
如果您必须决定要发送什么,但无法从 App #1 访问您的远程数据库,您需要在防火墙的另一边。
您需要这样做,即使连接没有每 15 分钟中断一次...因为您可能会因其他原因而失败。
如果您可以为 App#1 提供幂等性数据库,另一种方法可能是将数据从本地数据库传输到其他本地数据库 table,然后从中读取。然后你轮询另一个 table,并在发送成功时删除。 示例:
您似乎在使用 MySql。如果两个数据库都在 MySql 上,您可以查看 MySql data-replication,而不是使用您自己的 Camel 应用程序。