4

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

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

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

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

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

亚历

+1

MongoDB的GridFS为您提供“分布式和容错”。你已经配置好了。你没有提到这些DB-vs-filesystem问题通常关于“性能”的问题。不能说话。 FWIW,我刚刚开始了类似的事情,我们正在尝试将所有内容放在GridFS中(使用本地文件系统缓存)。将看到如何。 – Thilo

+1

也许这有助于:http://stackoverflow.com/questions/3413115/is-gridfs-fast-and-reliable-enough-for-production – Thilo

回答

7

有以下几种选择:

  • 放文件存储服务(如S3):简单,太多的空间,但坏PERF在本地文件系统
  • 放文件:速度快,但没有规模
  • 把文件放在mongodb文档中:简单,强大且可扩展但限于16MB
  • 使用MongoDB的GridFS层。功能是有限的,但它是为了可扩展性(归功于分片),并且速度也相当快。请注意,您可以将有关文件(权限等)的信息放入文件的元数据对象中。

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

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