【问题标题】:MongoDB - Storing the files in DB or on external storage?MongoDB - 将文件存储在数据库中还是外部存储中?
【发布时间】:2015-02-05 04:55:21
【问题描述】:

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

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

以上哪种方法更好?在性能方面,可扩展性? 哪种方法更具可扩展性?我还想使用 CDN 来缓存文件。 我的首选是 AWS S3,因为我可以使用 CDN 来缓存文件,我的文件存储将与数据库无关。此外,当我将文件存储在数据库之外时,我的数据库大小也不会显着增长。

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    我认为这里最好的选择是 GridFS 和 S3;我自己会选择后者。将文件推送到 S3,然后将存储桶名称和文件密钥存储在您的 Mongo 文档中。除非您的业务或查询要求是所有数据都必须存在于文档中,否则我认为这是最好的方法。

    我已经在生产中使用过这个解决方案,而且它很容易扩展。对您的 Mongo 集合的影响很小,您不必担心在那里存储大量数据。只需存储密钥,让 S3 处理所有这些。由于您的系统与存储完全无关,因此您可以随时将它们存储在其他地方。

    【讨论】:

      【解决方案2】:

      首先我将只在开发模式下使用本地文件系统,在生产中我将使用 GridFS 或 Amazon S3。

      让我们把那句话说得更清楚。

      第一点(将文件存储在 MongoDB 本身中。)

      1. 如果您要处理的图像较小或小于 16MB,则应存储 它们在您的收藏中。

      对比

      每次进行查询时,您应该知道您正在查看所有集合,因此需要一点时间(您可以排除“图像”字段以避免这种情况)。

      第二点(使用 MongoDB 的 GridFS 存储文件。)

      1. 如果您正在处理大于 (16MB>) 的图像
      2. 您可以添加元数据(我喜欢这个)。

      看看GridFs Docs

      This article talk about pros and cons about using GridFs 也有帮助

      还有when should I use GridFS?

      第三点(使用 Amazon S3)

      我对 S3 不是很熟悉(我从不使用它)。

      但这是来自亚马逊文档when should I use Amazon S3?

      S3 是免费加入的,是一种现收现付的服务,这意味着您只 曾经支付您使用的任何托管和带宽费用, 使其对初创、敏捷和精益公司非常有吸引力 寻求最小化成本。

      除此之外,还提供完全可扩展、快速且可靠的服务 亚马逊,使其对视频制作人和营销人员极具吸引力 全世界。

      Amazon 提供 S3 作为托管系统,定价取决于 您存储视频的数据中心的地理位置。

      四点(使用本地文件系统)

      我只在测试我的应用程序时使用文件系统,我从不在生产环境中使用它,因为从我的 POV 来看,它不是那么可扩展的。

      我个人认为我会使用 GridFS,但我认为您必须分析应用程序的需求,从而知道使用哪个存储适配器

      【讨论】:

        猜你喜欢
        • 2018-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-24
        • 1970-01-01
        相关资源
        最近更新 更多