我们正在使用MongoDB。在我们的应用中,我们需要为每个用户存储多个文件。我们的应用程序将部署在AWS上。我正在考虑使用以下选项之一来存储文件 -
以上哪种方法更好?在性能,可扩展性方面? 哪种方法更具可扩展性?我还想使用CDN来缓存文件。 我的首选是AWS S3,因为我可以使用CDN来缓存文件,我的文件存储将与数据库无关。此外,由于我将文件存储在数据库之外,因此我的数据库大小不会显着增长。
答案 0 :(得分:8)
我认为这里最好的选择是GridFS和S3;我自己会和后者一起去。将文件推送到S3,然后将存储桶名称和文件密钥存储在Mongo文档中。除非您的业务或查询要求所有数据必须存在于文档中,否则我认为这是最好的方法。
我在生产中使用了这种解决方案,它很容易扩展。对Mongo集合的影响很小,您不必担心在那里存储大量数据。只需存储密钥,让S3处理所有这些。您可以随后将它们存储在其他地方,因为您的系统与存储无关。
答案 1 :(得分:3)
首先我只在开发模式下使用本地文件系统,在生产时我将使用GridFS或Amazon S3。
让我们说得更清楚。
第一点(将文件存储在MongoDB中。)
<强>反政府强>
每次进行查询时,您都应该知道您正在查看所有集合,因此需要一点点(您可以排除字段“图像”以避免这种情况)。
第二点(使用MongoDB的GridFS存储文件。)
查看GridFs Docs。
This article talk about pros and cons about using GridFs也可以提供帮助
第三点(使用Amazon S3)
我对S3不太熟悉(我从不使用它)。
但这是来自亚马逊文档when should I use Amazon S3?
S3可以免费加入,并且是一种即付即用服务,仅限您 永远支付你使用的任何托管和带宽费用, 使其对初创,敏捷和精益公司非常有吸引力 希望最大限度地降低成本。
除此之外,还提供完全可扩展,快速和可靠的服务 亚马逊,使其对视频制作人和营销人员极具吸引力 世界各地。
亚马逊提供S3作为托管系统,价格取决于 存储视频的数据中心的地理位置。
四点(使用本地文件系统)
我在测试我的应用程序时只使用文件系统,因为从我的POV开始,我从未在生产中使用它,它的可扩展性不高。
我个人认为我会使用GridFS,但我认为你必须分析你的应用程序的要求,因此知道使用哪个存储适配器