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