在SQL Server中保存图像的最佳实践

4

有很多时候我想把图片保存到SQL Server。我阅读了一些保存图像的做法:

1)上传并将图像保存到服务器,将路径保存在表中

2)保存图像为二进制文件

3)将图像保存为base64字符串

4)使用BLOB(我没有研究它的工作原理)

你知道从服务器请求图像时哪种方式更快吗? 你知道哪种方式更好,不会使SQL Server变慢吗? 你知道还有其他更好的方法吗?

谢谢!


可能是在SQL Server中存储图像的问题?的重复。 - Lamak
@Lamak 这不仅仅是关于Blob或Not Blob的问题。在发布之前,我已经在stackoverflow上进行了搜索。我发布这篇文章的目的是想知道其他开发者的经验分享! - Emmanouil Chountasis
那个链接不仅仅是“Blob还是Not to Blob”。它有一个包含许多好观点的答案。 - Lamak
2个回答

4

微软公司已经 对此进行了一些研究,并得出结论,这取决于您的图像大小。如果大多数图像小于256Kb,则应该使用VARBINARY。另一方面,如果它们超过1Mb,则应该使用FILESTREAM(通常存储在数据库文件之外的文件系统中)。

如果您的图像与其他数据链接在一起,将记录本身与图像分开放入不同的表格(即创建一个Images表格)通常是有用的,以便数据表格保持小巧且易于操作。


关于base64,获取字符串,在客户端将其转换为图像或byte()并使用它怎么样? - Emmanouil Chountasis
2
它将占用更多的空间(大约多出37%)。这会带来什么好处? - Cameron S
假设您在SQL中有一张图片。第一次下载并保存到客户端。第二次,您检查CHECKSUM以查看base64是否已更改(使用字符串很容易)。如果更改了,则删除存储的文件并下载新文件。使用FILESTREAM可以检查该更改吗? - Emmanouil Chountasis
1
为什么不使用时间戳呢?这样也很容易扩展到诸如If-Modified-Since HTTP头之类的东西。 - Cameron S

3
请注意,没有通用的“最佳”方式,只有适合你特定需求的方法。
“当你从服务器请求图像时,你知道哪种‘方式’更快吗?” - 在这种情况下,#1更快,因为你实质上将图像存储在文件系统中,只从数据库检索图像路径。
“你知道哪种‘方式’更好,不会使SQL服务器变慢吗?” - 再次,#1更好,因为它需要处理的数据更少。对于SQL Server来说,检索表示存储图像位置的varchar比以任何形式检索图像本身更容易。
No.1是最简单且可能最容易设置的,但请注意存在以下缺点:
- 如果某些图像从文件系统中删除,则SQL Server不知道发生了什么 - 当你从SQL Server中删除行时,你还需要从文件系统中删除图像(如果你想保持清晰)。 - 你还需要备份文件系统中的数据,而不仅仅是SQL Server数据库。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接