需要Java建议来处理未编制索引的文件中存在的数十亿条记录

时间:2015-09-17 07:47:44

标签: java bufferedreader large-files data-extraction

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

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

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

现在对于ArrayList中的每个动物,我需要反复浏览其他3个文件,以便进一步过滤它们,最后生成所需的小数据集。但截至目前,需要大约7个小时的运行时间才能获取1500个动物记录的小数据集。主要的罪魁祸首是我为每个动物选择了ArrayList,我需要在不同的数据提取过程中多次查找其他3个文件

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

我考虑过在SQL或NoSQL数据库中推送数据,但在我做一些改进性能之前,我需要专家建议指导我正确的方向。

提前致谢

1 个答案:

答案 0 :(得分:2)

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

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

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

努力工作是识别6gb数据中的重复数据并进行分组,对其进行分类。 但是当你完成后,与现在相比,你可以快速搜索。但是,确实从设计了公平数据库的人那里寻求帮助。您可以尝试在https://dba.stackexchange.com/上询问有关可供选择的数据库类型以及如何设置的有用提示。