【问题标题】:Need Java advice for handling billions of records present in unindexed files需要 Java 建议来处理未索引文件中存在的数十亿条记录
【发布时间】:2015-09-17 07:47:44
【问题描述】:

我有 4 个大 .tab 文件,其中一个为 6GB,其他为 10GB。 6GB 文件包含有关某个地区的动物的信息,其他 3 个文件包含与 6GB 文件中存在的每只动物相关的其他重要信息。

我需要编写一个程序,根据一些用户输入从这些大文件中生成小数据集。

我从 6GB 文件中逐行读取动物的数据,如果它们通过某些标准,它们将存储在 ArrayList 中,否则省略。

现在对于 ArrayList 中的每个动物,我需要一遍又一遍地检查其他 3 个文件,以便进一步过滤它们并最终生成所使用的小数据集。但截至目前,获取一个包含 1500 条动物记录的小型数据集大约需要 7 个小时的运行时间。罪魁祸首是,对于我选择到 ArrayList 中的每种动物,我需要在数据提取过程的不同步骤中多次查找其他 3 个文件

我已经为此用 Java 编写了代码。但是这个程序非常慢。我使用缓冲阅读器来访问这些文件。但我正在寻找可以在 Java 中使用的其他工具和技术,并制作这个高效且可用的系统。

我曾考虑在 SQL 或 NoSQL 数据库中推送数据,但在我采取措施提高性能之前,我需要专家的建议来指导我正确的方向。

提前致谢

【问题讨论】:

  • 你真的应该去找一个数据库。

标签: java bufferedreader large-files data-extraction


【解决方案1】:

好吧,如果您需要可移植性或其他数据库引擎,我会选择 SQLite。这样您就可以将数据分解成相关的小部分。

您需要先“消化”数据,使其可搜索并正确链接。因此,您将创建一个带有动物名称和 ID 的表格,因此如果用户搜索“猎豹”,您可以使用猎豹的 ID 链接到其他信息表。

猎豹属于非洲大陆,国家 x、y、z,是猫的一种,是捕食者的一种,是肉食动物的一种,等等……所有这些东西都应该联系在一起,等等.. 我相信您只需对大量重复数据进行分组和分类,然后将其链接起来,就可以显着减小数据库的大小。

艰苦的工作是识别 6gb 数据中的重复数据并对其进行分组、分类。 但是,当您完成后,与现在相比,您将获得闪电般的快速搜索。但是,一定要向那些设计了他们公平份额的数据库的人寻求帮助。您可以尝试询问有关https://dba.stackexchange.com/ 的有用提示,以了解可供选择的数据库类型以及如何设置它。

【讨论】:

  • @Micheal,数据不包含任何重复项,所有 4 个文件都是相关的,每条记录都包含唯一的 ID。但截至目前,获取一个包含 1500 条动物记录的小型数据集大约需要 7 个小时的运行时间。罪魁祸首是,对于我首先选择的每种动物,我需要在数据提取过程的不同步骤中多次查找其他 3 个文件。
  • 尽管如此……但即使是粗略的,您也应该在 sql 数据库中建立您现在拥有的链接方法。它会比你现在更快地获取它。
猜你喜欢
  • 2011-06-23
  • 2020-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-04
  • 1970-01-01
  • 1970-01-01
  • 2013-11-12
相关资源
最近更新 更多