可能重复:
在数据库中存储图像 - 是还是不是?
朋友们,
我需要在 DataList 中显示动态变化的图像。我所做的是将图像作为图像数据类型存储在数据库中并检索图像。将图像存储在数据库中的好技术吗?
仅供参考,用户可以上传图片。
问候, 阿比
可能重复:
在数据库中存储图像 - 是还是不是?
朋友们,
我需要在 DataList 中显示动态变化的图像。我所做的是将图像作为图像数据类型存储在数据库中并检索图像。将图像存储在数据库中的好技术吗?
仅供参考,用户可以上传图片。
问候, 阿比
答案是 - 这取决于......已经完成了研究(http://research.microsoft.com/pubs/64525/tr-2006-45.pdf),这些研究基本上已经得出结论,如果对象平均大于 1 兆字节, NTFS 与 SQL Server 相比具有明显的优势。如果对象小于 256 KB,则数据库具有明显优势。在此范围内,这取决于工作负载的写入密集程度以及系统中典型副本的存储年龄。
如果您存储路径等,您必须解决的问题是保持图像的参照完整性。如果有人移动文件,如果有人上传一个同名的新文件怎么办(我建议对上传文件进行重命名以反映某种键,而不是保留其原始名称 bob.jpg)。您需要查看对目录等进行分段以保持列表的合理性。查找图像可能比将它们也存储在数据库中更难。
然而,从好的方面来说,如果你不把它们都塞进你的数据库中,你可以根据你的图像在不同的服务器、子域、云等上的分布来形成一个 CDN
取决于图像的大小和您使用的数据库。
对于 SQL Server,如果它们大于 1MB 并且您不使用 NTFS 文件流来存储 BLOB 字段,那将是一个非常糟糕的主意。参见例如http://www.simple-talk.com/sql/learn-sql-server/an-introduction-to-sql-server-filestream/
如果您有像 Couch DB 这样的面向文档的数据库,那可能没问题。
我会将它们作为物理文件存储在服务器上,但将文件路径存储在数据库中,而不是实际图像。并根据位置存储到数据库中搜索文件。将图像存储在数据库中会随着时间的推移显着增加其大小。
如果您需要跨多个 Web 服务器扩展您的站点,将它们存储在数据库中也很有用。
如果它们是静态的,则没有用,因为它们可以与您的站点一起部署,但是像头像这样的东西通常更好地存储在数据库中,因此它们可供所有集群成员使用。
我会将它们作为物理文件存储在服务器上,但将文件路径存储在数据库中,而不是实际图像。将图像存储在数据库中会随着时间的推移显着增加其大小。
图像大小会不必要地增加您的数据库大小,因此存储它不是一个好习惯,而是将文件路径存储在您的数据库中,这不是那么大。如果您有一些强烈的要求或用例,应该在数据库中存储图像。