如何尽可能小的占用内存,从大JSON文件中取数据?
当我需要从一个json文件中区数据时,最先想到的方法就是:
fs.readFile('./data.json', function (err, data) {
if (err) throw err;
var data = JSON.parse(data);
cb(data.aaa);
});
简单说就是把整个文件读取到内存中,再把json转换为js对象,再去取相应数据。
可是,当json文件很大时,上面一段逻辑占用内存实在太大了。有没有比较好的省内存的方法可以完成以上操作呢?
9 回复
的确没想到啥好办法,不过既然楼主这么关注内存和就操作结果而论的话,为何不试试将数据存入数据库中,衡量一下是否愿意用网络IO开销来换文件IO开销和宝贵的内存开销?毕竟这样的话,就结果而论,关注的在内存中的量,只是微乎其微的楼主想要的那条数据了。(话说有robomogo这等工具将json格式数据存入mongodb就是复制黏贴的事儿。。。)
感谢各位的回答,问题出现在我的DigitalOcean服务器仅剩200M内存时,去跑grab12306 跑到一半因为内存占用过大系统就把进程Kill掉了。项目开发时没有过分考虑内存占用的问题,现在正好当做一个学习的机会来解决一下这个问题。 也请各位大神有空帮忙看看代码有没有可以优化的地方。