利用 Azure SQL 数据库解决新式数据库需求
配置好环境后,就可开始分析和测试潜在解决方案体系结构的某些组件。 在乘车场景和许多其他新式应用程序中,需要使用新式数据库来存储、处理和提供数据。 了解 Azure SQL 数据库如何满足新式应用程序的需求。
通过灵活的 Azure SQL 数据库选项进行规模调整来满足需求
新式应用程序的核心元素之一是能够轻松地纵向扩展或纵向缩减,从而正确响应工作负载的使用。 能够轻松更新和改进解决方案,加上具有确定性的自动部署,这些也是新式应用程序开发的基础要素。 此原则还使应用程序可在需要的时候仅为所需的内容付费。
Azure SQL 数据库为所有这些必需的功能都提供强大的支持。 如果需要一个永不过时、可缩放、安全且高性能的数据库,那么 Azure SQL 超大规模提供了你所需的一切内容,甚至更多。 它可扩展到 100 TB,其分布式体系结构使你能够轻松地纵向和横向扩展。这是适用于事务分析和混合事务分析工作负载的理想数据库。
若要为开发和开发人员提供支持,可使用 Azure SQL 数据库无服务器计算,它可在定义的范围内自动纵向扩展和缩减,并且可在未使用时自动暂停,让你以最经济高效的方式来开发和测试解决方案。 鉴于 Azure SQL 数据库背后的引擎是相同的,移动到 Azure SQL 数据库无服务器计算层和 Azure SQL 超大规模无需更改代码,也不需要额外的工作。
使用 GitHub Actions 支持开发工作流
由于 DevOps 实践现在非常普遍,因此新式解决方案务必要适当地支持并拥有运行正常的持续集成和持续交付/持续部署 (CI/CD) 管道。 Azure SQL 数据库本机支持 GitHub Actions,你可在准备就绪时用它来将对部署数据库的更改部署到测试和生产数据库中。 Azure SQL 数据库操作使用基于状态的方法。 数据的 DevOps 是一个有趣的主题,你可在模块末尾附上供参考的“公开的数据”剧集中了解详细信息。
新式数据库的另一项关键要求是能够处理和支持最新的开发趋势和创新。 Azure SQL 数据库提供许多功能,让你能够对给定用例使用最好的技术或模型。 我们在模块末尾的一篇博客文章中,提供了所有可用功能的概述。
使用 Azure SQL 数据库为应用程序提供未来保障
在应用程序的生存期内,你需要尽可能高效地使用不同的技术。 例如,你可能想要使用图形模型来轻松地跟踪复杂的网络关系(例如社交网络或电网)并轻松建模。 或者,你可能需要快速聚合大量数据来计算特定值的增长率。 在所有这些以及其他许多情况下,Azure SQL 数据库都提供保障。 它支持图形模型、列存储索引,甚至支持内存优化表来实现最高吞吐量(这些表是编译后的数据结构,随后在进程中加载以实现高性能)。
对于乘车场景,你将使用 Azure SQL 数据库无服务器计算层,由于它支持自动缩放和自动暂停,因此你只需为所需的和使用的内容付费。 你将使用 GitHub Actions 创建一个部署管道来根据需要更新数据库。 此场景还需要其他一些功能。 下面对其进行详细介绍。 在下一个练习中,你将亲自体验这些功能。
使用本机 JSON 功能处理 JSON 数据
通过 Azure SQL 数据库,开发人员可使用 JSON 来与数据库交换数据和存储 JSON 文档。 这样,就可将 JSON 用作一种高效传输机制来将几组数据(如数组和对象)发送到存储过程进行处理。 获得 JSON 文档后,可使用本机 JSON 函数(如 JSON_VALUE、JSON_MODIFY 或 OPENJSON)轻松地对其进行操作。 下面是一个示例:
DECLARE @json NVARCHAR(MAX) = '[{"user":{"id": 1, "name": "Anna"}},{"user":{"id": 2, "name": "Davide"}}]'
SELECT * FROM
OPENJSON(@json) WITH (
[Id] INT '$.user.id',
[Name] NVARCHAR(100) '$.user.name'
)
模块末尾有更多示例展示如何在 Azure SQL 数据库中使用 JSON。
使用本机地理空间引擎分析地理空间数据
Azure SQL 数据库具有本机地理空间引擎,你可用它来执行地理空间查询,而无需安装外部库或移动数据,如果数据量很大,安装或移动会产生昂贵成本。 Azure SQL 数据库完全支持开放地理空间信息联盟 (OGC) 标准,因此可通过 OpenLayers 等库使用导出的数据。
下面的示例演示了如何创建一个多边形,它将充当你在乘车场景中的地理围栏,并演示如何检查是否有一个充当公交车实时数据点的点在这个多边形中。
-- Microsoft Building 44
declare @bldg44 as geography = geography::STGeomFromText('POLYGON((-122.13403149305233 47.64136608877112,-122.13398769073248 47.64058891712273,-122.13319924946629 47.64011342667547,-122.13285369830483 47.640106868176076,-122.13254221532335 47.640834858789844,-122.13257628383073 47.6410086568205,-122.13334039023833 47.64144150986729,-122.13403149305233 47.64136608877112))', 4326)
-- A point you want to check
declare @p as geography = geography::STPointFromText('POINT(-122.13315058040392 47.64101193601368)', 4326)
-- Is the point within the perimeter?
select @p.STWithin(@bldg44)
由于位置(例如 POINT(-122.13315058040392 47.64101193601368)
)的文本格式是一种标准,称为知名文本 (WKT) 格式,因此只需复制粘贴字符串即可看到投影到地图上的形状。 在下一个练习中,你将使用 OpenStreetMap WKT 操场自行测试。