- 我的后端程序使用
SrpingBoot 2.x
,为实现一个业务逻辑,我现在是定时每7秒去查询MySQL
一个表的数据,有符合条件的则取出来加工 - 感觉这样太耗费资源,很多时候都是没有有效数据的,但还是要去查询一遍,有没有什么办法能达到这样的效果:
MySQL
某个表有新输入插入后能通知到Java
程序,那么Java
程序就去查询获得这笔数据进行加工发送给别的需求方 - 希望提供思路,QQ = 409223171
SrpingBoot 2.x
,为实现一个业务逻辑,我现在是定时每7秒去查询 MySQL
一个表的数据,有符合条件的则取出来加工MySQL
某个表有新输入插入后能通知到 Java
程序,那么 Java
程序就去查询获得这笔数据进行加工发送给别的需求方1、mysql不能主动调用第三方接口,主要还是要通过后端程序去定时轮询;
2、优化的方向是轮询的语句。如果大部分是没有有效数据,是否能通过先select count(*)计算出是否有新插入,再去取出具体记录。
附:
某个表有新输入插入后能通知到 Java 程序
看到这句话,让我想到mysql触发器,虽然不能通知java程序,但能先帮你过滤一遍到新的表
10 回答11.1k 阅读
15 回答8.4k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
8 回答6.2k 阅读
2 回答2.6k 阅读✓ 已解决
这个有一个稍微专业点的词语,叫CDC(Change Data Capture),就是变化数据捕捉,有些数据库是提供了
Java
的异步非阻塞的API
来做数据变化的通知事件,你就可以不用主动去轮询了,比如我之前用过的MongoDB
,有个异步client的API包加上它的数据库提供数据变化事件的API
Change Stream(3.6版本以上的MongoDB才有),你就可以实现一个简单的异步监听+业务处理+异常处理所以你可以找一哈
Mysql
到底又没有提供类似的API,或者你可以用CDC
普遍的方法-就是解析数据库的事务日志,下面是维基百科的关于CDC
的方法论里的一种,说得就是这种其实去起一个应用来解析数据库里的事务日志,然后把结果发到
Kafka
(一般都是Kafka
,毕竟吞吐量在那)上,你再去消费Kafka
上的消息,这种模式,也有很多人写出来了,我之前了解过有Debezium,我记得是可以处理Mysql
的,你也可以随便搜Mysql+CDC
,都会搜到很多,比如这个mysql-cdc-projects,有人在github
上整的可以处理关于Mysql
的CDC
方案合集以上,就是我的小建议了。。。希望对你有点帮助o( ̄▽ ̄)d