【发布时间】:2020-04-03 00:43:26
【问题描述】:
我有一个连接到 AWS lambda 的 API,它执行以下操作:
- 从 s3 获取 JSON 数据。约 60,000 条记录数
- 使用 Json2csv 库将 JSON 数据解析为 csv 字符串
- 将 csv 字符串结果放入 s3 存储桶
上述第 2 点将 JSON 数据解析为 csv 字符串所需的时间太长。我使用的库是 json2csv:https://www.npmjs.com/package/json2csv
以下是我的代码:
/// Get data in JSON format in object: records (array of JSON)
let headers = [
{
label: "Id",
value: "id"
},
{
label: "Person Type",
value: "type"
},
{
label: "Person Name",
value: "name"
}
];
let json2csvParser = new Parser({ fields: headers });
console.log("Parsing started");
let dataInCsv = json2csvParser.parse(records);
console.log("Parsing completed");
// PutObject of dataInCsv in s3
解析 60K 记录大约需要 20 秒。我能做些什么来提高这里的性能吗?还有别的图书馆吗?我曾经认为在内存中操作非常快。为什么这个解析很慢。请帮忙。
【问题讨论】:
-
可能是内存分配,因为同步 .parse 会将所有内容加载到 RAM 中。尝试来自 json2csv npmjs.com/package/json2csv 的异步。它可能会更快
-
但是如果一切都在 RAM 中发生,难道不应该更快吗?它只有几 MB 的数据,而 RAM 却超过了 GB。
-
我不清楚。 .parse 在开始解析之前将所有行加载到 RAM 中。 async / stream 方法可能会为您提供稍微更好的性能,因为为 60k 记录增长一个数组可能需要一些时间。
-
我建议你在 Node.js 本地运行你的工作流并比较性能,你也可以使用分析器 --prof 运行 Node.js 来找出它为什么慢。
标签: node.js amazon-s3 aws-lambda json2csv