【发布时间】:2019-12-16 09:00:09
【问题描述】:
我有一个巨大的文本文件,它不断地从一个公共位置附加,我需要从我的 java 应用程序中逐行读取并在 SQL RDBMS 中更新,这样如果 java 应用程序崩溃,它应该从它的位置开始离开而不是从头开始。
它是一个纯文本文件。每行将包含:<Datatimestamp> <service name> <paymentType> <success/failure> <session ID>
此外,从数据库中检索的数据也应该是实时的,在 Web 应用程序中没有任何性能、可用性或可用性问题
这是我的方法: 在两个系统框中部署应用程序,每个系统都包含心跳,用于 ping 另一个系统以获得服务可用性。 当您获得对心跳的成功响应时,您还将获得最后一次成功读取的时间戳。 当下一个心跳响应失败时,另一个系统中的应用程序可以接管,基于: 1. 响应失败 2. 上次成功的时间戳。
另外,由于数据检索的需求非常实时且数据量很大,我可以抓取数据库并将其放入 Solr 或 Elastic 搜索中以加快检索速度,而不是进行数据库调用吗?
有多种方法可以做到,最好的方法是什么。
【问题讨论】:
-
您是将文件内容放在数据库中的单个记录中,还是在表中单独的行中?即使没有平衡系统,您也可以实现一种方法,在启动时检查文件是否与数据库位于同一点,如果不是,则开始读取记录(因为我认为您的应用程序不会停机太久?)
-
这将是表格中的单独行。
-
该问题没有详细说明所需的“实时”输出。是报告吗? Web应用程序? OLAP?什么?
-
如果您满足于使用 NoSQL 数据库,为什么要通过 RDBMS 作为中间人?您可以从文件直接插入 NoSQL 数据库
-
什么是巨大的? RDBMS 可以轻松处理多达 1B 行的表。检索要求是什么? (搜索条件)是否仅按字段相等的值进行搜索?有文字搜索吗?常规表达式?在决定 DBMS 和客户端应用程序时,您是否需要扫描行并聚合(总和、平均)所有这些需要考虑的因素
标签: java rdbms distributed-transactions