[英]How to store 100GB in memory in Node.js
假设你有一台拥有200GB + RAM的机器,是否可以在应用程序中存储那么多数据?
我正在运行一个测试,创建一个嵌套对象,如下所示:
{
id1: {
val1: 123,
val2: 456,
v...
},
id2: {
val1: 234,
val2: 567,
...
}
...
}
我将使用--max-old-space-size=200000
运行它并运行正常,直到对象大小约为50GB,然后崩溃并出现错误: FATAL ERROR: NewSpace::Rebalance Allocation failed - process out of memory
每次FATAL ERROR: NewSpace::Rebalance Allocation failed - process out of memory
时间。
我已经尝试手动强制垃圾收集,将它分成更小的对象等,没有运气。
你没有。 使用流。 以下我觉得对流是什么以及如何使用它们的写得非常好。 我不时地提到它: https : //medium.freecodecamp.org/node-js-streams-everything-you-need-to-know-c9141306be93
对于某些给定的对象,这将使您的内存占用率从“200GB”降低到可能少于几MB的内存使用量。
Node对于非常大的调用并不是很好,我很惊讶你已经一直到50GB,我通常会在尝试加载太多时看到4-8GB左右的崩溃。
如果您正在处理管道[1],如果您正在输入/导出到文件,请使用行分隔的JSON :( \\n
表示行结束标记)
{"id":"id01',"value":{...}}\n
{"id":"id01',"value":{...}}\n
您可以使用已经可用的行/行过滤器读取来读取/写入流。
或者,如果您需要以交互方式获取此数据,最好使用Redis等本地数据库。
[1] https://medium.freecodecamp.org/node-js-streams-everything-you-need-to-know-c9141306be93
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.