将多个操作分组到一个事务中
如果更改一项数据后,另一项数据也需更改,应用程序需要将一系列数据更新组合在一起。 你可以使用事务对这些更新进行分组。 在事务中,如果一系列更新中的某一事件失败,则可以回滚或撤消整个系列。
例如,在线零售商使用事务来下订单、验证付款并更新产品库存。 对相关事件进行分组可确保在收到有效付款之前,库存量不会减少。
接下来,了解事务以及事务是否是数据所需的。
什么是事务?
事务是一起运行的一组有逻辑关系的数据库操作。
关于是否需要在应用程序中使用事务,需询问自己以下问题:对数据集中某一项数据的更改是否会影响另一项数据? 如果会造成影响,则数据库服务中需要事务支持。
ACID 保证通过确保满足一组四项要求来定义事务。 ACID 是原子性、一致性、隔离性和持续性的首字母缩略词。
- 原子性意味着一个事务只能运行一次,而且它必须是原子性的。 即,要么完成所有工作,要么都不完成。 事务中的操作通常共享一个共同的意图且相互依赖。
- 一致性可确保数据在事务之前和之后保持一致。
- 隔离性可确保每个事务不受其他事务的影响。
- 持续性意味着因事务所做的更改将永久保存在系统中。 系统会保存已提交的数据,因此即使发生故障和系统重启,数据也能以正确的状态存在。
如果数据库提供 ACID 保证,则会以一致的方式将这些原则应用于每个事务。
OLTP 与 OLAP
事务数据库通常称为联机事务处理 (OLTP) 系统。 OLTP 系统通常支持大量用户、响应时间短并且可处理大量数据。 它们还具有高可用性,这意味着它们具有最短的停机时间。 OLTP 系统通常处理小型事务或相对简单的事务。
支持 OLTP 的 Azure 服务的一个示例是 Azure SQL 数据库。
联机分析处理 (OLAP) 系统通常支持的用户更少,响应时间更长,可用性更低,并且常用于处理大型事务或复杂事务。
支持 OLAP 的 Azure 服务的一个示例是 Azure Analysis Services。
OLTP 和 OLAP 这两个术语不再像以前那样频繁使用,但是了解它们可以更轻松地对应用程序的需求分类。
事务:评估数据类型
确保数据处于正确状态并非易事。 事务可以用来对数据强制实施数据完整性要求。 如果数据受益于 ACID 原则,则请选择支持事务的存储解决方案。
让我们了解在线零售方案中的每个数据集,并确定对事务的需求。
产品目录数据
产品目录数据应存储在事务数据库中。 用户下单并验证付款后,应更新商品库存。 同样,如果客户的信用卡付款被拒,应回滚订单且不应更新库存。 处理这些关系需使用事务。
照片和视频
产品目录中的照片和视频不需要事务性支持。 只有在进行更新或添加新文件的情况下,才会更改这些文件。 即使图像与实际产品数据之间存在某种关系,其本质上也并不是事务性的。
业务数据
由于业务数据是历史数据且不会改变,因此不需要事务性支持。 处理数据的业务分析师也有独特的查询需求。 他们经常在查询中使用聚合,因此可以处理其他较小数据点的总数。