存储大量图片:S3 vs DynamoDB

26

我正在处理一个需要每秒存储大量图像的项目。我有点困惑,是应该将我的图像存储在S3还是DynamoDB中。我感到困惑的原因是似乎S3不支持批量请求,如果需要,我必须能够批量获取所有图像; 另一方面,我不确定将所有这些图像存储在DynamoDB表中是否是个好主意。什么方法最好?

2个回答

49

简短回答:使用S3。

详细回答:DynamoDB将单个记录限制为64 KB,因此除非您的图像本身很小,否则可能无法使用DynamoDB。

您提到希望批量请求读取您的图像,但是DynamoDB批量请求最多返回100个记录或1 MB,以较小的那个为准,因此您无法一次检索所有图像。您可以通过一次读取一个页面来从DynamoDB中转储所有内容,这意味着需要连续不断地发出许多请求。速度不快。

DynamoDB比S3具有更低的延迟,并且支持可配置的吞吐量。但是,S3支持开箱即用的并发性。想同时上传1000张图片?去试试吧!每个对象需要400毫秒写入也没关系,因为您可以同时传输任意数量。同样,您可以通过获取存储桶中的所有内容列表,然后并行检索每个对象,从S3中转储所有内容。

使用S3的其他原因:

  • HTTP兼容性,因此您可以直接将其他人或应用程序指向存储桶
  • 存储成本大大降低
  • 按请求付费,而不是按预留吞吐量收费(DynamoDB的640 KB/s写入能力每月花费460美元,而S3每1000次上传只需固定的0.01美元)

我能想象的唯一情况是,如果您的图像很小,经常更改且对读取延迟非常敏感,则使用DynamoDB可能是有意义的。但除此之外,请使用S3。


1
对于图像,S3是正确的答案。 :) - Ryan Parman
19
DynamoDB现在不再限制每个记录只能存储64 KB的数据了,他们将这个限制提升到了每个记录可以存储400 KB的数据。参见AWS文档 - Richard Adleta

6

将图像存储在S3中。DynamoDB的限制由willglynn描述过了。但是,您可能希望在DynamoDB中存储图像的URL和其他元数据。

关于DynamoDB,需要提醒的是,它可能非常昂贵。从免费层级升级到更高层级可能会花费几百美元来购买更多的吞吐量单位。如果您用它来存储大型项目(接近64KB,例如图像),这需要更大的容量,很可能最终会支付成千上万美元。对于使用AWS存储元数据,您可能希望检查SimpleDB。


1
为什么?亚马逊的网站上说每个读取单位是9美分,每个写入单位是47美分。如果再多买一打,每月大约需要花费7美元。我们是否漏掉了什么?虽然它确实说最低只需0.47美元,但我没有看到其他价格。 - Byte11

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