ASP.NET MVC 图像上传存储位置(数据库与文件系统)

标签 asp.net asp.net-mvc postgresql nhibernate architecture

我正在使用 ASP.NET MVC + NHibernate + Postres 堆栈编写 Web 应用程序。我想知道上传的图像是否应该作为二进制 blob 存储在数据库中或文件系统中(并且仅在数据库中引用)。 我能想到的数据库存储的一个优点是可以轻松备份/恢复所有数据,而无需恢复到文件系统复制工具。另一方面,我怀疑文件系统访问可能会更快(但尤其是在处理许多并发请求时?) 你有什么建议?

最佳答案

我会两者都做 - 确保图像存储在数据库中,以便集中所有数据以便于备份,但也要在外部缓存数据,这样对大图像的重复请求就不会破坏缓冲区缓存数据库。如果处理得当,您可以引入新的前端 Web 服务器,这些服务器将在启动后透明地从数据库填充本地镜像缓存。

图像的集中存储对于确保您在具有多个 Web 服务器的系统中为图像发送良好的 Last-Modified 和 ETag HTTP 响应 header 也很有用,因为这些 header 可以从数据库内容中生成,而不是从中获取本地缓存对象。

只是针对 PostgreSQL 的具体实现说明:您可以将包含图像数据的列的“存储模式”设置为“外部”:这将阻止 PostgreSQL 尝试压缩图像数据(使用 zlib,这不太可能提供任何好处)并将图像数据存储在辅助 TOAST 表中,如果您只是查询图像元数据,则可以提供更好的性能。请参阅 ALTER TABLE 的“SET STORAGE”子句命令,例如:

ALTER TABLE media.image ALTER COLUMN content SET STORAGE EXTERNAL

关于ASP.NET MVC 图像上传存储位置(数据库与文件系统),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2732284/

相关文章:

javascript - 禁用 onfocus ="this.blur();"

c# - 我无法访问 <asp :multiview> 内的 html 元素

asp.net-mvc - ASP.Net MVC 6 + WebAPI Auth - 将 MVC 重定向到登录,但如果使用 WebAPI,则返回 401

asp.net-mvc - Ext.NET 未与 ASP.NET MVC 4 集成

sql - 如何重写查询中的某些值? - PostgreSQL

JavaScript/ASP - 不工作

asp.net - IIS7 URL 重写出站规则

postgresql - 保留多个 PostgreSQL 基础备份是否有值(value)?

c# - 无法创建 '?' 类型的常量值。此上下文中仅支持基本类型或枚举类型

ruby-on-rails - 将 PG 转储导入 Sqlite3