10

MongoDB 非常适合将静态文件(文件、视频)作为 cdn 提供服务。我正在寻找一种可靠的方法来存储大量数据(>+To)来替换 S3 和管理缓存功能。经验。

谢谢。

4

2 回答 2

13

我想这个问题的答案是否定的,因为当您使用 CDN 存储静态文件时,您的服务器就不会受到静态数据请求的影响。但是当您在文件系统和 mongodb 之间进行选择时,我认为 mongodb 会更快,因为如果服务器上有足够的 ram,mongo 会将所有数据加载到内存中。

我还发现了一些可以帮助您做出选择的链接:www.markus-gattol.namegroups.google.com

从文档中:

何时使用 GridFS

很多文件。GridFS 倾向于比许多文件系统更好地处理大量(数千个)文件。

用户上传的文件。当用户上传文件时,您往往会有很多文件,并希望它们被复制和备份。GridFS 是存储这些数据的理想场所,因为您可以像管理数据一样管理它们。也可以直接在文件存储中按用户、上传日期等进行查询,无需一层间接

经常更改的文件。如果您的某些文件发生了很大变化 - 将它们存储在 GridFS 中是有意义的,这样您就可以在一个地方修改它们,所有客户端都将获得更新。也可以比存储在源代码树中更好,因此您不必部署应用程序来更新文件。

何时不使用 GridFS

几个小的静态文件。如果您的网站只有几个小文件(js、css、图像),那么使用文件系统可能更容易。

请注意,如果您需要以原子方式更新二进制对象,并且该对象低于您的 MongoDB 版本的文档大小限制(1.8 为 16MB),那么您可以考虑将对象手动存储在单个文档中。这可以使用 BSON bindata 类型来完成。有关使用此类型的详细信息,请查看您的驱动程序文档。

于 2011-02-20T16:21:57.723 回答
4

通常答案是肯定的,您可以使用 mongodb 来执行此操作,但 mongodb 没有像 apache/random-webserver 那样提供文件的 http 接口。如果您需要添加其他功能,例如为这些文件添加应用程序身份验证,那么它可能更有意义,例如。

您可以围绕 mongodb 创建一个基础架构,在其中复制更改并编写一个 http 前端来提供文件(如 nginx-gridfs 或任何其他 gridfs http 组件)。但是您需要构建/集成这些、测试和部署它们。使用带有标准 Web 服务器的文件系统来提供文件经过了很好的测试和记录;许多系统使用 rsync 有效地将文件复制到许多节点。

cdn 做了很多事情,您必须重新实现它可能没有意义自己解决所有这些问题,但这确实是另一个问题。

于 2011-02-20T16:43:23.110 回答