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