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