【发布时间】:2011-03-19 06:56:47
【问题描述】:
我正在构建一个 asp.net MVC 应用程序,用户可以在其中将图片附加到他们的个人资料中,也可以在系统的其他区域中,例如仪表板上的消息小工具,显示最近的消息等。
当用户上传这些内容时,我想知道将它们存储在数据库中还是存储在磁盘上会更好。
数据库优势
-
轻松备份整个数据库并将配置文件内容/图像与关联的配置文件/用户表一起保存
-
当我稍后构建网络服务时,他们可以从一个位置(数据库)提取所有与配置文件相关的数据
文件系统优势
-
从磁盘加载文件可能更快
-
还有其他优势吗?
其他网站在哪里存储此类信息?我对这样的事情有点担心数据库性能是对的吗?
也许有办法将从数据库中提取的图像缓存一段时间?
另外,将这些图像存储在数据库中的想法如何,但是将它们影子复制到磁盘以便 Web 服务器可以从那里加载它们?这似乎提供了 Db 的备份和便利性,同时提供了磁盘上文件的速度优势。
有问题的基础设施
- 网站将部署到运行 NTFS 文件系统的 windows server 2003 上的 IIS。
- 数据库将是 SQL Server 2008
总结
在 SO 上阅读了很多相关主题后,现在很多人都倾向于 SQL Server Filestream 类型。然而,从我可以收集到的信息(我可能错了),当文件非常小时没有太多好处。然而,当文件为数 MB 或更大时,文件流看起来会大大提高性能。
由于我的个人资料图片通常约为 5kb,因此我决定将它们作为 varbinary(max) 存储在数据库的文件存储中。
在 ASP.NET MVC 中,我确实看到了返回 FileContentResults 的一些性能问题,因为图像像这样从数据库中拉出。因此,如果在我的应用程序缓存中找不到该文件的位置,我最终会在读取该文件时将其缓存在磁盘上。
所以我想我选择了混合动力车;
- 数据库存储使数据更容易烘焙,文件直接链接到配置文件
- 影子复制到磁盘以实现更好的缓存
在任何时候我都可以删除磁盘上的缓存文件夹,并且当图像被重新请求时,它们将在第一次命中时重新复制,然后从缓存中提供。
【问题讨论】:
-
对不起,我的问题有一些错别字。从我的 iPhone 上输入这个。当我使用电脑时将进行编辑。
-
谢谢安德斯,这正是我想要的。您链接的主题中有很多观点和意见。
标签: profile image-upload