MongoDB-将文件存储在数据库中还是外部存储中?

标签 mongodb

我们正在使用MongoDB。在我们的应用程序中,我们需要为每个用户存储多个文件。我们的应用程序将部署在AWS上。我当时正在考虑使用以下选项之一来存储文件-

  • 将文件存储在MongoDB本身中。我知道MongoDB的最大文档大小限制为16 MB,但很可能我们的文件不会超出该限制。
  • 使用MongoDB的GridFS来存储文件。
  • 使用Amazon S3存储文件,这些文件的链接将存储在MongoDB中。
  • 在AWS上使用本地文件系统/EBS卷。

  • 以上哪种方法更好?在性能方面,可扩展性?
    哪种方法更具可扩展性?我也想使用CDN来缓存文件。
    我更喜欢AWS S3,因为我可以使用CDN来缓存文件,所以我对文件的存储将与数据库无关。另外,当我将文件存储在数据库外部时,数据库的大小不会显着增加。

    最佳答案

    我认为最好的选择是GridFS和S3。我本人会和后者一起去的。将文件推送到S3,然后将存储区名称和文件 key 存储在Mongo文档中。除非您的业务或查询要求必须在文档中包含所有数据,否则我认为这是最好的方法。

    我已经在生产中使用了该解决方案,并且可以轻松扩展。对您的Mongo集合的影响很小,您不必担心在那里存储大量数据。只需存储 key ,然后让S3负责所有这些工作即可。由于您的系统与存储完全无关,因此您以后随时可以将它们存储在其他位置。

    关于MongoDB-将文件存储在数据库中还是外部存储中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28336486/

    相关文章:

    mongodb - Mongo 使用 26GB 内存,这很糟糕吗?

    javascript - 在 meteor 中插入嵌套对象

    mongodb - Spring数据mongodb不关闭mongodb连接

    python - Python 中的 Mongodb 批量插入限制

    mongodb - 在 MongoDB 中配置 GridFS Chunksize

    mongodb - 使用 $in vs $or 在 MongoDB 中查询的优化方式

    node.js - Mongo自定义多键排序

    java - MongoDB-Java 驱动程序 : Catch exception when insert fails

    javascript - 在 MongoDB 中通过用户 ID 获取集合

    mongodb - 使用 elasticsearch sink 连接器删除和编辑操作不起作用