首页 > 解决方案 > 读取大文件并在 RDBMS 中写入

问题描述

我有一个巨大的文本文件,它不断地从一个公共位置追加,我需要从我的 java 应用程序中逐行读取并在 SQL RDBMS 中更新,这样如果 java 应用程序崩溃,它应该从它离开的地方开始而不是从一开始就。

它是一个纯文本文件。每行将包含:
<Datatimestamp> <service name> <paymentType> <success/failure> <session ID>

此外,从数据库中检索的数据也应该是实时的,在 Web 应用程序中没有任何性能、可用​​性或可用性问题

这是我的方法:在两个系统框中部署应用程序,每个系统都包含心跳,它会 ping 另一个系统以获得服务可用性。当您获得对心跳的成功响应时,您还将获得最后一次成功读取的时间戳。当下一个心跳响应失败时,另一个系统中的应用程序可以接管,基于:1.失败的响应2.最后一次成功的时间戳。

此外,由于对数据检索的需求非常实时且数据量很大,我可以抓取数据库并将其放入 Solr 或 Elastic 搜索中以加快检索速度,而不是进行数据库调用吗?

有多种方法可以做到这一点,最好的方法是什么。

标签: javardbmsdistributed-transactions

解决方案


我会在文本文件和数据库编写应用程序之间放置一个消息传递系统。(例如RabbitMQ)在这种情况下,消息传递系统用作队列。一个应用程序不断读取文件并将行作为消息插入到代理。另一方面,多个“数据库写入应用程序”可以从队列中读取并写入数据库。

消息系统的优点是它支持从队列中读取的多个客户端。消息系统负责客户端之间的同步,处理错误、死信等。客户端不关心其他实例处理了什么有效负载。

关于维护“数据库编写应用程序”的多个实例:我会选择现成的集群解决方案。也许是由 kubernates 管理的 docker 集群?

另一个可行的替代方案是流媒体平台,例如Apache Kafka


推荐阅读