我正在编写一个新的应用程序,应用程序中的某些实体有图像(仅用于网站上的显示目的)。
我想稍后在azure上托管我的应用程序,并且我想弄清楚使用Azure Blob存储来存储所有图像还是仅将它们存储在数据库中会更好?
在网站上加载图片时,哪种表现更好?
有人可以向我解释这两种解决方案的好处,以便我能够下定决心吗?
答案 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免费提供简短的东西。