将用户个人资料图片存储在磁盘或数据库中?

前端之家收集整理的这篇文章主要介绍了将用户个人资料图片存储在磁盘或数据库中?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在构建一个asp.net mvc应用程序,用户可以在他们的配置文件中附加图片,还可以在系统的其他区域,如显示最近邮件的仪表板上的邮件小工具等.

用户上传这些时,我想知道是否更好地将它们存储在数据库或磁盘上.

数据库优势

>易于备份整个数据库,并保留具有关联的个人资料/用户表的个人资料内容/图片
>
当我在后台构建Web服务时,他们可以从一个位置(数据库)中拉取所有与profiile相关的数据,

文件系统的优点

从磁盘加载文件可能更快
>任何其他优点?

其他网站在哪里存储这种信息.对于像这样的数据库性能,我有一点担心吗?

也许会有一种方法来缓存从数据库中拉出的图像一段时间?

或者,如何将这些图像存储在数据库中,但将其复制到磁盘中,以便Web服务器从那里加载它们呢?这似乎给了Db的备份和便利,同时给予磁盘上文件的速度优势.

有关基础设施

>该网站将部署到运行NTFS文件系统的Windows Server 2003上的IIS.
>数据库将是sql server 2009

概要

在这里阅读很多相关线程,很多人现在正在向sql Server Filestream类型倾斜.从我可以收集的东西(我可能是错的),文件很小的时候没有什么好处.但是,当文件是多MB或更大的文件时,Filestreaming会大大提高性能.

因为我的个人资料图片往往坐在约5kb左右,所以我决定把它们存储在数据库中的一个文件库中,就是varbinary(max).

在ASP.NET MVC中,我确实看到一些性能问题,返回FileContentResults,用于从数据库中拉出的图像.因此,如果在我的应用程序缓存中找不到该文件的位置,则在读取磁盘上时,最终缓存该文件.

所以我想我去找混合动物
数据库存储,使数据更容易烘烤,文件直接链接配置文件
– 将影子复制到磁盘以允许更好的缓存

在任何时候,我可以删除磁盘上的缓存文件夹,并且当图像被重新请求时,它们将被重新复制,并在之后从缓存中提供.

解决方法

实际上,您的数据库查找数据库实际上可能会更快,具体取决于您拥有的图像数量,除非您使用高度优化的文件系统引擎.数据库设计用于快速查找,并使用比文件系统更有趣的技术.

reiserfs(过时)真的很棒的查找,zfs,xfs和NTFS都有梦幻般的哈希算法,linux ext4看起来很有前途.

系统上的命中在块读取方面不会有任何不同.问题是什么是更快的查询查询返回的文件名(可能是一个哈希?),这又是使用单独的打开,文件关闭访问?还是只是把垃圾堆出来?

有几件事要考虑,包括网络命中,处理命中,可分发性等.如果你在数据库中存储东西,那么你可以移动它.然后再次,如果您将图像存储在内容传送服务上,由于您没有对自己的网络进行任何点击,因此可能会更快.

想想一下,记住一点基准测试从来没有伤害任何人:-)所以用你的典型数据集大小进行测试,并考虑到同步查询等.

猜你在找的MsSQL相关文章