Jos*_*yes 17 profile image-upload
我正在构建一个asp.net mvc应用程序,用户可以将图片附加到他们的个人资料中,也可以在系统的其他区域附加,例如仪表板上显示最近消息等的消息小工具.
当用户上传这些内容时,我想知道将它们存储在数据库或磁盘上是否更好.
数据库优势
易于备份整个数据库,并保留配置文件内容/图像与相关的配置文件/用户表
当我稍后在轨道上构建Web服务时,他们可以从一个位置(数据库)中提取所有与profiile相关的数据
文件系统的优点
从磁盘加载文件可能更快
还有其他什么好处
其他网站在哪里存储此类信息.对于类似这样的事情,我是否有点担心数据库性能?
也许有一种方法可以缓存从数据库中提取的图像一段时间?
或者,将这些图像存储在数据库中的想法如何,但是将它们复制到磁盘,以便Web服务器可以从那里加载它们?这似乎既提供了Db的备份和便利,同时提供了磁盘上文件的速度优势.
有问题的基础设施
摘要
在SO上阅读很多相关的线程,许多人现在趋向于SQL Server Filestream类型.然而,从我可以收集的内容(我可能是错的),当文件非常小时,没有太大的好处.然而,当文件是多个MB或更大时,文件流看起来会大大提高性能.
由于我的个人资料图片往往约为5kb,我决定将它们作为varbinary(max)存放在数据库的文件存储中.
在ASP.NET MVC中,我确实看到了一些性能问题,返回FileContentResults从这样的数据库中拉出的图像.所以如果在我的应用程序缓存中找不到该文件的位置,我最终会在磁盘上缓存该文件.
所以我想我选择了混合动力车;
在任何时候我都可以删除磁盘上的缓存文件夹,并且当重新请求图像时,它们将在第一次命中时被重新复制并在之后从缓存中提供.
小智 5
实际上,除非您使用高度优化的文件系统引擎,否则您使用数据库查找数据存储实际上可能会更快,具体取决于您拥有的图像数量。数据库是为快速查找而设计的,并且使用了比文件系统更有趣的技术。
reiserfs(已过时)对于查找来说真的很棒,zfs、xfs 和 NTFS 都有很棒的散列算法,linux ext4 看起来也很有前途。
在块读取方面,系统受到的打击不会有任何不同。问题是返回文件名(可能是哈希?)的查询查找速度更快,而文件名又使用单独的打开,文件发送关闭?还是只是将 blob 倾倒出来?
有几件事情需要考虑,包括网络命中、处理命中、可分发性等。如果您将内容存储在数据库中,那么您可以移动它。再说一次,如果您将图像存储在内容交付服务上,这可能会更快,因为您没有对 yrouself 进行任何网络访问。
想一想,记住一点基准测试永远不会伤害任何人:-) 所以用你的典型数据集大小来测试它,并考虑到诸如同时查询之类的事情。
| 归档时间: |
|
| 查看次数: |
9991 次 |
| 最近记录: |