首页 > 解决方案 > 如何将 javascript 数组元素流式传输/发送到 S3 存储桶?

问题描述

我正在努力减少数据收集器的内存需求,其中一小部分请求可能导致 ram 使用量超过 5gb。最终输出是一个字符串化的 JSON 对象,具有一个非常长的数组,最多 500,000 个对象。

数据收集器一次获取 500 条记录,格式为 json 对象数组。目前,该数组被连接到一个累加器变量上。当有海量记录请求时,200,000+,变量开始占用大量内存,要求我们的 EC2 实例有 10gb 的内存。

我正在寻找一种方法来获取每组记录并将它们附加到 S3 文件以优化 ram 利用率。模拟流式传输每个记录集的效果将一个示例中的 ram 使用量从 2gb 更改为 30mb。

文件存储在 S3 中后,由另一个程序下载并根据用户设置转换为不同的格式。

我研究了 Firehose 以及多部分上传,但我没有看到基于当前结构的确切解决方案。我可以更改保存文件的格式,但仅限于位于 S3 中。当前格式为:

{
  count: 5555,
  results: [
    {record1},
    {record2},
    ...
    {record200000}
  ]
}

我想保持现有文件格式尽可能接近其当前形式,但可以进行完全更改,只需要在阅读程序方面进行额外的工作。

标签: javascriptarraysnode.jsjsonamazon-s3

解决方案


推荐阅读