当前位置: 首页 > 面试题库 >

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

谷梁永年
2023-03-14
问题内容

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

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

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

您应该问自己一些问题:

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

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

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

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



 类似资料:
  • 问题内容: 我有一个字符串定义为 字串xx 我可以分配的字符数有限制吗? 2)我正在将用户输入分配给此字符串xx。70%的人只说一个字。有时他们会说一个大句子,所以想知道可以吗?还是有更好的Java做法? 问题答案: 您可能已经搜索过一个常见问题,但无论如何我都会再次回答。 我可以分配的字符数有限制吗? 它的Integer.MAX_VALUE或2 ^ 31-1或大约20亿。在达到此大小之前,您更有

  • 问题内容: 我正在使用Java查询Solr服务器以获取结果,这些结果的ID在我感兴趣的一组已知ID中。 我想获得这些我感兴趣的结果的最佳方法是创建一个长查询字符串,看起来像这样: 我在发出请求之前生成了String,并且我最终想要发出的请求中包含1500个以上的ID。我正在使用HTTP POST这样进行查询: 如果将查询限制为仅前1000个id,它将成功执行,并且可以按预期返回结果。但是,如果我增

  • 我有一个随机地址字符串,如 我想将其拆分为具有两个条件的字符串数组: 该字符串数组的每个元素的长度小于或等于20 字符串数组的元素没有尴尬的结尾 例如,每20个字符拆分将产生: 但正确的输出是: 注意字符串数组中的每个元素是如何小于或等于20的。 以上是我对这段代码的输出:

  • 问题内容: 我来自php背景,在php中,有一个函数可以告诉您数组中使用了多少个元素。 数组有类似的方法吗?谢谢。 问题答案: 是的(类属性,而不是方法):

  • 问题内容: 我正在尝试使用jQuery Ajax将页面中的数据数组发送到MVC Action。这是我的jQuery代码: 让我解释一下。我有一个动态生成的HTML表,我需要将此数据存储到数据库中。在jQuery中,我遍历表有一个循环,我将数组中每一行的数据存储起来。然后,我使用Ajax将这些数据传递到MVC Action中。 这是我的问题开始的地方…我已经意识到有时会按预期进行,但是有时我会从Aj

  • 所以我们有一个例子,我们会有一个对象,其中key是id(int),值是字符串。但我们注意到,大多数时候,我们根据字符串查找id,所以我们决定将其反转并使字符串成为key,值是id。因为这样就不用遍历每个项目并比较值,我们可以只执行。下面是我们所做的示例。 下面是旧实现的示例: 以下是新实现的示例: 我知道现在字符串是键,可以为相同的字符串获取相同的id。但是现在这个字符串可能非常大(可能性很小,但