2

我的应用程序需要使用最大为 5 GB 的文本文件中的数据。我无法将所有这些数据加载到 RAM 中,因为它太大了。

数据像一个表一样存储,有 500 万条记录(行)和 40 列,每列都包含将在内存中转换为字符串、整数或双精度数的文本。

我尝试在内存中仅缓存 10 - 100 MB 的数据,并在需要外部数据时从文件中重新加载,但这太慢了!当我运行计算时,因为我可以从表中的任何行随机跳转,所以它需要不断地打开文件、读取和关闭。

我需要一些快速的东西,我正在考虑使用某种数据库。我知道这样的大数据计算可能需要一段时间,这很好。如果我确实使用了数据库,则需要在启动桌面应用程序时进行设置,并且之前不需要安装某种服务器组件。

有小费吗?谢谢

4

2 回答 2

2

你可以使用嵌入式数据库,你可以在这里找到一个比较:Java Embedded Databases Comparison

或者,根据您的用例,您甚至可以尝试使用全文搜索引擎Lucene 。

于 2013-08-21T18:43:10.620 回答
2

我认为你需要澄清一些事情:

  • 这是桌面应用程序(我假设是),它的内存限制是多少?
  • 您是否以只读模式使用文件?
  • 你想进行什么样的计算?(随机行的访问频率,后续行的读取频率,是否需要修改数据)

目前我看到了两种进一步调查的方法:

  • 使用SQLite。这是一个小型单文件数据库,主要面向桌面应用程序和单用户使用。它不需要任何服务器,您只需要拥有适当的 jdbc 库即可。
  • 创建某种索引,例如使用二叉树。第一次读取文件时,索引文件中行的起始位置。结合永久打开的随机访问文件,这将帮助您快速查找和读取所需的行。对于二叉树,您的索引可能约为 120M。(二叉树的 RowsCount * 2 * IndexValueSize)
于 2013-08-21T18:51:33.223 回答