将文件存储在磁盘或MongoDB上

时间:2011-12-15 05:11:20

标签: mongodb node.js file-upload file-io mongoose

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

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

如果所有内容都存储在数据库中,您可以简单地生成更多Web服务器和/或mongo复制以进行水平扩展

评论

3 个答案:

答案 0 :(得分:10)

MongoDB是存储文件的好选择(我说的是GridFS),特别是对于上面描述的用例。 当您将文件存储到MongoDB(GridFS,而不是文档)时,您可以免费获得所有复制和分片功能,这非常棒。

如果你必须生成一个新的服务器并且你已将文件放入MongoDB,那么你所要做的就是启用复制(因此水平扩展)。我相信这可以为你节省很多麻烦。

资源:

Is GridFS fast and reliable enough for production?
http://www.mongodb.org/display/DOCS/GridFS
http://www.coffeepowered.net/2010/02/17/serving-files-out-of-gridfs/

答案 1 :(得分:4)

除了GridFS,您可能正在考虑基于云的部署。在这种情况下,您可以考虑将文件存储在特定于云的存储中(例如,Windows Azure具有Blob存储)。在此示例中使用Windows Azure(因为这是我使用的),您将通过其存储帐户URI引用文件。例如:

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

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

答案 2 :(得分:2)

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

查看mongoDb文件存储GridFS,这可能会解决您的问题 存储图像,并提供水平可伸缩性。

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