我有一个用例,其中我的数据存在于 Mysql 。
中对于Mysql中的每个新行插入,我必须对新数据执行分析。
我目前如何解决此问题:
我的应用程序是一个 Spring-boot 应用程序,我在其中使用 Scheduler 检查在每2秒后在中输入的新行>强>
当前方法的问题是:
即使Mysql表中没有新数据,Scheduler也会触发MySQL查询以检查是否有新数据。
在触发器中的任何SQL数据库中解决此类问题的一种方法。
但到目前为止,我没有成功创建Mysql触发器,它可以调用基于 Java 的Spring 应用程序或简单的java应用程序。< / p>
我的问题是:
他们有更好的方法来解决我的上述用例吗?如果它们是为这种类型的用例构建的,我甚至可以更改为另一个存储(数据库)系统。
答案 0 :(得分:2)
这从根本上讲是一个架构问题。您实际上是在使用数据库作为API,正如您所看到的,它会导致各种问题。理想情况下,此数据库将包含在可以管理需要通知的系统通知的服务中。让我们看看未来的几个不同选择。
继续投票
您没有概述当前轮询方法的实际问题。在不需要的情况下运行工作会导致某种问题吗?除非你有兴趣做出更大的改变,否则我会成为离开它的支持者。
数据库触发
虽然我不知道通过db触发器启动java进程的方法,但您可以从一个进行HTTP POST。考虑到这一点,您可以在一个Web应用程序中暂停您的批处理作业,该应用程序使用POST在触发器触发时启动作业。
在服务中包装现有数据存储
这是恕我直言,最好的选择。这允许有一个记录系统,它提供一个可以进行版本化的API等。这将允许围绕谁通知的任何逻辑也被封装到这个服务中。
将数据存储替换为允许更好通知的内容
如果没有关于存储数据的真实信息,很难说这是多么实用。但是使用Apache Kafka或Apache Geode这两种方法都可以提供在持久保存新数据时能够得到通知的选项(Kafka通过监听主题,Geode通过连续查询)。
为了记录,我主张在服务中包装现有数据库。该服务将是进入数据库的唯一途径,并对所需的任何通知承担责任。