【发布时间】:2013-11-07 03:28:09
【问题描述】:
我正在处理需要每秒存储大量图像的项目。如果我应该将图像存储在 S3 或 DynamoDB 中,我有点困惑。我的困惑是因为 S3 似乎不支持批量请求,如果需要,我必须能够批量获取所有图像;另一方面,我不确定将所有这些图像存储在 dynamoDB 的表中是否是个好主意。最好的方法是什么?
【问题讨论】:
标签: amazon-s3 amazon-web-services amazon-dynamodb
我正在处理需要每秒存储大量图像的项目。如果我应该将图像存储在 S3 或 DynamoDB 中,我有点困惑。我的困惑是因为 S3 似乎不支持批量请求,如果需要,我必须能够批量获取所有图像;另一方面,我不确定将所有这些图像存储在 dynamoDB 的表中是否是个好主意。最好的方法是什么?
【问题讨论】:
标签: amazon-s3 amazon-web-services amazon-dynamodb
简答:使用 S3。
长答案:DynamoDB 将单个记录限制为 64 KB,因此您可能不能使用 DynamoDB,除非您的图像很小。
您提到希望在批处理请求中读取您的图像,但 DynamoDB 批处理请求最多返回 100 条记录或 1 MB(以较少者为准),因此无论如何您都不能一次检索所有图像。您可以通过一次读取一个页面来转储 DynamoDB 中的所有内容,这意味着大量请求一个接一个。不快。
DynamoDB 的延迟低于 S3,并且支持可配置的吞吐量。但是,S3 开箱即用支持尽可能多的并发。想一次上传 1000 张图片吗?去吧!每个对象的写入时间是否为 400 毫秒都没有关系,因为您可以同时传输任意数量的对象。同样,您可以从 S3 中转储所有内容,方法是获取存储桶中所有内容的列表,然后并行检索每个对象。
使用 S3 的其他原因:
我可以想象 DynamoDB 对图像存储可能有意义的唯一情况是,如果您的图像很小、经常更改,并且您对读取延迟非常敏感。除此之外,请使用 S3。
【讨论】:
将图像存储在 S3 中。 willglynn 已经描述了 DynamoDB 的限制。但是,您可能希望将 URL 存储到 DynamoDB 中的图像和其他元数据。
关于 DynamoDB 的一点警告,它可能非常昂贵。从免费层升级可能很容易花费几百美元来购买十几个吞吐量单位。如果您将其用于存储需要更大容量的大型项目(接近 64KB,例如图像),您很可能最终会支付数千美元。要使用 AWS 存储元数据,您可能需要检查 SimpleDB。
【讨论】: