繁体   English   中英

将巨大的json包含到node.js脚本中的最佳方法是什么?

[英]What is the best way to include huge json into node.js script?

如何将巨大的json文件(550MB)包含到node.js脚本中?

我试过了:

var json = require('./huge-data-set.json')

使用增加的--max-old-space-size参数执行脚本

node --max-old-space-size=4096 diff.js

它失败了:

buffer.js:500
    throw new Error('"toString()" failed');
    ^

Error: "toString()" failed
    at Buffer.toString (buffer.js:500:11)
    at Object.fs.readFileSync (fs.js:552:33)
    at Object.Module._extensions..json (module.js:556:20)

Node的后面是实现JS实现的v8引擎。 V8是用C ++编写的,因此它使用类型将其字符保存在字符串中(讽刺用法在此谨慎使用)

根据ECMA的规定,JavaScript将每个字符存储在两个字节上(utf16编码)。

字符串类型是零个或多个16位无符号整数值(“元素”)的所有有序序列的集合,最大长度为2 ^ 53-1个元素

因此,您遇到的不是内存不足限制,而是失败的操作,因为字符串大于字符串类型的字节大小。

如果您尝试用JavaScript编写json对象而不是从fs中读取(通过要求),则将出现内存不足异常,因为已设置了限制以防止此类情况发生。

出现错误是因为您试图创建一个太大的(单个)字符串。

一些可能的解决方案:

  • 使用不同的后备存储(例如sqlite db)并根据需要查询数据,而不是一次将其全部加载到内存中
  • 如果您的数据是顶级数组,请考虑将每个数组元素放在单独的行上,这样,您可以仅缓冲一行和JSON.parse() ,然后继续进行下一行。 但是,如果解析的JavaScript值占用太多空间,您仍然可能会遇到内存/ GC问题。

暂无
暂无

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

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