一尘不染

使用Node.js的JSON中的字符串大小是否有限制?

node.js

我的Node.js应用程序的一部分涉及从用户接收字符串作为输入并将其存储在JSON文件中。JSON本身显然对此没有限制,但是Node可以处理成JSON的文本量是否有上限?

请注意,我 并未 在实际插入中使用MongoDB或任何其他技术-这是本机字符串化,并使用将其保存到.json文件fs


阅读 450

收藏
2020-07-07

共1个答案

一尘不染

V8(JavaScript引擎节点在建),直到 非常 最近有一个关于1.9
GB的堆大小硬限制

由于破坏了本机插件周围的V8
API更改,因此节点v0.10停留在较早版本的V8(3.14)上。节点0.12将更新到最新的V8(3.26),它将破坏许多本机模块,但为提高1.9
GB的堆限制打开了大门。

因此,单节点进程最多可以保留1.9 GB的JavaScript代码,对象,字符串等的 总和 。这意味着字符串的最大长度在1.9 GB以下。

可以 使用Buffers 来解决此问题,s将数据存储在V8堆之外(但仍在进程的堆中)。只要您在JavaScript变量中没有超过1.9
GB的数据,节点的64位构建几乎就可以填满您的所有RAM。


综上所述,您绝对不能接近这个极限。处理大量数据时, 必须 将其作为流进行处理。您一次最多不能拥有超过几兆字节的内存。好消息是节点特别适合处理流数据。

您应该问自己一些问题:

  • 您实际上从用户那里收到什么样的数据?
  • 为什么要以JSON格式存储它?
  • 将千兆字节填充到JSON中真的是一个好主意吗?(答案是不。)
  • 数据存储后,以后将如何处理?您的代码会读吗?还有吗

关于您实际上要完成的工作,您发布的问题实际上是非常模糊的。有关更具体的建议,请使用更多信息更新您的问题。

如果您希望数据永远不会那么大,则只需在输入上抛出10 MB的合理限制,然后将其全部缓冲并使用即可JSON.stringify

如果您希望处理更大的数据,则需要直接将输入流式传输到磁盘。如果需要在数据进入磁盘之前进行处理/修改,请查看以转换流。例如,有些模块处理流JSON

2020-07-07