存储图像 - SQL 数据库与 Azure Blob 存储
Storing images - SQL DB vs Azure Blob storage
我现在正在编写一个新的应用程序,应用程序中的某些实体有图像(仅用于在网站上显示)。
我想稍后在 azure 上托管我的应用程序,我想弄清楚是使用 Azure Blob 存储来存储所有图像还是只将它们存储在数据库中更好?
在网站上加载图像时,什么是更好的性能?
- SQL:控制器 -> 数据库 -> 视图
- Azure Blob:控制器 -> 对 Azure 数据库的网络调用 -> 查看
有人可以向我解释这两种解决方案的好处,以便我下定决心吗?
BLOB 便宜得多。
您也可能以 BLOB 的形式进行更快的传输。现在使用 SQL 初始查找可能会快一点,但对于大图像,我认为 BLOB 会赢。 SQL 显然没有针对大型内容进行优化,而 BLOB 是。
而且你可以SQL自由地提供简短的东西。
如何设计数据库存储方案是主观的,但在您的方案中需要考虑 objective 事项。我会解决这些问题,然后将 "which should I choose" 留给你...
Azure 存储 blob 专为大容量 "block" 数据(例如文档、图像等)而设计。 SQL 数据库之类的东西是为元数据设计的(你 search/index/query 的东西)。
一切都可以通过 SQL 数据库完成,您只需要担心 SQL 查询(听起来您已经很熟悉了)。 SQL 服务器(和 SQL 数据库)始终能够通过其 BLOB 类型存储二进制内容。
虽然您 可以 将图像存储在 SQL 数据库中,但您会发现与仅存储可查询元数据相比,您的数据库大小会大大增加。虽然 SQL 数据库服务允许您扩展存储,但您会发现比 SQL 数据库服务成本更低的 blob 存储规模更大(高达 500TB)。如果您 运行 SQL 服务器在 VM 中,那么您的存储成本(附加磁盘)仍然相当于 blob,以及 VM 成本。
存储 blob 本身不提供查询语言 - 您需要知道容器 and/or blob 名称。因此,为了优化搜索,您需要一个包含元数据的可查询数据库(例如 SQL 数据库)。
如果您将图像存储在 blob 中,并通过数据库中的 URI 引用它们,您将能够查询数据库,找到图像的 URI,然后适当地从 blob 存储中读取。
另请注意:使用 blob,您将能够提供对浏览器或应用程序的直接图像 URI 访问(即使 blob 被标记为私有),这样您就可以绕过您的应用程序向最终用户交付二进制(图像)内容时的分层。 Blob 也可以缓存在 CDN 中,这是您无法使用 SQL 数据库实现的。
你最终选择哪个取决于你;我只是提供了 objective 个使用理由。
我现在正在编写一个新的应用程序,应用程序中的某些实体有图像(仅用于在网站上显示)。
我想稍后在 azure 上托管我的应用程序,我想弄清楚是使用 Azure Blob 存储来存储所有图像还是只将它们存储在数据库中更好?
在网站上加载图像时,什么是更好的性能?
- SQL:控制器 -> 数据库 -> 视图
- Azure Blob:控制器 -> 对 Azure 数据库的网络调用 -> 查看
有人可以向我解释这两种解决方案的好处,以便我下定决心吗?
BLOB 便宜得多。
您也可能以 BLOB 的形式进行更快的传输。现在使用 SQL 初始查找可能会快一点,但对于大图像,我认为 BLOB 会赢。 SQL 显然没有针对大型内容进行优化,而 BLOB 是。
而且你可以SQL自由地提供简短的东西。
如何设计数据库存储方案是主观的,但在您的方案中需要考虑 objective 事项。我会解决这些问题,然后将 "which should I choose" 留给你...
Azure 存储 blob 专为大容量 "block" 数据(例如文档、图像等)而设计。 SQL 数据库之类的东西是为元数据设计的(你 search/index/query 的东西)。
一切都可以通过 SQL 数据库完成,您只需要担心 SQL 查询(听起来您已经很熟悉了)。 SQL 服务器(和 SQL 数据库)始终能够通过其 BLOB 类型存储二进制内容。
虽然您 可以 将图像存储在 SQL 数据库中,但您会发现与仅存储可查询元数据相比,您的数据库大小会大大增加。虽然 SQL 数据库服务允许您扩展存储,但您会发现比 SQL 数据库服务成本更低的 blob 存储规模更大(高达 500TB)。如果您 运行 SQL 服务器在 VM 中,那么您的存储成本(附加磁盘)仍然相当于 blob,以及 VM 成本。
存储 blob 本身不提供查询语言 - 您需要知道容器 and/or blob 名称。因此,为了优化搜索,您需要一个包含元数据的可查询数据库(例如 SQL 数据库)。
如果您将图像存储在 blob 中,并通过数据库中的 URI 引用它们,您将能够查询数据库,找到图像的 URI,然后适当地从 blob 存储中读取。
另请注意:使用 blob,您将能够提供对浏览器或应用程序的直接图像 URI 访问(即使 blob 被标记为私有),这样您就可以绕过您的应用程序向最终用户交付二进制(图像)内容时的分层。 Blob 也可以缓存在 CDN 中,这是您无法使用 SQL 数据库实现的。
你最终选择哪个取决于你;我只是提供了 objective 个使用理由。