DynamoDB 能存图片吗?
可以,但只能存小图。DynamoDB 可以把图片作为 base64 编码的 Binary(B)属性存储,前提是整个项目保持在 400 KB 上限以内。AWS 推荐把更大的图片放进 Amazon S3,DynamoDB 里只保留对象元数据和一个 S3 引用,因为 400 KB 对大多数媒体文件来说都太小了。
小图存储是怎么运作的
把图片编码成 base64,存进一个 Binary 属性。DynamoDB 按原始字节长度计入 400 KB 的项目上限,所以缩略图或图标塞得下;一张完整照片通常塞不下。
推荐的模式
对于任何大于 400 KB 的东西:
- 把图片上传到 Amazon S3。
- 把它的 S3 键、大小、内容类型及其他元数据存进 DynamoDB。
- 先从 DynamoDB 读元数据,再从 S3 取对象。
请注意,DynamoDB 和 S3 不共享事务,所以出错时你的应用必须自己清理孤立对象。
内联存储的代价
假设每秒一次上传、每秒十次查看,在 us-east-1 用按需模式,把两种形态都过一遍我们的定价计算器:
| 每月 | 380 KB 图片内联 | 119 字节指针 |
|---|---|---|
| 写入 | $624.15 | $1.64 |
| 读取(最终一致性) | $156.04 | $1.64 |
| 请求合计 | $780.19 | $3.29 |
同样的流量贵了 238 倍,而这全是容量取整造成的。一个写入单元覆盖 1 KB,所以那张图要付 380 个,而指针只付 1 个。读取按 4 KB 取整,所以每一次对图片的最终一致性读取要花 47.5 个读取单元,而指针只花 0.5 个。
存储费用还要叠在上面。每秒一次 380 KB 的上传,每月增加 952 GB,按 DynamoDB 每 GB-月 $0.25 算是 $238.09,按 S3 Standard 的 $0.023 算是 $21.90,而下个月的上传又会再加同样一份。
上面那些数字所描述的指针项目就是这个,它测出来是 119 字节:
{
"pk": "IMG#2026-07-28#a1b2c3",
"s3Key": "uploads/2026/07/28/a1b2c3.jpg",
"contentType": "image/jpeg",
"bytes": 389120,
"width": 1920,
"height": 1080,
"uploadedAt": 1785283200
}深入了解
参见最大项目大小,并用项目大小计算器测量项目。下载 DynoTable 可以检视二进制属性。
定价来源
- Amazon DynamoDB pricing——请求单元与存储费率,通过 AWS Price List API 同步进计算器。
- Amazon S3 pricing——S3 Standard 存储,us-east-1 前 50 TB 每 GB-月 $0.023(2026-07-28 从 Price List API 读取)。
参考资料
- Best practices for storing large items and attributes in DynamoDB — Amazon DynamoDB Developer Guide
- Supported data types and naming rules in Amazon DynamoDB — Amazon DynamoDB Developer Guide
- Quotas in Amazon DynamoDB — Amazon DynamoDB Developer Guide
最后核实于 2026-07-13,依据上方链接的 AWS 官方文档。
2026-07-28 用我们自己的定价计算器、按它从 AWS Price List API 同步来的 us-east-1 费率计价。输入:按需模式、每秒 1 次写入、每秒 10 次最终一致性读取、380 KB 对比上方那个 119 字节的项目,免费套餐关闭。