新式解决方案处理各种数据,例如事务、事件、文档、遥测、二进制资产和分析事实。 单个数据存储很少能有效地满足所有访问模式。 大多数生产系统采用多语言持久性,这意味着选择多种存储模型。 本文集中了 Azure 上可用的主数据存储模型的规范定义,并提供比较表,以在选择特定服务之前加速模型选择。
使用以下步骤选择数据模型:
确定工作负荷访问模式,例如点读取、聚合、全文、相似性、时间窗口扫描和对象传递。
将模式映射到以下部分中的存储模型。
创建实现这些模型的 Azure 服务的入围名单。
应用评估条件,例如一致性、延迟、缩放、治理和成本。
仅当访问模式或生命周期明显分歧时,才合并模型。
如何使用本指南
每个模型部分都包含一个简洁的定义、典型的工作负荷、数据特征、示例方案和指向代表性 Azure 服务的链接。 每个部分还包括一个表,可帮助你为用例选择合适的 Azure 服务。 在某些情况下,可以使用其他文章来提供有关 Azure 服务选项的更明智的选择。 相应的模型部分引用了这些文章。
两个比较表汇总了非关系模型特征,帮助你快速评估选项,而无需跨部分重复内容。
典型的 Azure 服务示例
关系数据库管理系统使用写入架构将数据组织到规范化表中。 它们强制执行完整性并支持原子性、一致性、隔离和持久性(ACID)事务和丰富的 SQL 查询。
优势:
多行事务一致性、复杂联接、强关系约束和用于报告、管理和治理的成熟工具。
考虑:
水平缩放通常需要分片或分区,规范化会增加读取密集型非规范化视图的联接成本。
工作量:
订单管理、库存跟踪、财务账本记录、计费和作报告。
为关系数据存储选择 Azure 服务
SQL 数据库
是用于使用 SQL Server 引擎的新式云应用程序的托管关系数据库。
Azure SQL 托管实例
是云中一个几乎完整的 SQL Server 环境,非常适合一键迁移。
SQL 数据库(超大规模)
是一个高度可缩放的 SQL 层,专为具有快速自动缩放和快速备份的大型工作负荷而设计。
Azure Database for PostgreSQL 是一种托管的 PostgreSQL
服务,支持开放源代码扩展和灵活的部署选项。
Azure Database for MySQL
是用于 Web 应用和开源工作负载的托管 MySQL 数据库。
Fabric 中的 SQL 数据库
是基于 SQL 数据库的开发人员友好事务数据库,可用于在 Fabric 中轻松创建作数据库。
使用下表帮助确定哪些 Azure 服务满足用例要求。
非关系数据存储
非关系数据库(也称为
NoSQL 数据库
)针对灵活的架构、水平缩放以及特定的访问或聚合模式进行优化。 它们通常放宽关系行为的一些方面,例如架构刚性和事务范围,以提高可伸缩性或敏捷性。
文档数据存储
使用文档数据存储来存储半结构化文档,通常采用 JSON 格式,其中每个文档都包含命名字段和数据。 数据可以是简单值或复杂元素,例如列表和子集合。 按文档架构灵活性可实现渐进式演变。
优势:
自然应用程序对象映射、非规范化聚合、多字段索引
考虑:
文档大小增长、选择性事务范围,需要对大规模查询进行仔细的数据形状设计
工作量:
产品目录、内容管理、配置文件存储
为文档数据存储选择 Azure 服务
Azure Cosmos DB for NoSQL
是一个无架构的多区域 NoSQL 数据库,具有低延迟读取和写入。
Azure Cosmos DB for MongoDB
是一个全球分布式数据库,具有 MongoDB 线路协议兼容性和自动缩放。
Azure Cosmos DB in Fabric
是一种无架构的 NoSQL 数据库,具有低延迟的读取和写入、简化的管理以及内置的 Fabric 分析。
使用下表帮助确定哪些 Azure 服务满足用例要求。
列系列数据库(也称为
宽列数据库
)将稀疏数据存储在行中,并将动态列组织到列系列以支持共同访问。 列方向改进了对所选列集的扫描。
优势:
高写入吞吐量、高效检索宽数据集或稀疏数据集、系列中的动态架构
考虑:
行键设计和列族设计,二级索引支持各不相同,查询灵活性低于关系型数据库
工作负载:
物联网(IoT)遥测、个性化、分析预先聚合、时序型长数据(当不使用专用时序数据库时)
为列系列数据存储选择 Azure 服务
适用于 Apache Cassandra 的 Azure 托管实例
是开源 Apache Cassandra 群集的托管服务。
Azure HDInsight 上的 Apache HBase
是一种可缩放的 NoSQL 存储,适用于基于 Apache HBase 和 Hadoop 生态系统构建的大数据工作负载。
Azure 数据资源管理器(Kusto)
是使用 Kusto 查询语言(KQL)的遥测、日志和时序数据的分析引擎。
使用下表帮助确定哪些 Azure 服务满足用例要求。
键值数据存储
键值数据存储将每个数据值与唯一键相关联。 大多数键值存储仅支持简单的查询、插入和删除作。 若要部分或完全修改一个值,应用程序必须重写该值的全部现有数据。 在大多数实现中,读取或写入单个值是原子操作。
优势:
简单性、低延迟、线性可伸缩性
考虑:
查询表达能力有限,需要重新设计以实现基于值的查找,大规模值覆盖的成本高
工作量:
缓存、会话、功能标志、用户配置文件、建议查找
为键值数据存储选择 Azure 服务
Azure 托管 Redis 是基于最新的 Redis Enterprise 版本的托管内存数据存储,提供低延迟和高吞吐量。
Azure Cosmos DB for Table
是经过优化的键值存储,可快速访问结构化 NoSQL 数据。
Azure Cosmos DB for NoSQL
是文档数据存储,经过优化,可以快速访问结构化 NoSQL 数据并提供水平可伸缩性。
使用下表帮助确定哪些 Azure 服务满足用例要求。
工作量:
社交网络、欺诈团伙、知识图、供应链依赖项
选择图形数据存储的 Azure 服务
使用
SQL Server 图形扩展
来存储图形数据。 图形扩展扩展了 SQL Server、SQL 数据库和 SQL 托管实例的功能,以便直接在关系数据库中使用图形结构对复杂关系进行建模和查询。
时序数据存储
时序数据存储管理按时间组织的一组值。 它们支持基于时间的查询和聚合等功能,并针对近实时引入和分析大量数据进行优化。
优势:
压缩、窗口查询性能、乱序数据引入处理
考虑:
标签基数管理、保留成本、降采样策略
工作量:
IoT 传感器指标、应用程序遥测、监视、工业数据
为时序数据存储选择 Azure 服务
使用
Azure 数据资源管理器
存储时序数据。 Azure 数据资源管理器是一个托管的高性能大数据分析平台,可让你轻松近乎实时地分析大量数据。
对象数据存储
存储大型二进制或半结构化对象,并包括很少更改或保持不可变的元数据。
优势:
几乎无限制的规模、分层成本、持续性、并行读取功能
考虑:
整个对象操作,元数据查询受限,最终列出行为
工作量:
媒体资产、备份、Data Lake 原始区域、日志存档
为对象数据存储选择 Azure 服务
Data Lake Storage
是一种大数据优化的对象存储,它结合了分层命名空间和 HDFS 兼容性,用于高级分析和大规模数据处理。
Blob 存储
是用于非结构化数据(如图像、文档和备份)的可缩放对象存储,包括用于成本优化的分层访问。
使用下表帮助确定哪些 Azure 服务满足用例要求。
基线高度可用的区域冗余 Web 应用程序
体系结构使用 SQL 数据库作为其关系数据存储。
使用 Azure 容器应用和 Dapr 体系结构部署微服务
使用 SQL 数据库、Azure Cosmos DB 和 Azure Redis 缓存作为数据存储。
Azure 体系结构中的自动文档分类
使用 Azure Cosmos DB 作为其数据存储。