【发布时间】:2017-05-30 17:06:06
【问题描述】:
我们需要在node js中实现一个cron服务,遵循这个流程:
- 从 postgres 大量数据查询(大约 500mb)
- 将json数据转换成另一个json
- 将 json 转换为 csv
- 压缩包
- 使用“上传”方法上传到 s3
显然,我们需要使用流来实现这个过程,而不会产生内存开销。
我们遇到了很多问题:
- 我们正在使用 sequelize,一种 SQL 形式。有了它,我们就无法流式传输查询。因此,我们将查询返回的 JSON 转换为可读的 Stream
- 我们找不到一种优雅而聪明的方法来实现转换查询返回的 json 的转换流。 (例如输入-> [{a:1,b:2}..] --> 输出->[{a1:1,b1:2}..]
- 在记录并尝试写入 fs 而不是 s3(使用 fs.createWriteStream)时,似乎该文件是在管道启动的同时创建的,但它的大小约为 10 字节,并且仅在流处理时才变得一致完成的。此外,使用了大量的 RAM,并且流式处理在内存使用方面似乎毫无用处。
你会如何在 node js 中编写这个流程? 我在实验过程中使用了以下库:
- json2csv 流
- JSON 流
- 双簧管
- zlib
- fs
- aws-sdk
【问题讨论】:
标签: json node.js csv amazon-s3 stream