AWS S3的小文件问题

时间:2019-04-04 03:05:57

标签: amazon-web-services amazon-s3

我有一个应用程序

每天要生成1百万到1亿甚至更多的小型xml文件,我必须像仅在单个xml文件中那样将其加载到S3存储桶之一中。 该S3存储桶链接到CloudFront,以便我们的全球客户可以更快地访问xml文件。

除了费用部分,其他一切对我来说都很好。 随着文件数量的增加,S3放置请求的成本每天都在增加。 文件应在出现后立即推送,并且应该可以从cloudFront访问。

有什么解决方案可以节省我的成本吗? xml文件的大小最大为2 kb。

让我在这里详细说明到目前为止我已经尝试过的几点。 我本来想将所有小型xml合并到本地,然后将其推送到S3,但是问题是我们应该在AWS中进行一些计算以将其再次提取为小型文件,因为最终用户将只接受单个xml文件。 提取并创建小文件并再次保存到S3中将花费更多。

因此,请随时建议一些其他系统而不是S3,它可能适用于此用例。 我还尝试了HBASE,但是在AWS中运行和管理HBASE是一个问题。 我们还尝试了Dynamo DB,但这也要花更多钱。

1 个答案:

答案 0 :(得分:0)

API调用按对象收费,无论对象大小如何。上传1字节的费用与上传1GB的费用相同。因此,通常较小的对象会导致API成本飙升。

在以下情况下,您可以批处理多个对象并将其作为单个文件上传到S3 Bucket。

接下来,您需要编写Lambda函数(无服务器架构)以将上传的文件解压缩到同一存储桶中。

由于您已经提到所有最终用户将仅访问XML文件。因此,您应该上传一个批处理文件,并使用Lambda函数将它们全部提取到同一存储桶中。

这将节省您的PUT数据传输费用。

Sample Code for Lambda for unzip