存储上传的照片和文档 - 文件系统与数据库blob

时间:2009-07-09 17:39:58

标签: python postgresql storage photos photo-management

我的具体情况

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

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

我的问题

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

我应该将图像存储在数据库或文件系统中,还是无关紧要?我需要缓存任何内容吗?

提前致谢!

6 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:9)

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

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

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

毕竟,听起来你永远不应该将文件存储在数据库中。不是这样,你只需要有充分的理由这样做。

答案 2 :(得分:3)

绝对将图像存储在文件系统中。在考虑这些类型的事情时,人们认为不够的一个问题是膨胀;将图像作为二进制blob填充到数据库中是一种非常快速的方式来扩展数据库。使用大型数据库会带来更高的硬件要求,更复杂的复制和备份要求等。在文件系统上粘贴图像意味着您可以轻松简单地使用许多现有工具备份/复制它们。存储空间在文件系统上比在数据库中容易增加。

答案 3 :(得分:2)

评论Sheepy的答案。

通常,当文件大小小于256千字节时,SQL中的存储文件更好,而当大小超过1兆字节时则值得。因此,在256-1024千字节之间,它取决于几个因素。阅读this以了解有关使用SQL或文件系统的原因的更多信息。

答案 4 :(得分:1)

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

另外,一个好的前端网络服务器(比如nginx)比你必须编写的任何webapp层要快得多,以便从数据库中读取blob。在某些测试中,对于中型文件(如大型HTML或中型图像)的原始数据服务,nginx大致与memcached相当。

去FS。没有比赛。

答案 5 :(得分:1)

也许只是略微相切,但在MySQL会议的this视频中,主持人讨论了网站smugmug如何使用MySQL和各种其他技术以获得卓越的性能。我认为该视频建立在此处发布的一些答案的基础上,但也提出了在数据库范围之外提高网站性能的方法。