我一生中曾使用 S3(包括 Rackspace 云文件)和 MongoDB 进行视频分发。
大多数人都会毫不犹豫地选择 S3,但我发现两者都有其缺点。其中一个大问题是 S3 不是 CDN,它实际上是特定区域内的冗余存储,不会复制到其他 S3 区域,这意味着您需要在 S3 之上使用诸如 cloudfront 之类的东西来 ping 您的图像如果您的网站负载严重,则可以使用某种缓存。
S3 还有其他功能,使其不那么像 CDN,而更像是一个存储仓库。话虽如此,对于不经常访问的文件,S3 的速度非常快。
这种双层当然会带来维护等复杂性。不仅如此,CDN 还可以在 TTL 上工作,尽管现在许多 CDN 具有边缘清除功能,但它们仍然不能 100% 确保您的文件不可访问。
因此,由于设置和访问(也可能访问应删除的文件),这可能很快就会变得相当昂贵。
这就是 MongoDB 的地方could赢。根据您的场景,MongoDB 实际上可能更便宜,因为您可以使用 AWS 上的一大堆微型实例来实际保存您的信息,向这些实例添加现货实例预留(非常便宜)以及您所需的一切是单台机器上的一个大磁盘。
天哪,您甚至可以使用 S3 来存储图像,然后使用 MongoDB 作为云前端的替代品。
当您想要将图像 ping 到不同的区域时,您只需在该目标区域中创建一些点实例,然后让 MongoDB 复制其数据即可。您也可以通过复制做一些很酷的事情,以确保只有来自该区域的经常访问的文件才会放置在该区域中。
所以我不会抛弃 MongoDB(甚至 Cassandra),而是会在两者之间进行经济情况调查。
Edit
关于 S3 定价的补充说明,如果您将文件存储在 RR(减少冗余)中,那么价格会减半(大约),这使得 S3 非常便宜,但是,您仍然会遇到 S3 不是 CDN 的问题。
进一步编辑
因为我实际上只是从@cirrus 的回答中继续,所以我实际上会重新评估你的问题,上面已经回答了。
举个例子,Youtube 实际上将所有图像存储在单个计算机上,然后进行分发,因此他们可以轻松管理 2 亿个缩略图,并且……嗯……每天可以轻松地从文件系统中获得大量视图。所以我认为你对文件系统的担心被高估了。
至于哪个数据库更好......我不知道,这取决于你的测试。
我的意思是,你的问题的答案取决于你的场景、你的预算、你的硬件和你的资源,也就是说,如果你有 AWS 服务器,这将是一个与专用内部服务器完全不同的答案。