存储图像 - SQL DB与Azure Blob存储

时间:2016-09-22 22:51:53

标签: sql azure azure-sql-database azure-storage azure-storage-blobs

我正在编写一个新的应用程序,应用程序中的某些实体有图像(仅用于网站上的显示目的)。

我想稍后在azure上托管我的应用程序,并且我想弄清楚使用Azure Blob存储来存储所有图像还是仅将它们存储在数据库中会更好?

在网站上加载图片时,哪种表现更好?

  • SQL:Controller - > DB - > VIEW
  • Azure Blob:Controller - > Webcall到Azure DB - > VIEW

有人可以向我解释这两种解决方案的好处,以便我能够下定决心吗?

2 个答案:

答案 0 :(得分:13)

如何设计数据库存储方案是主观的,但在您的方案中需要考虑目标事项。我将解决这些问题,并留下我应该选择的""对你...

Azure存储blob专为批量"阻止"数据(如文档,图像等)。像SQL数据库这样的东西是为元数据设计的(你搜索/索引/查询的东西)。

一切都可以通过SQL数据库完成,你只需要担心SQL查询(听起来就像你已经熟悉的那样)。 SQL Server(和SQL数据库)始终能够通过其BLOB类型存储二进制内容。

虽然可以将图像存储在SQL数据库中,但您会发现数据库大小会大大增加,而不仅仅是存储可查询的元数据。虽然SQL数据库服务允许您扩展存储,但您可以以比SQL数据库服务更低的成本在blob存储(高达500TB)中找到更大的规模。如果在VM中运行SQL Server,那么您仍然具有与blob等效的存储成本(附加磁盘)以及VM成本。

存储blob本身并不提供查询语言 - 您需要知道容器和/或blob名称。因此,为了获得最佳搜索效果,您需要一个带有元数据的可查询数据库(例如SQL数据库)。

如果您将图像存储在Blob中,并通过数据库中的URI引用它们,您将能够查询数据库,找到图像的URI,然后适当地从blob存储中读取。

另请注意:使用blob,您可以提供对浏览器或应用程序的直接图像URI访问(即使blob标记为私有),这样您就可以绕过应用程序将二进制(图像)内容提供给最终用户时的层。 Blob也可以缓存在CDN中,而SQL数据库则无法对其进行缓存。

您选择的最终取决于您;我只是提供了使用每种原因的客观原因。

答案 1 :(得分:5)

BLOB便宜得多。

你也可能像BLOB一样快速转移。现在初始查找可能会更快一点,但对于大图像我认为BLOB会赢。 SQL很简单,没有针对大的东西进行优化,BLOB就是。

你可以让SQL免费提供简短的东西。