Amazon S3 存储数百万个文件

Amazon S3 Store Millions of Files

我正在努力寻找最具成本效益的方法,将不胜感激任何帮助:

我的问题是,当我上传数百万个文件时,这是否算作每个文件一个 PUT 请求(即每个对象一个)?如果是这样,仅上传数据的成本将是巨大的。如果我上传一个包含一百万个文件的目录,那是一个 PUT 请求吗?

如果我在 prem 上压缩 1 亿个文件,然后上传 zip,并使用 lambda 解压缩,会怎样?这算作一个 PUT 请求吗?

有什么建议吗?

你说你有“数以百万计的文件”,所以我假设你有 4 亿个对象,40TB 的存储空间。请相应调整。我已经展示了我的计算,以便人们可以帮助找出我的错误。

初次上传

Amazon S3 中的 PUT 请求按 [=10=].005 per 1,000 requests 收费。因此,4 亿个 PUT 将花费 2000 美元。 (.005*400m/1000)

如果您希望将它们全部创建为单独的对象,则无法避免此成本。

未来上传的费用相同,为 每百万 5 美元

存储空间

标准存储 成本 [=12=].023 per GB,因此存储 4 亿个 100KB 对象的成本为 920 美元/月。 (.023*400m*100/1m)

可以通过使用成本较低的 存储来降低存储成本 类

访问

GET 请求是 [=14=].0004 per 1,000 requests,因此每月下载 100 万个对象将花费 40c/月。 (.0004*1m/1000)

如果将数据传输到 Internet,将收取 [=16=].09 per GB 的数据传输费用。下载 100 万个 100KB 对象的数据传输成本为 9 美元/月。 (.09*1m*100/1m)

分析

您似乎最害怕上传数以百万计 对象的初始成本,每百万个对象的成本为 5 美元。

但是,存储也会很高,每百万个对象每月 2.30 美元(4 亿个对象每月 920 美元)。持续的成本可能会使初始上传的成本相形见绌。

一些备选方案将是:

  • 在本地存储数据(磁盘存储为 100 美元/4TB,因此 400m 文件需要 1000 美元的磁盘,但您需要额外的驱动器以实现冗余),
  • 将数据存储在数据库中:没有'PUT'数据库费用,但您需要为运行数据库付费。这 可能会 降低成本。
  • 合并 文件中的数据(你说你不想这样做),但可以很容易地分开。例如,通过标识符标记记录以便于提取。
  • 使用不同的存储服务,例如Digital Ocean,他们似乎没有'PUT'成本。