2013-06-19 36 views
5

有很多次我想将图像保存到SQL Server。我看过一些做法保存图像:在SQL Server中保存图像的最佳实践

1)上传并保存图片到服务器,保存表

2)保存图像为二进制

3内的路径)保存图像为base64字符串

4)使用BLOB(我还没有研究过它是如何工作的)

你知道当你向服务器请求图像时哪种“方式”更快吗? 你知道哪个“方法”更好,以免让SQL服务器变慢吗? 你是否知道其他“更好”的方法?

谢谢!

+0

可能的重复[在SQL Server中存储图像?](http://stackoverflow.com/questions/5613898/what-about-storing-images-in-sql-server) – Lamak

+0

@Lamak它不只是关于Blob或不Blob。我在发布之前搜索过stackoverflow。我在那篇文章中搜索的是发现者的经验所说的! –

+0

而且这个链接不仅仅是“Blob or Not to Blob”。 _它有很多关于它们的好点 – Lamak

回答

4

有关此主题,Microsoft已完成some research,并得出结论,这取决于您的图像的大小。如果你的大多数图像是< 256Kb,你应该使用VARBINARY。另一方面,如果它们高于1Mb,则应使用FILESTREAM(通常存储在数据库文件外的文件系统中)。

如果您的图像与其他数据链接,将记录本身与图像分隔到不同的表格(即创建图像表格)通常很有用,以便数据表格保持较小且易于操作。

+0

base64。获取字符串,将其转换为客户端中的image或byte()并使用它? –

+2

它会占用更多的空间(大约多37%)。什么是优势? –

+0

让我们说你有一个SQL中的图像。您第一次下载到客户端并保存它。第二次检查CHECKSUM以查看base64是否已更改(字符串很容易),如果它删除了存储的文件并且您下载了新的文件。使用FILESTREAM可以检查更改吗? –

3

请注意,没有“最好”的方式普遍,但只有最适合您的具体需求。

“当你从服务器请求图像时,你知道哪个”方式“更快吗?” - 在这种情况下#1,因为你本质上是将图像存储在文件系统中,并且只从数据库检索图像路径。

“你知道哪个”方法“更好,以免SQL服务器变慢?” - 再次#1因为它必须处理更少的数据。 SQL Server更容易检索表示存储图像的路径的varchar,而不是以任何形式检索图像本身。

1号是最简单,可能比较容易建立,但请注意,也有缺点:

  • 如果一些图像从文件系统的SQL Server删除没有一个线索,这件事发生
  • 当您删除SQL Server行,你也需要从文件系统中删除图像(如果你想保持事情说清楚;))
  • 您还需要备份数据从文件系统,而不是仅在SQL Server数据库