什么是从文件中的数据加载到点播集合最有效的方法是什么?
-
19-09-2019 - |
题
我工作的一个Java项目,将允许用户解析与潜在的成千上万行的多个文件。解析出的信息将被存储在不同的对象,其然后将被添加到集合。
由于GUI不会需要一次加载所有这些对象并将其保存在内存中,我正在寻找一种有效的方式来加载/卸载从文件中的数据,使数据只加载到集合时,用户请求。
我只是评估选项现在。我也想在那里,加载数据的一个子集到收集,并将其显示在GUI上后,最好的办法重新加载先前观察到的数据的情况。重新运行解析器/填充收集/填充GUI?或者可能找到一种方法来收集保存到内存中,或序列化/反序列化集合本身?
我知道如果进行某种数据过滤的数据的装载/卸载子集可能很麻烦。比方说,我过滤的ID,所以我的新子集将前两个分析子集包含的数据。这将是没有问题的是我保持整个数据的主副本在存储器中。
我读过,谷歌的集合处理大数量,简化了很多事情的数据,并提供方法时,所以这可能会提供一种替代,让我保持收集在内存中是好的,高效。这只是一般的谈话。上使用的收集问题是一个独立的和复杂的事情。
你知道什么是对这种类型的任务,一般建议?我想听听你有类似的情况做了什么。
如果需要,我可以提供更多的细节。
解决方案
可以嵌入一个数据库到应用程序,如 HSQLDB 。这样,你解析文件中的第一次,然后用SQL做简单的和复杂的querys。
HSQLDB(的HyperSQL数据库)是 领先的SQL关系数据库引擎 用Java编写的。它有一个JDBC驱动程序 并支持几乎全部ANSI-92 SQL (BNF树格式)加上许多SQL:2008 增强。 设有一个小型,快速 数据库引擎,提供内存 和基于磁盘的表和支撑 嵌入式和服务器模式即可。 此外,它还包括这样的工具 作为命令行SQL工具和GUI 查询工具。
其他提示
如果您有大量数据的,大量的文件,而你是短期记忆,你可以做文件的初始扫描索引它。如果文件被分成记录由换行,你知道如何读取记录,您可以通过字节位置索引记录。后来,如果你想读一组特定的indeces的,你会做一个快速查找找到的字节范围,你需要阅读,读那些从文件的InputStream。当你不需要这些项目了,他们会GCed。你再也不会担任更多的项目比你需要到堆中。
这是一个简单的解决方案。我敢肯定,你可以找到一个库,为您提供更多的功能。