mysql - 如何从mysql数据库中轮询重复数据
问题描述
我在 mysql 数据库中有大量数据。我想从数据库中轮询数据并将它们推送到骆驼的 activemq 中。数据库和队列之间的连接将每 15 分钟丢失一次。一些消息在连接中断期间丢失。我需要知道哪些消息丢失了才能从数据库中再次轮询它们。消息不应发送超过一次。这应该在不更改数据库架构的情况下完成。(我无法将任何布尔状态字段添加到我的数据库中)。
欢迎任何建议。
解决方案
本质上,您需要在从源数据库中提取的数据中具有一些唯一标识符。也许它是已经被定义为主键的任何东西。或者,也许该表有一些时间戳字段。或者,也许某些字段组合将是唯一的。
一旦确定了这一点,当您将数据放入目标时,请拒绝目标中已经存在的任何键。您可以使用 Camel 的“幂等性”功能,但如果您能够检查目标数据库中的密钥,您可能不需要其他任何东西。
如果您必须决定要发送什么,但无法从 App #1 访问您的远程数据库,则您需要在防火墙的另一端保留记录。
即使连接不是每 15 分钟中断一次,您也需要这样做……因为您可能会因其他原因而出现故障。
如果您可以为 App#1 提供幂等数据库,另一种方法可能是将数据从本地数据库传输到其他本地表,然后从中读取。然后轮询另一个表,并在发送成功时删除。例子:
看起来你正在使用 MySql。如果两个数据库都在 MySql 上,您可以使用 Camel 查看MySql 数据复制,而不是使用您自己的应用程序。
推荐阅读
- gulp - 由 gulp-sourcemaps 生成的内联源映射在 VS 代码调试器中不起作用
- excel - 如何 - 如果单元格的值等于工作簿任何选项卡中另一个单元格的值,则对其进行条件格式设置
- monitoring - Icinga2:每个服务基础的重新通知间隔
- visual-studio - 出现无法启动调试...启动项目无法启动。为什么?
- java - 我的 do 语句中的缩进出错
- node.js - Nodejs 无法识别我的 server.js 路径
- javascript - iOS 项目中缺少的 .a 文件
- cloud - 我可以在云环境中使用 AgensGraph 吗?
- git - Git 用户名不会改变
- amazon-web-services - 如何将 AWS Lightsail 子域重定向到外部 URL?