Php 将图像上传和下载到MongoDB是否比在磁盘上更快

Php 将图像上传和下载到MongoDB是否比在磁盘上更快,php,file-upload,mongodb,Php,File Upload,Mongodb,比如说我们想开发一个照片网站 从MongoDB上传或下载图像会比从磁盘存储或下载图像更快吗。。。因为mongoDB可以分块保存图像和文件,并保存元数据 因此,对于一个照片共享网站来说,将图像存储在mongodb或典型的服务器硬盘上会更好(更快)吗。等等 我正在考虑使用php,codeigniter顺便说一句,如果这改变了关于这个问题的性能问题。-文档建议您应该这样做。这听起来也不错,非常适合备份和复制。希望有帮助。您肯定不想直接从MongoDB下载图像。即使是通过GridFS,也会比通过磁盘上的

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

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

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


我正在考虑使用php,codeigniter顺便说一句,如果这改变了关于这个问题的性能问题。

-文档建议您应该这样做。这听起来也不错,非常适合备份和复制。希望有帮助。

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

因此,您可以自由选择最适合您的内容,MongoDB的GridFS免费提供了许多功能,如果您直接使用文件,则必须自己完成这些功能。

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


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

顺便说一句:您可以混合使用这两种方法,将映像存储在mongodb中以获得即时可靠性,然后将其复制到两台服务器的FS中以提高速度


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

一些基准测试表明MongoDB的文件存储速度大约慢6倍(通过GridFS)而不是使用常规的旧文件系统。(其中一个比较了apache、nginx和mongo)

然而,尽管MongoDB速度较慢,但仍有充分的理由将其用于文件存储——1从Mongo内置的分片/复制中获得免费备份。这大大节省了时间#2易于管理,存储元数据,不必担心目录、权限等问题。这也节省了大量时间

我们的照片后端是在几年前实现的,它包含了大量的意大利面代码,可以执行各种操作(检查或创建用户目录、检查或创建日期目录、检查名称冲突、设置烫发),还有一大堆其他的乱七八糟的备份

我们最近把一切都改成了Mongo。根据我们的经验,Mongo有点慢(可能慢了6倍,但感觉不到慢了6倍),不管怎样-那又怎样?所有的意大利面都在窗外,新的Mongo+photo代码更小、更紧凑、逻辑更简单。永远不要回到文件系统


将文件存储在文件系统中,在数据库中存储数据库映像中的详细信息很少是一个好主意,除了一些小的“可移植性”优点。现在,每当有人想要查看图像时,你都需要点击DB。你点击的次数越多,所需时间就越长。如果文件在磁盘上,Web服务器可以直接为其提供服务,而无需编写脚本。如果它在db中,Web服务器需要派生一个脚本,脚本需要连接到db服务器,db服务器需要处理查询,脚本需要读取db服务器的答案并处理它以最终交付数据。还想知道什么需要更长的时间吗?好吧,“更快”并不总是“更好”,还有很多事情需要考虑,这些评论并没有解决。像长期管理你的文件(这对文件系统来说可能是一个巨大的痛苦)备份、复制、文件的元数据(还有像md5哈希MongoDB这样的东西可以让你避免重复)等等。很多网站在数据库中使用图像,它工作得很好。。。GridFS正是为此而设计的!文件系统和用户之间有几层缓存。最重要的是浏览器的缓存、代理和操作系统。网站上的流量是多少?“但如果你的网站迟早会流行,你必须切换到FS实现。”——@Zippoxer:我想这取决于你所说的“流行”是什么意思。通过PHP为25k访问者运行图像可能还可以,速度有点慢,但也可以接受。。现在,如果你有1000万或更多的用户,情况就完全不同了。