你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用计算机系统管理事务数据称为联机事务处理(OLTP)。 OLTP 系统在组织的日常运营中发生业务交互时对其进行记录,并且支持对该数据进行查询来做出推断。
事务数据
事务数据是指一种信息,用于跟踪与组织活动相关的交互。 这些交互通常是业务事务,如从客户收到的付款、对供应商进行的付款、从库存移动的产品、接受的订单或交付的服务。 表示事务本身的事务事件通常包含时间维度、一些数值和对其他数据的引用。
事务通常需要原子性和一致性。 原子性意味着整个事务始终作为一个工作单元成功或失败,永远不会处于半完成状态。 如果无法完成事务,数据库系统必须回滚作为该事务的一部分完成的任何步骤。 在传统的关系数据库管理系统(RDBMS)中,当事务无法完成时,会自动回滚。 一致性意味着事务始终让数据处于有效状态。 这些事务是原子性和一致性的非正式描述。 这些属性有更正式的定义,例如原子、一致、独立和持久(ACID)。
事务数据库可以使用各种锁定策略(例如悲观锁定)来支持事务的强一致性。 这些策略有助于确保所有数据在工作负荷上下文中保持一致,供所有用户和进程使用。
使用事务数据的最常见部署体系结构是三层体系结构中的数据存储层。 三层体系结构通常由表示层、业务逻辑层和数据存储层组成。 相关的部署体系结构是 N 层 体系结构,该体系结构可以有多个中间层处理业务逻辑。
事务数据的典型特征
事务数据往往具有以下特征。
| 要求 | 说明 |
|---|---|
| 标准化 | 高度规范化 |
| 架构 | 写入时架构,强制实施 |
| 一致性 | 强一致性,保证 ACID |
| 完整性 | 高完整性 |
| 使用事务 | 是 |
| 锁定策略 | 悲观或乐观 |
| 可更新 | 是 |
| 可追加 | 是 |
| 工作负荷 | 大量写入,适度读取 |
| 索引 | 主要和辅助索引 |
| 基准大小 | 中小型 |
| 查询灵活性 | 高度灵活 |
| 缩放 | 从几MB的小型到几个TB的大型 |
何时使用此解决方案
如果需要高效地处理和存储业务事务并立即使其能够以一致的方式供客户端应用程序使用,请选择 OLTP。 当处理的任何有形延迟对业务的日常运营产生负面影响时,请使用此体系结构。
OLTP 系统旨在高效地处理和存储事务,以及查询事务数据。 OLTP 系统高效处理和存储单个事务的目标部分是通过数据规范化实现的,将数据分解成更小、更较少的冗余区块。 此步骤使 OLTP 系统能够独立处理大量事务。 它还避免了在存在冗余数据的情况下维护数据完整性所需的额外过程。
挑战
OLTP 系统可能会带来一些挑战:
把分析运行在依赖于数百万个单个事务聚合计算的数据上时,OLTP 系统的资源消耗很大。 它们的运行速度可能很慢,并且可能通过阻塞数据库中的其他事务而导致整个系统变慢。 因此,OLTP 系统并不总是适合处理大量分布式数据的聚合。 但也有例外,例如精心规划的架构。
对高度规范化的数据进行分析和报告时,查询往往比较复杂,因为大多数查询需要使用联接来反规范化数据。 规范化增加可能会使业务用户难以在没有数据库管理员(DBA)或数据开发人员的帮助下进行查询。
无限期地存储事务历史记录或将过多的数据存储在任何一个表中时,可能会导致查询性能降低,具体取决于存储的事务数。 常见的解决方案是在 OLTP 系统中维护一个相关时间范围(例如当前会计年度)并将历史数据卸载到其他系统,例如数据市场或数据仓库。
Azure 中的 OLTP
应用 服务 Web 应用中托管的网站、应用服务中运行的 REST API 以及移动或桌面应用程序等应用程序通常通过 REST API 中介与 OLTP 系统通信。
实际上,大多数工作负荷并不完全是 OLTP。 它们通常还包括分析组件,并且需要实时报告,例如在操作系统上运行报表。 此工作负荷称为混合事务和分析处理(HTAP)。 有关详细信息,请参阅联机分析处理(OLAP)。
在 Azure 中,以下数据存储满足 OLTP 的核心要求和管理事务数据:
- Azure SQL 数据库
- Azure SQL 托管实例
- Azure VM 上的 SQL Server
- Azure Database for MySQL
- Azure Database for PostgreSQL
- Azure Cosmos DB
关键选择条件
若要缩小选择范围,请首先回答以下问题:
你希望使用托管服务还是由你管理自己的服务器?
你的解决方案是否具有Microsoft SQL Server、MySQL 或 PostgreSQL 兼容性的特定依赖项? 应用程序可能会根据支持与数据存储通信的驱动程序来限制可以选择的数据存储,或者根据它对使用哪个数据库做出的假设。
写入吞吐量要求高吗? 如果是,请选择提供内存中表或全局分发功能(如 Azure Cosmos DB)的选项。
解决方案是否为多租户的? 如果是这样,请考虑支持容量池的选项。 多个数据库实例借助于弹性资源池,而非每个数据库的固定资源。 弹性池可帮助你更好地在所有数据库实例之间分配容量,并使解决方案更具成本效益。 Azure Cosmos DB 为多租户方案提供了多个隔离模型。
是否需要在多个区域中以低延迟读取数据? 如果是,请选择支持可读次要副本或全局分发的选项。
数据库是否需要跨地理区域高度可用? 如果是,请选择一个支持异地复制的选项。 另外,请考虑使用支持从主要副本自动故障转移到次要副本的选项。
工作负荷是否需要有保证的 ACID 事务? 如果使用非关系型数据,请考虑使用 Azure Cosmos DB,它通过在逻辑分区内的事务批处理操作提供ACID保证。
数据库是否有特定的安全需求? 如果是,请检查提供行级别安全性、数据掩码和透明数据加密等功能的选项。
解决方案是否需要分布式事务? 如果是,请考虑 Azure SQL 数据库和 SQL 托管实例中的弹性事务。 SQL 托管实例还支持通过Microsoft分布式事务处理协调器(MSDTC)进行传统调用。
后续步骤
- Azure Cosmos DB 事务批处理作
- Azure Cosmos DB 中的一致性级别
- 内存优化表简介
- 内存中 OLTP 概述和使用方案
- 通过使用 Azure SQL 数据库和 Azure SQL 托管实例的内存技术来优化性能
- 跨云数据库的分布式事务