我正在处理一个需要每秒存储大量图像的项目。我有点困惑,是应该将我的图像存储在S3还是DynamoDB中。我感到困惑的原因是似乎S3不支持批量请求,如果需要,我必须能够批量获取所有图像; 另一方面,我不确定将所有这些图像存储在DynamoDB表中是否是个好主意。什么方法最好?
我正在处理一个需要每秒存储大量图像的项目。我有点困惑,是应该将我的图像存储在S3还是DynamoDB中。我感到困惑的原因是似乎S3不支持批量请求,如果需要,我必须能够批量获取所有图像; 另一方面,我不确定将所有这些图像存储在DynamoDB表中是否是个好主意。什么方法最好?
简短回答:使用S3。
详细回答:DynamoDB将单个记录限制为64 KB,因此除非您的图像本身很小,否则可能无法使用DynamoDB。
您提到希望批量请求读取您的图像,但是DynamoDB批量请求最多返回100个记录或1 MB,以较小的那个为准,因此您无法一次检索所有图像。您可以通过一次读取一个页面来从DynamoDB中转储所有内容,这意味着需要连续不断地发出许多请求。速度不快。
DynamoDB比S3具有更低的延迟,并且支持可配置的吞吐量。但是,S3支持开箱即用的并发性。想同时上传1000张图片?去试试吧!每个对象需要400毫秒写入也没关系,因为您可以同时传输任意数量。同样,您可以通过获取存储桶中的所有内容列表,然后并行检索每个对象,从S3中转储所有内容。
使用S3的其他原因:
我能想象的唯一情况是,如果您的图像很小,经常更改且对读取延迟非常敏感,则使用DynamoDB可能是有意义的。但除此之外,请使用S3。
将图像存储在S3中。DynamoDB的限制由willglynn描述过了。但是,您可能希望在DynamoDB中存储图像的URL和其他元数据。
关于DynamoDB,需要提醒的是,它可能非常昂贵。从免费层级升级到更高层级可能会花费几百美元来购买更多的吞吐量单位。如果您用它来存储大型项目(接近64KB,例如图像),这需要更大的容量,很可能最终会支付成千上万美元。对于使用AWS存储元数据,您可能希望检查SimpleDB。