java - 读取大文件并在 RDBMS 中写入
问题描述
我有一个巨大的文本文件,它不断地从一个公共位置追加,我需要从我的 java 应用程序中逐行读取并在 SQL RDBMS 中更新,这样如果 java 应用程序崩溃,它应该从它离开的地方开始而不是从一开始就。
它是一个纯文本文件。每行将包含:
<Datatimestamp> <service name> <paymentType> <success/failure> <session ID>
此外,从数据库中检索的数据也应该是实时的,在 Web 应用程序中没有任何性能、可用性或可用性问题
这是我的方法:在两个系统框中部署应用程序,每个系统都包含心跳,它会 ping 另一个系统以获得服务可用性。当您获得对心跳的成功响应时,您还将获得最后一次成功读取的时间戳。当下一个心跳响应失败时,另一个系统中的应用程序可以接管,基于:1.失败的响应2.最后一次成功的时间戳。
此外,由于对数据检索的需求非常实时且数据量很大,我可以抓取数据库并将其放入 Solr 或 Elastic 搜索中以加快检索速度,而不是进行数据库调用吗?
有多种方法可以做到这一点,最好的方法是什么。
解决方案
我会在文本文件和数据库编写应用程序之间放置一个消息传递系统。(例如RabbitMQ)在这种情况下,消息传递系统用作队列。一个应用程序不断读取文件并将行作为消息插入到代理。另一方面,多个“数据库写入应用程序”可以从队列中读取并写入数据库。
消息系统的优点是它支持从队列中读取的多个客户端。消息系统负责客户端之间的同步,处理错误、死信等。客户端不关心其他实例处理了什么有效负载。
关于维护“数据库编写应用程序”的多个实例:我会选择现成的集群解决方案。也许是由 kubernates 管理的 docker 集群?
另一个可行的替代方案是流媒体平台,例如Apache Kafka。
推荐阅读
- php - Laravel-5.6 'LIKE' 在哪里和或哪里选择
- nginx - 微服务架构中的 CORS 问题
- angular - 如何为表组行交替应用颜色?
- security - 保护 Google 应用制作工具中记录的特定字段
- angular - 包含 mat-accordion 的 mat-tab(s)
- c# - Windows 服务文件观察器,将重复数据多次插入数据库
- asp.net-mvc - 我们在 Kentico CMS 中有文档管理系统吗?如果是,如何集成?
- angular - 发送带有图像的 JSON 对象
- python - 使用 python 子进程 Popen 进行非阻塞输出流
- javascript - encodeURIComponent 与 Handlebars.Utils.escapeExpression