将图像上传和下载到MongoDB中比在磁盘上更快吗


Is it faster to upload and download images into a MongoDB than on disk

说我们想开发一个照片网站。

将图像上传或下载到MongoDB或从MongoDB下载图像会比从磁盘存储或下载图像更快吗。。。由于mongoDB可以将图像和文件分块保存并保存元数据。

因此,对于照片共享网站来说,将图像存储在mongodb或典型的服务器硬盘上会更好(更快(吗。等

我正在考虑使用php,codeigniter btw,如果这改变了有关该问题的性能问题。

轻量级web服务器(lighttpd、nginx(在提供文件系统中的内容方面做得很好。由于操作系统充当缓存层,它们通常从内存中提供内容,速度非常快。

如果你想从mongodb提供图像,web服务器必须运行某种脚本(python、php、ruby…当然是FCGI,你不能为每个图像启动一个新的进程(,每次请求图像时,它都必须从mongobc获取数据。所以会很慢吗?如果使用复制副本集,其好处是自动复制和故障切换。如果你需要这个,并且足够聪明,知道用FS来实现它,那么就选择这个选项。。。如果您需要一个非常快速、可靠的实现,那么mongodb可能是一种更快的方法。但是,如果你的网站迟早会流行起来,你必须切换到FS实现。

BTW:您可以将这两种方法混合使用,将图像存储在mongodb中以获得即时可靠性,然后将其复制到几个服务器的FS中以提高速度。

一些测试结果。

哦,还有一件事。。在您意识到生成的HTML和图像下载将是两个独立的HTTP请求之前,将元数据与图像耦合似乎是很好的,因此您必须查询mongo两次,一次是元数据,另一次是图像。

何时使用GridFS与MongoDB存储文件-文档建议您应该这样做。它听起来也快速可靠,非常适合备份和复制。希望能有所帮助。

几个基准测试表明,MongoDB的文件存储(通过GridFS(速度大约是使用常规旧文件系统的6倍。(有人比较了apache、nginx和mongo(

然而,有充分的理由使用MongoDB进行文件存储,尽管它速度较慢——Mongo内置的分片/复制提供了#1免费备份。这是一个巨大的时间节省#2易于管理,存储元数据,不必担心目录、权限等。还可以节省大量时间。

我们的照片后端是几年前在一大堆意大利面条代码中实现的,这些代码可以做各种事情(检查或创建用户目录、检查或创建日期目录、检查名称冲突、设置排列(,还有一大堆其他的备份。

我们最近把所有东西都改成了Mongo。根据我们的经验,Mongo有点慢(它可能慢6倍,但感觉不像慢6倍(,无论如何——那又怎样?所有的意大利面条都已经过时了,新的Mongo+照片代码更小、更紧凑、逻辑更简单。永远不要回到文件系统。

http://www.lightcubesolutions.com/blog/?p=209

您肯定不想直接从MongoDB下载图像。即使是通过GridFS,也会比从磁盘上的一个简单文件慢一些。你也不应该想在磁盘上做这件事。这两种选项都不适合以高吞吐量交付图像内容。对于源/源(无论是mongo还是文件系统(和用户之间的静态内容,您总是需要一个服务器端缓存层。

因此,考虑到这一点,您可以自由选择最适合您的功能,MongoDB的GridFS免费提供了许多功能,否则您在直接处理文件时必须自己完成这些功能。