java - 读取大文件并写入 RDBMS

标签 java rdbms distributed-transactions

我有一个巨大的文本文件,它不断地从一个公共(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/

相关文章:

database - 描述交易并解释主要原则

java - Spring分布式事务涉及RMI调用可能吗?

java - 如何对两个数据库使用 JTA 事务?

message-queue - Kafka - 如何使用高级消费者在每条消息后提交偏移量?

java - 从 URL 获取文件名

java - 尝试在 Android 应用程序(java)上设置静音按钮

mysql - SQL查询从一个表中选择一个值,从另一个表中选择另一个值并显示计数

sql - 如果特定字段值设置为空,为什么我无法执行此插入查询?

java - 从批处理文件运行后 Swing UI 终止

java - 通过 int 字段的降序对列表进行排序,如果 int 字段相等则按字典顺序排序