如何处理Java中的大数据?

时间:2013-08-21 18:26:43

标签: java database memory-management bigdata memory-mapped-files

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

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

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

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

任何提示?感谢

2 个答案:

答案 0 :(得分:2)

您可以使用嵌入式数据库,您可以在此处找到对比:Java Embedded Databases Comparison

或者,根据您的使用情况,您甚至可以尝试使用Lucene这是一个全文搜索引擎。

答案 1 :(得分:2)

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

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

目前,我认为有两种方法可供进一步调查:

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