将用户个人资料图片存储在磁盘或数据库中?
我正在构建一个asp.net mvc应用程序,用户可以在他们的配置文件中附加图片,还可以在系统的其他区域,如显示最近邮件的仪表板上的邮件小工具等.
当用户上传这些时,我想知道是否更好地将它们存储在数据库或磁盘上. 数据库优势 >易于备份整个数据库,并保留具有关联的个人资料/用户表的个人资料内容/图片 文件系统的优点 从磁盘加载文件可能更快 其他网站在哪里存储这种信息.对于像这样的数据库性能,我有一点担心吗? 也许会有一种方法来缓存从数据库中拉出的图像一段时间? 或者,如何将这些图像存储在数据库中,但将其复制到磁盘中,以便Web服务器从那里加载它们呢?这似乎给了Db的备份和便利,同时给予磁盘上文件的速度优势. 有关基础设施 >该网站将部署到运行NTFS文件系统的Windows Server 2003上的IIS. 概要 在这里阅读很多相关线程,很多人现在正在向SQL Server Filestream类型倾斜.从我可以收集的东西(我可能是错的),文件很小的时候没有什么好处.但是,当文件是多MB或更大的文件时,Filestreaming会大大提高性能. 因为我的个人资料图片往往坐在约5kb左右,所以我决定把它们存储在数据库中的一个文件库中,就是varbinary(max). 在ASP.NET MVC中,我确实看到一些性能问题,返回FileContentResults,用于从数据库中拉出的图像.因此,如果在我的应用程序缓存中找不到该文件的位置,则在读取磁盘上时,最终缓存该文件. 所以我想我去找混合动物 在任何时候,我可以删除磁盘上的缓存文件夹,并且当图像被重新请求时,它们将被重新复制,并在之后从缓存中提供. 解决方法实际上,您的数据库查找数据库实际上可能会更快,具体取决于您拥有的图像数量,除非您使用高度优化的文件系统引擎.数据库设计用于快速查找,并使用比文件系统更有趣的技术.reiserfs(过时)真的很棒的查找,zfs,xfs和NTFS都有梦幻般的哈希算法,linux ext4看起来很有前途. 系统上的命中在块读取方面不会有任何不同.问题是什么是更快的查询查询返回的文件名(可能是一个哈希?),这又是使用单独的打开,文件关闭访问?还是只是把垃圾堆出来? 有几件事要考虑,包括网络命中,处理命中,可分发性等.如果你在数据库中存储东西,那么你可以移动它.然后再次,如果您将图像存储在内容传送服务上,由于您没有对自己的网络进行任何点击,因此可能会更快. 想想一下,记住一点基准测试从来没有伤害任何人:-)所以用你的典型数据集大小进行测试,并考虑到同步查询等. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |