MongoDB - 将文件存储在DB或外部存储中?

时间:2015-02-05 04:55:21

标签: mongodb

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

  1. 将文件存储在MongoDB中。我知道MongoDB的最大文档大小限制为16 MB,但很可能我们的文件不会超出此范围。
  2. 使用MongoDB的GridFS存储文件。
  3. 使用Amazon S3存储文件,这些文件的链接将在MongoDB中显示。
  4. 在AWS上使用本地文件系统/ EBS卷。
  5. 以上哪种方法更好?在性能,可扩展性方面? 哪种方法更具可扩展性?我还想使用CDN来缓存文件。 我的首选是AWS S3,因为我可以使用CDN来缓存文件,我的文件存储将与数据库无关。此外,由于我将文件存储在数据库之外,因此我的数据库大小不会显着增长。

2 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:3)

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

让我们说得更清楚。

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

  1. 如果您要处理的图像小或不大,请将16MB存储起来 他们在你的收藏品上。
  2. <强>反政府

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

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

    1. 如果您处理的图像大于(16MB>)
    2. 您可以添加元数据(我喜欢这样)。
    3. 查看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可以免费加入,并且是一种即付即用服务,仅限您   永远支付你使用的任何托管和带宽费用,   使其对初创,敏捷和精益公司非常有吸引力   希望最大限度地降低成本。

           

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

           

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

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

      我在测试我的应用程序时只使用文件系统,因为从我的POV开始,我从未在生产中使用它,它的可扩展性不高。

      我个人认为我会使用GridFS,但我认为你必须分析你的应用程序的要求,因此知道使用哪个存储适配器