adr*_*rin 7 architecture asp.net postgresql nhibernate asp.net-mvc
我正在使用ASP.NET MVC + NHibernate + Postres堆栈编写Web应用程序.我想知道上传的图像是作为二进制blob存储在数据库中还是存储在文件系统上(仅在db中引用).我可以想到的数据库存储的一个优点是可以轻松备份/恢复所有数据,而无需恢复到文件系统复制工具.另一方面,我怀疑文件系统访问可能更快(但是在处理许多并发请求时尤其如此?)您有什么建议?
我会同时执行这两项操作 - 确保图像存储在数据库中,以便集中所有数据以便于备份,但也会在外部缓存数据,以便对大图像的重复请求不会破坏数据库的缓冲区缓存。如果做得正确,您可以引入新的前端 Web 服务器,这些服务器将在启动后透明地从数据库填充其本地图像缓存。
拥有图像的集中存储对于确保在具有多个 Web 服务器的系统中为图像发送良好的 Last-Modified 和 ETag HTTP 响应标头也很有用,因为这些标头可以从数据库内容中生成,而不是从本地缓存中获取对象。
只是 PostgreSQL 的具体实现说明:您可以将包含图像数据的列的“存储模式”设置为“外部”:这将阻止 PostgreSQL 尝试压缩图像数据(使用 zlib,它不太可能提供任何好处)并将使其将图像数据存储在辅助 TOAST 表中,如果您只是查询图像元数据,则可以提供更好的性能。请参阅ALTER TABLE命令的“SET STORAGE”子句,例如:
ALTER TABLE media.image ALTER COLUMN content SET STORAGE EXTERNAL
Run Code Online (Sandbox Code Playgroud)