我的Node.js应用程序的一部分涉及从用户接收字符串作为输入并将其存储在JSON文件中。JSON本身显然对此没有限制,但是Node可以处理成JSON的文本量是否有上限?
请注意,我 并未 在实际插入中使用MongoDB或任何其他技术-这是本机字符串化,并使用将其保存到.json文件fs。
fs
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。
Buffer
综上所述,您绝对不能接近这个极限。处理大量数据时, 必须 将其作为流进行处理。您一次最多不能拥有超过几兆字节的内存。好消息是节点特别适合处理流数据。
您应该问自己一些问题:
关于您实际上要完成的工作,您发布的问题实际上是非常模糊的。有关更具体的建议,请使用更多信息更新您的问题。
如果您希望数据永远不会那么大,则只需在输入上抛出10 MB的合理限制,然后将其全部缓冲并使用即可JSON.stringify。
JSON.stringify
如果您希望处理更大的数据,则需要直接将输入流式传输到磁盘。如果需要在数据进入磁盘之前进行处理/修改,请查看以转换流。例如,有些模块处理流JSON。