2009-07-09 86 views
10

我的具体情况存储上传的照片和文件 - 文件系统VS数据库BLOB

物业管理的网站,用户可以上传照片和租赁文件。对于每个公寓单元,可能有4张照片,因此系统中不会有大量的照片。

对于照片,每个都会有缩略图。

我的问题

我的首要任务是性能。对于最终用户,我想加载页面并尽可能快地显示图像。

我应该将图像存储在数据库或文件系统中,还是无所谓?我需要缓存任何东西吗?

在此先感谢!

回答

9

文件系统。没有比赛。 将数据存储在数据库中时,数据必须经过更多层。

在缓存上编辑: 如果您想在用户上传文件时缓存文件,以确保操作尽快完成,则将文件直接转储到磁盘(即文件系统)的速度要尽可能快。只要文件不是太大,并且没有太多的并发用户,就可以将文件“缓存”在内存中,返回给用户,然后保存到磁盘。说实话,我不会打扰。

如果您在上传文件后想要缓存文件以提高性能,那么文件系统仍然是最佳选择。您将从Web服务器免费获得缓存(可能需要调整一个或两个设置)。如果文件在数据库中,你不会得到这个。

毕竟,它听起来像你永远不应该在数据库中存储文件。不是这样,你只需要一个很好的理由来这样做。

+0

@Daniel。为了获得最佳的缓存性能,我必须在Web服务器上调整“一两个设置”是什么? – AngryHacker 2009-10-10 05:26:14

+0

请您澄清一下,如果浏览器本身对图像文件进行缓存的话,缓存文件是必要的。 – 2011-06-05 14:45:00

10

虽然每件事都有例外,但一般情况下,将图像存储在文件系统中是最佳选择。您可以轻松地为图像提供缓存服务,您无需担心处理图像处理的其他代码,并且如果需要,可以通过标准图像编辑方法轻松地对图像进行维护。

这听起来像您的商业模式很适合这种情况。

+1

想要添加,丹尼尔说,数据库只是一个层,提问者想要放置文件。 – Dykam 2009-07-09 17:49:44

+4

+1同意 - FS在这种情况下传递。有一点需要注意,如果/当你将有大量文件时,它是一个理智的文件系统结构(例如,在一个文件夹中没有十万个文件)。也就是说,保持你的路径在数据库和磁盘上的文件。 – DarkSquid 2009-07-09 18:30:28

3

将您的图像一定存储在文件系统上。在考虑这些类型的事情时,人们认为不够充分的担忧是膨胀;将图像作为二进制blob填充到数据库中是一种非常快速的方式,可以让你的数据库发展壮大。随着大型数据库带来更高的硬件要求,更复杂的复制和备份需求等。将文件系统粘贴到文件系统意味着您可以轻松简便地使用许多现有工具对其进行备份/复制。存储空间在文件系统上比在数据库中要容易得多。

1

a DB 可能在某些操作上比文件系统更快,但加载一个明确标识的KB数据块100s不是其中之一。

此外,一个好的前端网络服务器(比如nginx)比任何你必须编写的web应用程序层更快地读取数据库中的blob。在一些测试中,nginx大致与memcached一样,用于处理中等大小文件(如大型HTML或中等大小的图像)的原始数据。

去FS。没有比赛。

1

也许有轻微的切线,但在从MySQL大会上,有关网站smugmug如何使用MySQL和其他各种技术的卓越性能演示会谈this视频。我认为这个视频建立在这里发布的一些答案上,但也提出了改善数据库范围之外的网站性能的方法。

2

评论到Sheepy的答案。

在SQL常用的存储文件是更好,当文件大小小于256千字节,值得当它大于1兆字节。因此,256-1024千字节取决于几个因素。阅读this了解更多关于使用SQL或文件系统的原因。

相关问题