我正在使用 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/