java - mysql实时数据消耗

标签 java mysql spring spring-batch real-time

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

对于 Mysql 中的每个新行插入,我必须对新数据执行分析。

我目前解决这个问题的方法是:

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

当前方法的问题是:

即使 Mysql 表中没有新数据可用,调度程序也会触发 MySQL 查询来检查新数据是否可用。

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

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

我的问题是:

他们有更好的方法来解决我的上述用例吗?即使我愿意更改为另一个存储(数据库)系统,如果它们是针对此类用例构建的。

最佳答案

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

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

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

将现有数据存储区包装在服务中
恕我直言,这是最好的选择。这允许存在一个记录系统,该系统提供可以进行版本控制的 API 等。这将允许围绕通知谁的任何逻辑也可以封装到此服务中。

将数据存储替换为可提供更好通知的内容
如果没有任何关于所存储的数据是什么的真实信息,很难说这有多实用。但是使用 Apache Kafka 或 Apache Geode 都可以在新数据持久化时提供通知能力(Kafka 通过监听主题,Geode 通过连续查询)。

郑重声明,我主张将现有数据库包装在服务中。该服务将是进入数据库的唯一途径,并负责任何所需的通知。

关于java - mysql实时数据消耗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46588596/

相关文章:

java - 使用两个迭代器进行迭代

mysql - 称量大容量数据库服务器

java - 如何处理spring Controller 参数类型异常

spring - 在 Grails 中,指定实现相同接口(interface)的两个类中的哪一个应该用于注入(inject)

java - 无法在 "/usr"找到 $JAVA_HOME,继续使用系统提供的 Java

java - Java中静态和非静态方法的调用

php - 来自 textarea 的数组没有为 MySQL 查询(UTF8?)正确地换行?

mysql - 我无法进入 "localhost:8080/phpmyadmin"

java - Spring Initializr(Spring boot)不在其原型(prototype)中创建 WEB-INF

java - 使用java删除文件