繁体   English   中英

如何用Java处理大数据?

[英]How to Handle Large Data in Java?

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

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

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

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

有小费吗? 谢谢

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

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

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

  • 这是桌面应用程序(我想是的),它的内存限制是多少?
  • 您是否以只读模式使用文件?
  • 您要进行哪种计算? (多长时间访问一次随机行,多久读取一次后续行,是否需要修改数据)

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM