4

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

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

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

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

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

亚历克斯

4

1 回答 1

7

有几种选择:

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

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

  • gridfs 分片有效但并不完美:通常只分片数据,而不分片元数据。没什么大不了的,但带有元数据的分片必须非常安全。
  • 在与核心数据不同的 mongodb 集群中使用 gridfs 可能是有益的,因为要求(存储、备份等)通常不同。
于 2011-12-06T18:57:21.983 回答