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

发布于 2024-12-19 17:54:35 字数 431 浏览 2 评论 0原文

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

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

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

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

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

亚历克斯

The java web app I'm developing allows users to upload files (pictures and documents) to their profiles and define access rules for those files (define which of the other users are able to view / download the file). The access control / permission system is custom made and rules are stored in mongoDB alongside the user's profile and the actual file entry.

Knowing that I need the application and storage to be distributed and fault-tolerant I need to figure out which is the best strategy for file storage.

Should I store the files inside mongoDB in the files collection where the file document containing description and access rules are located ?

Or should I store the files inside the server's file system and keep the path in the mongoDB document? With the filesystem approach will I still be able to enforce the user defined access permissions and how?
Finally in the filesystem approach how do I distribute files accross servers? Should I use dedicated servers for this or can I store the files on the webapp servers or mongodb servers ?

Thanks a lot for all your insights! Any help or feedback appreciated.

Alex

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

|煩躁 2024-12-26 17:54:35

有几种替代方案:

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

就您而言,听起来最后一个选项可能是最好的,有相当多的用户从 FS 切换到 gridFS,并且它对他们来说非常有效。
需要记住的事情:

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

There are several alternatives:

  • put files in a storage service (e.g. S3): easy and much space but bad perf
  • put files in a local filesystem: fast but doesnt scale
  • put files in mongodb docs: easy, powerful and scalable but limited to 16MB
  • use GridFS layer of mongodb. Functionalities are limited but it is made for scalability (thanks to sharding) and is fairly fast too. Note you can put info about file (permission etc) right into the file's metadata object.

In your case it sounds like last option may be best, there are quite a few users who switched from FS to gridFS and it worked very well for them.
Things to keep in mind:

  • gridfs sharding works but is not perfect: usually only data is sharded, not the metadata. Not a big deal but the shard with metadata must be very safe.
  • it can be beneficial to use gridfs in a separate mongodb cluster from your core data, since requirements (storage, backup, etc) are usually different.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文