6

我正在编写一个新的应用程序,并且应用程序中的某些实体具有图像(仅用于在网站上显示)。存储图像 - SQL DB与Azure Blob存储

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

在网站上加载图像时性能更好的是什么?

  • SQL:控制器 - >数据库 - >查看
  • Azure的斑点:控制器 - > Webcall天青DB - >查看

可能有人请解释这两种解决方案的好处我,让我可以做出我的想法?

+0

我不太了解Azure的托管,数据库中的图像可能是一个有趣的话题。保持引用完整性将它们存储在数据库中是很好的,但是用它们来扩展数据库大小也不是很好。一个想法,你打算使用天蓝数据库吗?如果是这样,我的假设是存储将更便宜的托管他们在Azure Blob存储,而不是支付更大的数据库资源,但这纯粹是一个假设...... – Matt

+0

感谢马特,好点。是的,也会使用Azure DB以及blob是def便宜... :) – Nik

+0

那么我想它归结为如果性能是可以接受的,我很抱歉,但我无法衡量,因为我不使用天青。欢呼声 – Matt

回答

9

你如何设计你的数据库存储方案是主观的,但有目标在你的方案中要考虑的事情。我将解决这些问题,并将“应该选择哪一个”留给您...

Azure存储blob是为大块“块”数据(如文档,图像等)设计的。像SQL数据库是为元数据(你搜索/索引/查询)设计的。一切都可以通过SQL数据库来完成,你只需要担心SQL查询(这听起来像你已经熟悉的东西)。 SQL Server(和SQL数据库)一直有能力通过BLOB类型存储二进制内容。

虽然你可以存储您的图像在SQL数据库中,你会发现你的数据库大小增加相当多,而只是存储可查询元数据。虽然SQL数据库服务允许您扩展您的存储空间,但您会发现在较之SQL数据库服务成本更低的情况下,您可以在BLOB存储(最高500TB)中找到更大规模的存储空间。如果您在虚拟机中运行SQL Server,那么您仍将具有与blob相当的存储成本(连接磁盘)以及VM成本。

存储斑点,本身并没有提供查询语言 - 你需要知道的容器和/或BLOB名称。因此,为了优化搜索,您需要一个包含元数据的可查询数据库(例如SQL数据库)。

如果存储在斑点您的图像,并通过URI在数据库中引用它们,你就可以对查询数据库,找出图像的URI,然后适当地从Blob存储读取。

另请注意:使用blob,您将能够直接提供对浏览器或应用程序的图像URI访问权限(即使该blob被标记为私有),从而允许您绕过应用程序层向最终用户提供二进制(图像)内容时。 Blob也可以缓存在CDN中,这是SQL数据库无法做到的。

你选择哪一个最终取决于你;我只是提供了使用它们的客观原因。

+0

非常感谢您的详细解释!我会给BLOB一个去! :) – Nik

+0

@ user2118781它是怎么回事?它工作正常吗?我也决定同样的事情。我正在开发移动应用程序。 –

+0

我去BLOB存储来存储我的图像等,它完美的作品!不会这样做! – Nik

3

在BLOB中便宜得多。

您也可能将获得更快的转换为BLOB。现在,使用SQL进行初始查找可能会快一点,但对于我认为BLOB会赢的大型映像而言,可能会更快。 SQL对于大的东西并没有经过优化,而BLOB是。

你可以保持SQL免费提供短的东西。

+0

非常感谢您的详细解释!我会给BLOB一个去! :) – Nik