加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

我们如何使用Java迭代大小约为2 GB的JSON文件

发布时间:2020-12-15 08:26:48 所属栏目:Java 来源:网络整理
导读:我正在从数据库中读取3列值(大约50 000条记录),然后尝试在Json文件中搜索此值. Json文件包含200万个Json对象. 我尝试过以下方法. 方法1. JSONArray json = readJson(Constants.jsonFilePath);private JSONArray readJson(String jsonFilePath) { String cont
我正在从数据库中读取3列值(大约50 000条记录),然后尝试在Json文件中搜索此值. Json文件包含200万个Json对象.
我尝试过以下方法.

方法1.

JSONArray json = readJson(Constants.jsonFilePath);

private JSONArray readJson(String jsonFilePath) {
    String content = null;
    File file = new File(Constants.jsonFilePath);
    try {
        content = FileUtils.readFileToString(file,"utf-8");
    } catch (IOException e) {
        e.printStackTrace();
    }
    return new JSONArray(content);

}

然后线性搜索所需的字段值

我测试了上面的代码对150 MB大小的文件,它工作得很好.但当我测试它的大小为2 GB的文件时,我得到OutOfHeapMemory错误.

方法2:

然后我尝试从文件中一次读取100 000个Json对象,然后检查所需的字段值,但过程非常慢.

我正在使用org.json库.
有没有更好的方法来解决上述问题?

解决方法

当然它会很慢,这是一个庞大的数据量.
将其拆分为更易于管理的块是您唯一可以做的事情,并且您必须将性能损失视为开展业务的成本,因为它根本不适合内存.

当然你可以告诉JVM要求4GB的RAM并希望它足够了,但是处理这么多数据还需要相当多的时间.

这就留下了为什么你要尝试处理如此庞大的单个JSON对象的问题,存储批量数据的方法远远少于处理CPU和RAM密集程度的方法.
数据库浮现在脑海中,使用SQL或类似的查询语言可以很好地搜索.

此时,您运行的不仅仅是JVM的合理预期,而是您的操作系统本身.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读