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

azp*_*lic 4 filesystems permissions file-permissions file-storage mongodb

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

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

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

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

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

亚历克斯

小智 7

有几种选择:

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

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

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