我正在努力减少数据收集器的内存需求,在此情况下,一小部分请求会导致ram使用量> 5gb。最终输出是带有很长数组的字符串化JSON对象,最多可容纳500,000个对象。
数据收集器以json对象数组的形式一次获取500条记录。当前,该数组被连接到一个累加器变量上。当有大量记录请求时,超过200,000个,该变量将开始占用大量内存,这要求我们的EC2实例具有10gb的内存。
我正在寻找一种方法来获取每组记录并将它们附加到S3文件中以优化ram利用率。模拟流式传输每个记录集的效果将一个示例中的ram使用量从2gb降低到30mb。
文件存储在S3中后,由另一个程序下载并根据用户设置转换为不同的格式。
我已经研究了Firehose以及分段上传,但是基于当前的结构,我没有看到确切的解决方案。我可以更改保存文件的格式,但仅限于位于S3中。当前格式为:
{
count: 5555,
results: [
{record1},
{record2},
...
{record200000}
]
}
我想使现有文件格式尽可能接近其当前格式,但是可以进行完整的更改,只需要在阅读程序方面进行其他工作即可。