在Heroku上的数据库中存储图像的最简单方法?

在Heroku上的数据库中存储图像的最简单方法?,heroku,ruby-on-rails-3.2,Heroku,Ruby On Rails 3.2,我们在Heroku上有一个ROR3.2站点,使用其生产层PostgreSQL数据库 我们的网站用户偶尔上传0.5-2MB大小的图片。出于不同的原因,我们希望将这些图像存储在数据库中,而不是存储在S3或类似系统上的文件中 如果我们的网站是图像密集型的,即Facebook克隆版,那么将图像存储在db中肯定不是一件好事 无论如何,事实并非如此,因此以下是希望在数据库中存储用户图像的一些原因: 控制一切:S3宕机和第三方gems无法中断图像处理/图像访问 轻松删除:如果用户取消其帐户,我们可以通过ra

我们在Heroku上有一个ROR3.2站点,使用其生产层PostgreSQL数据库

我们的网站用户偶尔上传0.5-2MB大小的图片。出于不同的原因,我们希望将这些图像存储在数据库中,而不是存储在S3或类似系统上的文件中

如果我们的网站是图像密集型的,即Facebook克隆版,那么将图像存储在db中肯定不是一件好事

无论如何,事实并非如此,因此以下是希望在数据库中存储用户图像的一些原因:

  • 控制一切:S3宕机和第三方gems无法中断图像处理/图像访问
  • 轻松删除:如果用户取消其帐户,我们可以通过rails模型(关系依赖项)轻松删除与该帐户关联的所有图像
  • 更容易的用户数据导出:当用户想要离开我们的站点并随身携带数据时,我们可以更容易地导出他的图像,而不必从S3导出
  • 成本:这不是一个重要的论据,但由于我们已经为数据库付费,它将比使用S3更便宜,因为S3需要(少量)资金
  • 备份:这不是一个重要的论据,但数据库的备份将包括与站点相关的所有内容(当然,RoR代码除外)
在Heroku PostgreSQL数据库中存储图像的最简单方法是什么?最欢迎使用示例代码或漫游链接


谢谢:)

我建议您不要使用数据库存储这种大小的图像

S3可以非常有效地进行备份,而且非常可靠。从数据丢失的角度来看,它实际上比Heroku的计划更安全

在本例中,成本方面也不是真正的最佳实践。虽然你是对的,他们只强制执行行限制,但我认为在开发数据库计划中存储大图像(0.5-2mb)是不可取的

最后,由于Amazon的内部网络,从EC2(Heroku所在的地方)到S3的传输速度非常快

知道了这一点,我强烈建议您重新考虑将这种大小的图像存储在数据库中的愿望。有关利弊的更深入分析,请参阅


还有一个关于使用S3和Heroku的问题。

正如其他人所提到的,更好的选择是将图像存储在S3或其他东西中

仍然可以查看以下链接以在Heroku PostgreSQL数据库中存储图像


描述您不使用S3的不同原因可能会有助于回答-这通常是本例中的最佳实践。谢谢您的评论。我确实写道,我们使用的是生产层数据库,而不是开发层数据库,但我想这不会改变你的论点:)我最重要的论点实际上是不依赖另一个第三方。失败点越少越好。当用户上传一个图片到我们的网站时,这是很重要的,如果没有这些图片,用户将无法经常使用该网站,因此我宁愿有一个“全有或全无”的“策略”,这意味着如果S3关闭,我们的网站将无法访问。因此,在Heroku上使用db存储解决方案对我来说最有意义。我认为不使用db和S3的主要原因之一就是可伸缩性。作为大容量存储使用数据库通常成本很高,特别是当1mb的数量增加时。至于故障点参数,只有假设您的基础结构比S3更可靠/能够更好地处理负载(值得怀疑),它才有效。然后使用S3就成了一种资产,因为它提供了更多而不是更少的稳定性。我假设Herokou的基础设施和S3一样好(他们不是真的使用S3吗?)。此外,他们的db计划上有1TB的空间,因此使用它们(在此之前免费-非常高的限制)比使用S3(尽管相当便宜)更便宜。无论如何,谢谢你的意见:)