文件存储+权限:mongodb vs文件系统方法

时间:2011-12-06 09:18:45

标签: mongodb permissions filesystems file-permissions file-storage

我正在开发的java Web应用程序允许用户将文件(图片和文档)上传到他们的配置文件,并定义这些文件的访问规则(定义哪些其他用户能够查看/下载文件)。访问控制/权限系统是定制的,规则存储在mongoDB中,与用户的配置文件和实际文件条目一起存储。

知道我需要分布式应用程序和存储以及容错,我需要弄清楚哪个是文件存储的最佳策略。

我是否应该将mongoDB中的文件存储在包含描述和访问规则的文件文件所在的文件集中?

或者我应该将文件存储在服务器的文件系统中并保留mongoDB文件中的路径?使用文件系统方法,我仍然可以强制执行用户定义的访问权限以及如何执行? 最后在文件系统方法中如何在服务器之间分发文件?我应该为此使用专用服务器,还是可以将文件存储在webapp服务器或mongodb服务器上?

非常感谢您的所有见解!任何帮助或反馈意见。

亚历

1 个答案:

答案 0 :(得分:7)

有几种选择:

  • 将文件放入存储服务(例如S3):容易且空间大但不好用
  • 将文件放在本地文件系统中:快速但不扩展
  • 将文件放入mongodb文档中:简单,强大且可扩展,但限制为16MB
  • 使用mongodb的GridFS层。功能是有限的,但它是为了可扩展性(由于分片)而且也相当快。请注意,您可以将有关文件(权限等)的信息放入文件的元数据对象中。

在你的情况下,听起来最后一个选项可能是最好的,有很多用户从FS切换到gridFS并且它对他们来说效果很好。 要记住的事情:

  • gridfs分片工作但不完美:通常只分析数据,而不是元数据。没什么大不了的,但带元数据的分片必须非常安全。
  • 在核心数据的单独mongodb集群中使用gridfs是有益的,因为需求(存储,备份等)通常不同。