我有一个巨大的文本文件,它不断地从一个公共(public)位置附加,我需要从我的 java 应用程序中逐行读取该文件并在 SQL RDBMS 中更新,这样如果 java 应用程序崩溃,它应该从它的位置开始离开了,而不是从一开始就离开了。
它是一个纯文本文件。每行将包含:
<Datatimestamp> <service name> <paymentType> <success/failure> <session ID>
此外,从数据库检索的数据也应该实时,网络应用程序中不会出现任何性能、可用性或可用性问题
这是我的方法: 在两个系统框中部署应用程序,每个系统框都包含心跳,用于 ping 另一个系统以获得服务可用性。 当您获得心跳成功响应时,您还会获得上次成功读取的时间戳。 当下一个心跳响应失败时,另一个系统中的应用程序可以接管,基于: 1. 响应失败 2.上次成功时间戳。
此外,由于数据检索的需求非常实时且数据量巨大,我可以抓取数据库并将其放入 Solr 或 Elasticsearch 中以加快检索速度,而不是进行数据库调用吗?
有多种方法可以做到这一点,什么是最好的方法。
最佳答案
我会在文本文件和数据库写入应用程序之间放置一个消息系统。 (例如 RabbitMQ )在这种情况下,消息传递系统充当队列。一个应用程序不断读取文件并将行作为消息插入到代理。另一方面,多个“数据库写入应用程序”可以从队列中读取数据并写入数据库。
消息系统的优点是它支持多个客户端从队列中读取。消息传递系统负责客户端之间的同步、处理错误、死信等。客户端不关心其他实例处理了什么有效负载。
关于维护“数据库编写应用程序”的多个实例:我会选择现成的集群解决方案。也许 docker 集群由 kubernates 管理?
另一个可行的替代方案是流媒体平台,例如 Apache Kafka .
关于java - 读取大文件并写入 RDBMS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59353303/