将文件存储在磁盘或MongoDB上

我正在创build一个mongodb / nodejs博客系统(类似于wordpress)。

我目前有图像被保存在磁盘上,指针被放在mongo中。 我想知道,因为我已经将所有会话存储在MongoDB中,以便在服务器之间实现轻松的负载平衡,将实际的文件存储在Mongo中对于轻松实现多服务器设置和/或提高性能也是一个聪明的想法。

如果一切都存储在一个数据库中,您可以简单地产生更多的Web服务器和/或mongo复制水平伸缩

意见?

MongoDB是存储文件的好select(我正在谈论GridFS),特别是针对上述用例。 当你将文件存储到MongoDB(GridFS,不是文档)时,你可以免费获得所有的复制和分片function,这非常棒。

如果你必须产生一个新的服务器,并且你已经有了这些文件到MongoDB中,所有你需要做的就是启用复制(从而横向扩展)。 我相信这可以为你节省很多头痛。

资源:

GridFS是否足够快速和可靠的生产?
http://www.mongodb.org/display/DOCS/GridFS
http://www.coffeepowered.net/2010/02/17/serving-files-out-of-gridfs/

除了GridFS,你可能正在考虑一个基于云的部署。 在这种情况下,您可能会考虑将文件存储在特定于云的存储中(例如,Windows Azure具有Blob存储)。 对于这个例子,坚持使用Windows Azure(因为这是我的工作),你可以通过它的存储帐户URI来引用一个文件。 例如:

https://mystorageacct.blob.core.windows.net/mycontainer/myvideo.wmv 

由于您将MongoDB数据库本身存储在自己的Blob中(并将其作为磁盘卷装载到您的Linux或Windows VM上),您可以select将文件存储在同一个存储帐户或完全不同的存储帐户中每个存储帐户提供100TB 200TB的存储空间)。

将图像作为文档存储在MongoDB中将是一个坏主意,因为可能用于发送大量信息数据的资源将用于发送文件。

看看mongoDb文件存储GridFS,这可能会解决你的图像存储问题,并提供横向的可伸缩性。

http://www.mongodb.org/display/DOCS/GridFS http://www.mongodb.org/display/DOCS/GridFS+Specification