【问题标题】:Best Practice For Saving Images in SQL Server在 SQL Server 中保存图像的最佳实践
【发布时间】:2014-11-20 21:37:57
【问题描述】:

有很多次我想将图像保存到 SQL Server。我已经阅读了一些保存图像的做法:

1) 上传图片并保存到服务器,保存表格内的路径

2) 将图片保存为二进制

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

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

当您从服务器请求图像时,您知道哪种“方式”更快吗? 您知道哪种“方式”更好,以免使 SQL 服务器变慢吗? 您还知道以上任何其他更好的“方式”吗?

谢谢!

【问题讨论】:

  • @Lamak 这不仅仅是关于 Blob 或 Not Blob。我在发布之前搜索了stackoverflow。我在该帖子中搜索的是开发人员的经验!
  • 这个链接不仅仅是“Blob or Not to Blob”。 _它的答案有很多优点

标签: sql-server image


【解决方案1】:

Microsoft 已就该主题完成了some research 并得出结论,这取决于您的图像大小。如果您的大多数图像小于 256Kb,您可能应该使用 VARBINARY。另一方面,如果它们超过 1Mb,那么您应该使用 FILESTREAM(通常存储在数据库文件之外的文件系统中)。

如果您的图像与其他数据相关联,将记录本身与图像分离到不同的表中(即创建一个图像表)通常很有用,这样包含数据的表就可以保持小且易于操作。

【讨论】:

  • base64 怎么样。获取字符串,在客户端转换成image或者byte()并使用?
  • 它将占用更多空间(大约多 37%)。有什么优势?
  • 假设您在 SQL 中有一个图像。第一次下载到客户端并保存。第二次检查 CHECKSUM 以查看 base64 是否已更改(使用字符串很容易)是否删除了存储的文件并下载新文件。使用 FILESTREAM 可以检查更改吗?
  • 为什么不使用时间戳?然后它也很容易扩展到 If-Modified-Since HTTP 标头之类的东西。
【解决方案2】:

请注意,没有通用的“最佳”方式,只有最适合您特定需求的方式。

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

“您知道哪种“方式”更好,以免使 SQL Server 变慢吗?” – 再次 #1,因为它必须处理更少的数据。 SQL Server 检索表示图像存储路径的 varchar 比检索任何形式的图像本身更容易。

No.1 是最简单且可能最容易设置的,但请注意有缺点:

  • 如果从文件系统中删除了某些图像,SQL Server 不知道发生了这种情况
  • 当您从 SQL Server 中删除行时,您还需要从文件系统中删除图像(如果您想保持清晰;))
  • 您还需要从文件系统备份数据,而不仅仅是 SQL Server 数据库

【讨论】:

    猜你喜欢
    • 2010-10-18
    • 1970-01-01
    • 2021-11-02
    • 2010-11-17
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多