AWS S3中的小文件问题

5

我有一个应用程序,每天会生成1百万到1亿个小的xml文件,我必须将这些文件作为单独的xml文件加载到其中一个S3存储桶中。该S3存储桶链接到CloudFront,以便我们遍布全球的客户可以更快地访问xml文件。

除了费用方面,一切都对我很好。 随着文件数量的增加,S3的put请求成本越来越高。 文件应该在出现时立即推送,并且应该可以从cloudFront访问。

有没有解决方案可以在这里节省我的费用? xml文件的大小最大为2kb。

让我详细说明一些我迄今为止尝试过的点。 我想将所有小的xml文件组合在on-prem上,然后将其推送到S3,但是问题是我们应该在AWS中进行一些计算,以将其提取为单独的xml文件,因为最终用户只接受单独的xml文件。 而提取和创建小文件并再次保存到S3的成本甚至更高。

所以,请随意建议一些适用于此用例的其他系统,而不是S3。 我也尝试过HBASE,但在AWS中运行和管理HBASE是一个问题。 我们还尝试过Dynamo DB,但那也是成本更高。


@JohnRotenstein 我已经更新了我的问题,请您再看一下。 - Sudarshan kumar
@JohnRotenstein 好的,我们需要随时提供所有文件,即使他们可能不会使用,但在需要时应该是可用的。这些文件甚至超过了100万,在高峰期更多。关于文件列表,我们从数据库中生成这些文件,然后发送指针,即文件的详细信息,比如文件名,然后他们可以使用S3和CloudFront中的名称访问。他们正在做什么实际上不在我的范围内,但他们需要以xml文件格式提供。同样的文件可以被多个用户下载,但不能同时下载。是的,旧文件应该可用。 - Sudarshan kumar
GET请求的费用为每1,000个请求0.0004美元,因此1百万个请求的费用为0.40美元。如果您想降低这些成本,那么请减少请求次数。不要请求数百万个文件,而是使用更少但更大的文件(将数据合并在一起)。这将减少请求次数。 - John Rotenstein
@JohnRotenstein 我已经尝试了S3选择功能,但似乎非常慢。有时结果甚至需要2秒以上才能出现。 - Sudarshan kumar
@SUDARSHAN 有没有解决您的问题?我有类似的担忧。我有数以亿计的文件,可能有10亿个文件需要上传到S3。 - rogerwhite
显示剩余6条评论
2个回答

1
API调用按对象计费,无论其大小。上传1字节的费用与上传1GB的费用相同。因此,通常小对象会导致API成本飙升。
在下面的场景中,您可以批处理多个对象,并将其作为单个文件上传到S3存储桶。
接下来,您需要编写一个Lambda函数(无服务器架构)将上传的文件解压缩到同一个存储桶中。
由于您已经提到所有最终用户仅访问XML文件。因此,您应该上传批处理文件并使用Lambda函数将它们全部提取到同一个存储桶中。
这将节省PUT数据传输费用。 用于解压缩的Lambda示例代码

2
那么您的意思是将许多小的XML文件压缩成一个文件,然后上传到S3,一旦上传完成,启动Lambda解压缩成小文件...但是当我们解压缩时,它会再次创建小文件,并且即使它是同一个存储桶,也只能进行PUT请求。 - Sudarshan kumar
有两个方面,一个是传输成本,另一个是存储成本。我上面提到的解决方案肯定会减少您的传输成本。对于这些小型XML文件的存储成本,您可以使用生命周期将不经常访问的文件移动到不同的存储类别或冰川中,然后删除。 - Yash Bindlish
2
实际上,将数据传输到S3中并没有任何转移成本或者成本可以忽略不计。因此,传输成本在这里不是问题,即使存储也不是很多,因为我们每天只有非常少量的XML文件,大约5GB。真正的问题是将请求放入S3中。 - Sudarshan kumar
我还没有确认,但我认为SFTP不会对您的请求收费,它会对数据传输收费(我不确定是否与S3相同),但是额外的成本在于服务器运行。如果您已经有一个正在使用的服务器,您可以减少成本。 - James Dean
2
将小于128kB的文件移动到不经常访问类别中实际上会增加成本,因为在存储方面,IA中的文件按照128kb的最小大小计费。因此,在标准类别中,对于每个大小为10kB的5个文件,您将被收取50kB的存储费用,而在IA中,这将是640。 - Artek Wisniewski
4
@YashBindlish,你的解决方案比直接编写较小的文件更好在哪里?最终,您仍然需要使用Lambda进行“PUT”请求以编写未压缩的文件。这应该仍然会产生相同的费用,或者我错过了什么? - ashu

0
对于小文件(最大2kb),考虑使用 DynamoDB 这样的数据库。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接