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

标签 sql azure azure-sql-database azure-storage azure-blob-storage

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

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

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

  • SQL: Controller -> 数据库 -> View
  • Azure Blob: Controller -> 对 Azure DB 的 Web 调用 -> 查看

有人可以向我解释一下这两种解决方案的好处,以便我做出决定吗?

最佳答案

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

Azure 存储 blob 专为批量“ block ”数据(例如文档、图像等)而设计。 SQL 数据库之类的东西是为元数据(您搜索/索引/查询的内容)而设计的。

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

虽然您可以将图像存储在 SQL 数据库中,但您会发现与仅存储可查询元数据相比,数据库大小显着增加。虽然 SQL 数据库服务允许您扩展存储,但您会发现 Blob 存储规模更大(高达 500TB),而且成本比 SQL 数据库服务更低。如果您在 VM 中运行 SQL Server,那么您仍然需要与 Blob 相当的存储成本(附加磁盘)以及 VM 成本。

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

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

另请注意:使用 Blob,您将能够提供对浏览器或应用程序等的直接图像 URI 访问(即使 Blob 被标记为私有(private)),这样您就可以在以下情况下绕过应用程序层:向最终用户提供二进制(图像)内容。 Blob 还可以缓存在 CDN 中,而 SQL 数据库则无法做到这一点。

你的选择最终取决于你自己;我只是提供了使用每个的客观原因。

关于sql - 存储图像 - SQL DB 与 Azure Blob 存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39650052/

相关文章:

java - 获取预选结果

sql - 在单个 SQL 表中表示记录之间的多对多关系的最佳方式是什么?

php - 当我加入另一个表时发现查询错误

azure - 设置 Windows 服务总线 1.1 管理门户

azure - 如何在 NewRelic 中监视 Azure 辅助角色?

regex - 文件名的一部分作为 Hive 表中的列

azure - azure 中的 View sys.resource_usage 和 sys.resource_stats 中没有数据

database - Azure 上的主数据库创建用户失败

sql - 如何在 PostgreSQL 中查询 JSON 列以获取唯一对象值

azure-sql-database - 将 DACPAC 部署到 SQL Azure 服务器时出错