在将部署在 heroku 上的应用程序中......
我需要允许用户上传缩略图。
Heroku 部署的应用程序当然没有持久的本地文件存储。
在这里做的典型事情,谷歌搜索,似乎是将文件存储在 Amazon S3 或其他 AWS 托管的云存储中。
但是,如果我只是将图像粘贴在 postgres blob 列中呢?
这样做有什么缺点?好处是,不必为其他存储付费,不必处理具有更多错误和中断机会的额外外部系统。但肯定有一些很好的理由似乎没有人这样做,它们是什么?
数据库和 S3 是两种不同的存储机制。它们有何不同?
关于 S3
Amazon S3 是一个高度专业化的文件存储系统。它最大限度地减少了您可以对基本的读/写/删除文件操作执行的操作,并优化了缓存以提供存储的整个文件的数据。
关于 Postgres
Postgres 是一个 SQL 关系数据库,具有极大的灵活性,可用于存储和索引各种操作的数据。您可以很好地将二进制图像数据塞进 Postgres 中的一行。
比较成本/可扩展性
为什么你会选择 S3 而不是 Postgres?成本和可扩展性。Postgres 是一个昂贵的、高技能的多面手。在 Heroku 上,根据数据量和流量规模,运行 Postgres 数据库可能每月花费数百或数千美元。
Amazon S3 是一种廉价且高度可扩展的解决方案,完全符合您的需求(编写图像,在网页上下文中提供图像)。
TL;DR:Amazon S3 针对图像等文件进行了高度优化,具有高度可扩展性且相对便宜。