假设我们想开发一个照片网站。
从MongoDB上传或下载图像比从磁盘存储或下载图像更快......因为mongoDB可以将图像和文件保存在块中并保存元数据。
因此,对于照片共享网站,将图像存储在mongodb或典型的服务器硬盘上会更好(更快)。等
我正在考虑使用php,codeigniter btw,如果这改变了有关问题的性能问题。答案 0 :(得分:8)
轻量级Web服务器(lighttpd,nginx)可以很好地为文件系统中的内容提供服务。由于操作系统充当缓存层,因此它们通常从内存提供快速非常的内容。
如果你想从mongodb提供图像,web服务器必须运行某种脚本(python,php,ruby ...当然FCGI,你不能为每个图像启动一个新的进程),这必须每次请求图像时从mongodb获取数据。那会慢吗?如果使用副本集,则可以实现自动复制和故障转移。如果你需要这个并且聪明到足以知道用FS实现它,那么选择那个选项...如果你需要一个非常快速的实现,那么mongodb可能是一个更快的方法。但是,如果您的网站迟早会受欢迎,您必须切换到FS实施。
BTW:您可以混合使用这两种方法,将图像存储在mongodb中以获得即时可靠性,然后将其复制到几台服务器的FS以提高速度。哦还有一件事......将元数据与图像耦合似乎很不错,直到您意识到生成的HTML并且图像下载将成为两个单独的HTTP请求,因此您必须两次查询mongo,一次查询元数据一次是为了形象。
答案 1 :(得分:3)
When to use GridFS for storing files with MongoDB - 该文件建议您应该这样做。它也听起来fast and reliable,非常适合备份和复制。希望有所帮助。
答案 2 :(得分:3)
几个基准测试表明,与使用常规旧文件系统相比,MongoDB文件存储(通过GridFS)的速度大约低6倍。 (一个比较了apache,nginx和mongo)
然而,有充分的理由使用MongoDB进行文件存储,尽管速度较慢 - 来自Mongo的内置分片/复制的#1免费备份。这是一个巨大的节省时间。 #2易于管理,存储元数据,不必担心目录,权限等。同时节省了大量时间。
我们的照片后端几年前在一个巨大的意大利面条代码中实现了各种各样的东西(检查或创建用户目录,检查或创建日期目录,检查名称冲突,设置烫发),以及整体其他混乱做了备份。
我们最近将所有内容都更改为Mongo。根据我们的经验,Mongo有点慢(它可能慢6倍,但感觉不像慢6倍),无论如何 - 那又怎么样?所有的意大利面都在窗外,新的Mongo +照片代码更小,更紧凑,逻辑更简单。永远不要回到文件系统。
答案 3 :(得分:2)
您绝对不想直接从MongoDB下载图像。即使通过GridFS,也会比从磁盘上的简单文件慢一点。您也不应该想要从磁盘上执行此操作。这两种选择都不适合以高吞吐量提供图像内容。您始终需要服务器端缓存层,用于源/源(无论是mongo还是文件系统)与用户之间的静态内容。
那么你可以自由选择最适合自己的东西,MongoDB的GridFS提供了一些免费的功能,当你直接使用文件时,你必须自己做这些功能。