Java mysql的实时数据消耗

Java mysql的实时数据消耗,java,mysql,spring,spring-batch,real-time,Java,Mysql,Spring,Spring Batch,Real Time,我有一个用例,其中我的数据存在于Mysql中 对于Mysql中的每一个新行插入,我都必须对新数据进行分析 我目前如何解决这个问题是: 我的应用程序是一个Spring boot应用程序,在其中我使用了调度程序,它每2秒检查数据库中输入的新行 当前方法的问题是: 即使Mysql表中并没有可用的新数据,调度器也会启动Mysql查询以检查新数据是否可用 解决中任何SQL数据库中此类问题的一种方法是触发 但是到目前为止,我还没有成功地创建Mysql触发器,它可以调用基于Java的Spring应用程序或简单

我有一个用例,其中我的数据存在于Mysql

对于Mysql中的每一个新行插入,我都必须对新数据进行分析

我目前如何解决这个问题是

我的应用程序是一个Spring boot应用程序,在其中我使用了调度程序,它每2秒检查数据库中输入的新行

当前方法的问题是:

即使Mysql表中并没有可用的新数据,调度器也会启动Mysql查询以检查新数据是否可用

解决中任何SQL数据库中此类问题的一种方法是触发

但是到目前为止,我还没有成功地创建Mysql触发器,它可以调用基于Java的Spring应用程序或简单的Java应用程序

我的问题是:


他们有没有更好的方法来解决我的上述用例?即使是我也愿意改变到另一个存储(数据库)系统,如果它们是为这种类型的用例构建的

从根本上讲,这听起来像是一个架构问题。实际上,您使用数据库作为API,正如您所看到的,它会导致各种问题。理想情况下,该数据库将封装在一个服务中,该服务可以管理需要通知的系统的通知。让我们看看未来的几个不同选择

继续投票
您没有概述当前轮询方法的实际问题。在不需要时运行作业是否会导致某种问题?除非你有兴趣做出更大的改变,否则我会支持你离开它

数据库触发器
虽然我不知道通过db触发器启动java进程的方法,但您可以从一个触发器执行HTTP POST。记住这一点,您可以将批处理作业暂存到web应用程序中,该应用程序在触发时使用POST启动作业

在服务中包装现有数据存储
这是最好的选择。这允许存在一个记录系统,该系统提供一个可以版本化的API,等等。这将允许任何关于通知对象的逻辑也封装到该服务中

用能够提供更好通知的内容替换数据存储
如果没有任何关于所存储数据的真实信息,很难说这有多实际。但是使用ApacheKafka或ApacheGeode这两个选项都可以提供在新数据被持久化时收到通知的能力(Kafka通过收听主题“通过连续查询进行Geode”)


作为记录,我主张将现有数据库包装到服务中。该服务将是进入数据库的唯一途径,并承担任何所需通知的责任。

您在插入数据的应用程序中有控制权吗?我想,数据库的工作不是担心x数量的消费者如何使用其数据。您当前的实现很好,但是如果您正在寻找一个“触发器”,为什么不在插入新数据开始时在应用程序中寻找它呢?如果您需要实时且响应迅速的信息,您可以查看消息传递?您的spring存储库是数据更改的唯一来源吗?或者您实际上有其他应用程序会干扰您的数据?插入是由远程服务器完成的,在这种情况下,除了阅读mysqlbinlog之外,你没有任何选择,这与你在特定时间间隔后阅读的过程是一样的,但这次你唯一的优势是你不会因为执行大量不必要的查询而伤害mysql。