【发布时间】:2012-05-02 02:45:10
【问题描述】:
我是 Rails 新手,我想创建一个用于上传文件的网站:音乐、视频、图片、文本。存储文件的更好方法是什么?我读过不同的方法:数据库,作为文件,Amazon S3?
会有很多文件,每个文件大约 1 kb 到 20Mb。
谢谢!
【问题讨论】:
标签: ruby-on-rails ruby
我是 Rails 新手,我想创建一个用于上传文件的网站:音乐、视频、图片、文本。存储文件的更好方法是什么?我读过不同的方法:数据库,作为文件,Amazon S3?
会有很多文件,每个文件大约 1 kb 到 20Mb。
谢谢!
【问题讨论】:
标签: ruby-on-rails ruby
在数据库中存储文件本身还不错。这取决于数据库的类型。
由于 bassneck 所解释的原因,将文件存储在关系数据库中并不是一种好的做法。
但还有其他类型的数据库专门设计用于以非关系方式存储任何类型的数据,例如任何类型的文件。 Dhruva 的回答强调,MongoDB 非常好,它对使用 GridFS 存储文件的支持非常棒。
GridFS 非常好,例如它只能流式传输文件的一部分,对视频非常有用。
在您的特定情况下——包含多种数据的许多小文件——GridFS 是一个真正的选择。我使用 Heroku 和 mongohq.com,他们的工作就像一个魅力。
【讨论】:
我认为没有正确的答案。我使用heroku,所以我唯一的选择是Amazon S3(第一年有免费配额),我对此非常满意。我使用carrierwave gem 来上传文件,它真的很容易使用。比起回形针,我真的更喜欢它。
如果您的主机提供大量空间和带宽,那么您可以尝试一下。
但是对于数据库,我真的不喜欢在里面存储文件的想法。
更新
从表中读取文件名应该比读取文件本身更快。数据库越大,备份所需的时间就越长。如果以heroku 为例,共享数据库只能获得20gb。如果您要在其中存储 10-20mb 的文件,那并不算多。如果您将文件存储在数据库中,将项目移动到另一个主机可能会更容易。但是,如果您使用外部服务(例如 S3),则对您来说没有什么不同。
【讨论】:
Heroku 上的 Amazon S3 集成相对容易设置和使用回形针 gem。 Heroku 有一些关于如何启动和运行的文档。
查看他们的文档,看看这是否是您正在寻找的东西。
【讨论】:
我建议您也检查并考虑 MongoDB GridFS - http://www.mongodb.org/display/DOCS/GridFS+Specification。我对 GridFS 的体验很好。我不能给你一个与其他选项的比较分析,但我想知道。
【讨论】:
我建议您使用 amazon s3 来存储您的文件。这是最好的。
【讨论】: