你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
新式解决方案处理各种数据,例如事务、事件、文档、遥测、二进制资产和分析事实。 单个数据存储很少能有效地满足所有访问模式。 大多数生产系统采用多语言持久性,这意味着选择多种存储模型。 本文集中了 Azure 上可用的主数据存储模型的规范定义,并提供比较表,以在选择特定服务之前加速模型选择。
使用以下步骤选择数据模型:
确定工作负荷访问模式,例如点读取、聚合、全文、相似性、时间窗口扫描和对象传递。
将模式映射到以下部分中的存储模型。
创建实现这些模型的 Azure 服务的入围名单。
应用评估条件,例如一致性、延迟、缩放、治理和成本。
仅当访问模式或生命周期明显分歧时,才合并模型。
如何使用本指南
每个模型部分都包含一个简洁的定义、典型的工作负荷、数据特征、示例方案和指向代表性 Azure 服务的链接。 每个部分还包括一个表,可帮助你为用例选择合适的 Azure 服务。 在某些情况下,可以使用其他文章来提供有关 Azure 服务选项的更明智的选择。 相应的模型部分引用了这些文章。
两个比较表汇总了非关系模型特征,帮助你快速评估选项,而无需跨部分重复内容。
分类概述
| 类别 | 主要用途 | 典型的 Azure 服务示例 |
|---|---|---|
| 关系数据库(OLTP) | 一致的事务操作 | Azure SQL 数据库、Azure Database for PostgreSQL 或 Azure Database for MySQL |
| 非关系,如文档、键值、列系列和图形 | 灵活架构或以关系为中心的工作负荷 | Azure Cosmos DB API、Azure 托管 Redis、托管 Cassandra 或 HBase |
| 时序 | 高引入时间戳指标和事件 | Azure 数据资源管理器 |
| 对象和文件 | 大型二进制或半结构化文件存储 | Azure Blob 存储或 Azure 数据湖存储 |
| 搜索和索引 | 全文和多字段相关性、辅助索引 | Azure AI 搜索 |
| Vector | 语义相似性或近似最近邻(ANN)相似性 | Azure AI 搜索或 Azure Cosmos DB 变体 |
| 分析、联机分析处理(OLAP)、大规模并行处理(MPP) | 大规模历史聚合或商业智能(BI) | Microsoft Fabric、Azure Synapse Analytics、Azure 数据资源管理器、Azure Analysis Services 或 Azure Databricks |
注释
单个服务可能提供多个模型,也称为 多模型。 选择最适合的模型,而不是以导致操作复杂化的方式组合模型。
关系数据存储
关系数据库管理系统使用写入架构将数据组织到规范化表中。 它们强制执行完整性并支持原子性、一致性、隔离和持久性(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 服务满足用例要求。
| 服务 | 最适用于 | 主要功能 | 示例用例 |
|---|---|---|---|
| SQL 数据库 | 云原生应用 | 托管、弹性池、超大规模、内置高可用性、高级安全性 | 使用可缩放的 SQL 后端构建现代软件即服务(SaaS)应用程序 |
| SQL 托管实例 | 旧版企业应用 | 完整的 SQL Server 兼容性、迁移部署支持、虚拟网络、高级审核 | 使用最少的代码更改迁移本地 SQL Server 应用 |
| SQL 数据库 (超大规模) | 全球分布 | 多区域读取可伸缩性、异地复制、快速自动缩放 | 提供需要高读取吞吐量的全局分布式应用 |
| Azure Database for PostgreSQL | 开源分析工作负载 | PostGIS、超大规模、灵活服务器、开源扩展 | 使用 PostgreSQL 和 PostGIS 开发地理空间分析应用 |
| Azure Database for MySQL | 轻型 Web 应用 | 灵活服务器,开源兼容性,经济高效 | 托管基于 WordPress 的电子商务网站 |
| Fabric 中的 SQL 数据库 | Fabric 生态系统中的联机事务处理(OLTP)工作负荷 | 基于 SQL 数据库引擎构建,可缩放且集成到 Fabric 中 | 在包含本机矢量搜索功能的可作关系数据模型上生成 AI 应用 |
非关系数据存储
非关系数据库(也称为 NoSQL 数据库)针对灵活的架构、水平缩放以及特定的访问或聚合模式进行优化。 它们通常放宽关系行为的一些方面,例如架构刚性和事务范围,以提高可伸缩性或敏捷性。
文档数据存储
使用文档数据存储来存储半结构化文档,通常采用 JSON 格式,其中每个文档都包含命名字段和数据。 数据可以是简单值或复杂元素,例如列表和子集合。 按文档架构灵活性可实现渐进式演变。
优势: 自然应用程序对象映射、非规范化聚合、多字段索引
考虑: 文档大小增长、选择性事务范围,需要对大规模查询进行仔细的数据形状设计
工作量: 产品目录、内容管理、配置文件存储
为文档数据存储选择 Azure 服务
Azure Cosmos DB for NoSQL 是一个无架构的多区域 NoSQL 数据库,具有低延迟读取和写入。
Azure Cosmos DB for MongoDB 是一个全球分布式数据库,具有 MongoDB 线路协议兼容性和自动缩放。
Azure Cosmos DB in Fabric 是一种无架构的 NoSQL 数据库,具有低延迟的读取和写入、简化的管理以及内置的 Fabric 分析。
使用下表帮助确定哪些 Azure 服务满足用例要求。
| 服务 | 最适用于 | 主要功能 | 示例用例 |
|---|---|---|---|
| 用于 NoSQL 的 Azure Cosmos DB | 支持类似 SQL 的查询的自定义 JSON 文档模型 | 丰富的查询语言,多区域写入,过期时间(TTL),变更日志 | 构建支持灵活架构的多租户 SaaS 平台 |
| 用于 MongoDB 的 Azure Cosmos DB | 使用 MongoDB 驱动程序或以 JSON 为中心的 API 的应用 | 全局分发、自动缩放、原生 MongoDB 线路协议 | 将 Node.js 应用从 MongoDB 迁移到 Azure |
| Fabric 中的 Azure Cosmos DB | 对 NoSQL 数据的实时分析 | 自动化通过 Fabric 集成将提取、转换和加载过程应用于 OneLake | 包含实时分析仪表板的事务应用 |
列族数据存储
列系列数据库(也称为 宽列数据库)将稀疏数据存储在行中,并将动态列组织到列系列以支持共同访问。 列方向改进了对所选列集的扫描。
优势: 高写入吞吐量、高效检索宽数据集或稀疏数据集、系列中的动态架构
考虑: 行键设计和列族设计,二级索引支持各不相同,查询灵活性低于关系型数据库
工作负载: 物联网(IoT)遥测、个性化、分析预先聚合、时序型长数据(当不使用专用时序数据库时)
为列系列数据存储选择 Azure 服务
适用于 Apache Cassandra 的 Azure 托管实例 是开源 Apache Cassandra 群集的托管服务。
Azure HDInsight 上的 Apache HBase 是一种可缩放的 NoSQL 存储,适用于基于 Apache HBase 和 Hadoop 生态系统构建的大数据工作负载。
Azure 数据资源管理器(Kusto) 是使用 Kusto 查询语言(KQL)的遥测、日志和时序数据的分析引擎。
使用下表帮助确定哪些 Azure 服务满足用例要求。
| 服务 | 最适用于 | 主要功能 | 示例用例 |
|---|---|---|---|
| 适用于 Apache Cassandra 的 Azure 托管实例 | 新的和已迁移的 Cassandra 工作负载 | 托管的本机 Apache Cassandra | 支持 Cassandra 兼容性的 IoT 设备遥测数据接收 |
| Apache HBase on HDInsight | Hadoop 生态系统,批处理分析 | Hadoop 分布式文件系统 (HDFS) 集成、大规模批处理 | 在制造工厂中批处理传感器数据 |
| Azure 数据资源管理器(Kusto) | 大规模摄入遥测数据、时序分析 | KQL、快速即席查询、时间窗口函数 | 应用程序日志和指标的实时分析 |
键值数据存储
键值数据存储将每个数据值与唯一键相关联。 大多数键值存储仅支持简单的查询、插入和删除作。 若要部分或完全修改一个值,应用程序必须重写该值的全部现有数据。 在大多数实现中,读取或写入单个值是原子操作。
优势: 简单性、低延迟、线性可伸缩性
考虑: 查询表达能力有限,需要重新设计以实现基于值的查找,大规模值覆盖的成本高
工作量: 缓存、会话、功能标志、用户配置文件、建议查找
为键值数据存储选择 Azure 服务
Azure 托管 Redis 是基于最新的 Redis Enterprise 版本的托管内存数据存储,提供低延迟和高吞吐量。 Azure Cosmos DB for Table 是经过优化的键值存储,可快速访问结构化 NoSQL 数据。
Azure Cosmos DB for NoSQL 是文档数据存储,经过优化,可以快速访问结构化 NoSQL 数据并提供水平可伸缩性。
使用下表帮助确定哪些 Azure 服务满足用例要求。
| 服务 | 最适用于 | 主要功能 | 示例用例 |
|---|---|---|---|
| Azure 托管 Redis | 高速缓存、会话状态、发布-订阅 | 内存中存储、子内存延迟、Redis 协议 | 缓存电子商务网站的产品页面 |
| 用于表的 Azure Cosmos DB | 迁移现有的 Azure 表存储工作负载 | 表格存储 API 兼容性 | 在移动应用中存储用户首选项和设置 |
| 用于 NoSQL 的 Azure Cosmos DB | 大规模和高可用性的高速缓存 | 无架构、多区域、自动缩放 | 缓存、会话状态、服务层 |
图形数据存储
图形数据库将信息存储为节点和边缘。 边缘定义关系,节点和边缘可以具有类似于表列的属性。 可以分析实体之间的连接,例如员工和部门。
优势: 关系优先查询模式,高效的变量深度遍历
考虑: 如果关系很浅,会产生额外开销,且需要仔细设计性能,不适合批量分析扫描
工作量: 社交网络、欺诈团伙、知识图、供应链依赖项
选择图形数据存储的 Azure 服务
使用 SQL Server 图形扩展 来存储图形数据。 图形扩展扩展了 SQL Server、SQL 数据库和 SQL 托管实例的功能,以便直接在关系数据库中使用图形结构对复杂关系进行建模和查询。
时序数据存储
时序数据存储管理按时间组织的一组值。 它们支持基于时间的查询和聚合等功能,并针对近实时引入和分析大量数据进行优化。
优势: 压缩、窗口查询性能、乱序数据引入处理
考虑: 标签基数管理、保留成本、降采样策略
工作量: IoT 传感器指标、应用程序遥测、监视、工业数据
为时序数据存储选择 Azure 服务
使用 Azure 数据资源管理器 存储时序数据。 Azure 数据资源管理器是一个托管的高性能大数据分析平台,可让你轻松近乎实时地分析大量数据。
对象数据存储
存储大型二进制或半结构化对象,并包括很少更改或保持不可变的元数据。
优势: 几乎无限制的规模、分层成本、持续性、并行读取功能
考虑: 整个对象操作,元数据查询受限,最终列出行为
工作量: 媒体资产、备份、Data Lake 原始区域、日志存档
为对象数据存储选择 Azure 服务
Data Lake Storage 是一种大数据优化的对象存储,它结合了分层命名空间和 HDFS 兼容性,用于高级分析和大规模数据处理。
Blob 存储 是用于非结构化数据(如图像、文档和备份)的可缩放对象存储,包括用于成本优化的分层访问。
使用下表帮助确定哪些 Azure 服务满足用例要求。
| 服务 | 最适用于 | 主要功能 | 示例用例 |
|---|---|---|---|
| Data Lake Storage | 大数据分析和分层数据 | HDFS、分层命名空间、针对分析进行优化 | 使用 Azure Synapse Analytics 或 Azure Databricks 存储和查询 PB 级结构化和非结构化数据 |
| Blob 存储 | 常规用途对象存储 | 平面命名空间、简单的 REST API 和分层存储,其中包括热、冷和存档 | 托管映像、文档、备份和静态网站内容 |
搜索和索引数据库
搜索引擎数据库允许应用程序搜索外部数据存储中的信息。 搜索引擎数据库可以为大量数据编制索引,并提供对这些索引的近实时访问。
优势: 全文查询, 评分, 语言分析, 模糊匹配
考虑: 索引的最终一致性,单独的引入或索引管道,大型索引更新的成本
工作量: 网站或产品搜索, 日志搜索, 元数据筛选, 多属性发现
选择用于搜索数据存储的 Azure 服务
有关详细信息,请参阅 在 Azure 中选择搜索数据存储。
矢量搜索数据存储
矢量搜索数据存储和检索数据的高维向量表示形式,通常由机器学习模型生成。
优势: 语义搜索、ANN 算法
考虑: 索引复杂性、存储开销、延迟与准确性、集成挑战
工作量: 语义文档搜索、建议引擎、图像和视频检索、欺诈和异常情况检测
为矢量搜索数据存储选择 Azure 服务
有关详细信息,请参阅选择 Azure 矢量搜索服务。
分析数据存储
分析数据存储存储大数据,并在分析管道生命周期内保留这些数据。
优势: 可缩放的计算和存储,支持 SQL 和 Spark,与 BI 工具、时序和遥测分析集成
考虑: 业务流程的成本和复杂性、临时工作负荷的查询延迟、跨多个数据域的治理
工作负载: 企业报告、大数据分析、遥测聚合、运营仪表板、数据科学管道
选择用于分析数据存储的 Azure 服务
有关详细信息,请参阅 在 Azure 中选择分析数据存储。
比较特征(核心非关系模型)
| 方面 | 文档 | 列系列 | 键值 | Graph |
|---|---|---|---|---|
| 标准化 | 非规范化 | 非规范化 | 去规范化 | 规范化关系 |
| 模式方法 | 读取时架构 | 定义列系列,读取时列架构 | 读取时架构 | 读取时架构 |
| 一致性(典型) | 每个项目都可调整 | 对于每行或系列 | 对于每个密钥 | 对于每条边或遍历语义 |
| 原子性范围 | 文档 | 行或系列,具体取决于表实现 | 单个键 | 图形事务(变化) |
| 锁定和并发 | 乐观 (ETag) | 悲观或乐观,取决于具体的实现情况 | 乐观(键) | 乐观(模式) |
| 访问模式 | 聚合体(实体) | 宽稀疏集合 | 按键查找点 | 关系遍历 |
| 索引 | 主要和次要 | 主要和有限的辅助数据库 | 主键 | 主要和有时次要 |
| 数据形状 | 灵活的层次结构 | 稀疏矩阵宽格式 | 不透明值 | 节点和边缘 |
| 稀疏/广泛适配性 | 是/是 | 是/是 | Yes/No | 否/否 |
| 典型基准大小 | 中小型 | 中大型 | 小型 | 小型 |
| 缩放维度 | 分区计数 | 分区和列族宽度 | 键空间 | 节点或边缘计数 |
比较特征(专用非关系模型)
| 方面 | 时序 | 对象(blob) | 搜索/索引 |
|---|---|---|---|
| 标准化 | 规范化 | 非规范化 | 非规范化 |
| Schema | 读取时架构(标记) | 不透明值和元数据 | 写入时架构(索引映射) |
| 原子性范围 | N/A (追加) | 物体 | 对于每个文档操作或索引操作 |
| 访问模式 | 时间切片扫描、窗口聚合 | 对整个对象的操作 | 文本查询和筛选器 |
| 索引 | 次要时间和可选项 | 仅键(路径) | 颠倒的和可选的维度 |
| 数据形状 | 表格(时间戳、标记、值) | 具有元数据的二进制或数据块 | 标记化文本和结构化字段 |
| 写入个人资料 | 高速率追加 | 批量更新或不经常更新 | 批处理或流处理索引 |
| 阅读个人资料 | 聚合数据范围 | 完整或部分下载 | 排名结果集 |
| 增长驱动因素 | 事件速率乘以保留率 | 对象计数和大小 | 索引的文档量 |
| 一致性容差 | 最终用于后期数据 | 每个对象的读后写入 | 新文档的最终状态 |
在模型之间进行选择(启发式)
| 需要 | 偏好 |
|---|---|
| 严格的多实体事务 | 关系 |
| 不断演变的聚合形状,以 JSON 为中心的 API | 文档 |
| 极端低延迟的键查找或缓存 | 键值 |
| 宽、稀疏、写入密集型遥测 | 列系列或时序 |
| 深度关系遍历 | Graph |
| 大规模历史分析扫描 | 数据分析或 OLAP |
| 大型非结构化二进制文件或湖区域 | 物体 |
| 全文相关性和筛选 | 搜索和索引 |
| 高速引入时间戳指标与窗口查询 | 时序 |
| 快速相似性(语义或向量) | 矢量搜索 |
合并模型并避免陷阱
当以下方案适用时,请使用多个模型:
- 访问模式不同,例如点查找与宽分析扫描与全文相关性。
- 生命周期和保留期不同,例如不可变的原始与精心策划的结构。
- 延迟与吞吐量要求冲突。
避免过早碎片化。
- 当服务仍满足性能、规模和治理目标时,请使用一个服务。
- 集中共享分类逻辑,并避免跨存储重复转换管道,除非必要。
观看以下常见反模式:
- 多个微服务共享一个数据库,用于创建耦合。
- 团队在没有运营成熟度的情况下添加了另一个模型,例如没有监控或备份。
- 搜索索引将成为主数据存储,这会导致滥用。
何时重新评估模型选择
| 信号 | 可能的作 |
|---|---|
| 在文档存储上增加即席联接 | 引入关系型读取模型 |
| 由于分析聚合,搜索索引的 CPU 使用率较高 | 转移至分析引擎 |
| 大型非规范化文档创建部分更新争用 | 重新调整聚合或拆分 |
| 列系列存储上的时间窗口查询速度缓慢 | 采用专为用途设计的时序数据库 |
| 随着图遍历的深度增加,点查找的延迟会升高。 | 添加衍生具体化视图 |
后续步骤
相关资源
使用以下文章选择专用数据存储:
了解使用本文中的 Azure 服务的参考体系结构:
- 基线高度可用的区域冗余 Web 应用程序体系结构使用 SQL 数据库作为其关系数据存储。
- 使用 Azure 容器应用和 Dapr 体系结构部署微服务使用 SQL 数据库、Azure Cosmos DB 和 Azure Redis 缓存作为数据存储。
- Azure 体系结构中的自动文档分类使用 Azure Cosmos DB 作为其数据存储。