将多个操作分组到一个事务中

已完成

如果更改一项数据后,另一项数据也需更改,应用程序需要将一系列数据更新组合在一起。 你可以使用事务对这些更新进行分组。 在事务中,如果一系列更新中的某一事件失败,则可以回滚或撤消整个系列。

例如,在线零售商使用事务来下订单、验证付款并更新产品库存。 对相关事件进行分组可确保在收到有效付款之前,库存量不会减少。

接下来,了解事务以及事务是否是数据所需的。

什么是事务?

事务是一起运行的一组有逻辑关系的数据库操作。

关于是否需要在应用程序中使用事务,需询问自己以下问题:对数据集中某一项数据的更改是否会影响另一项数据? 如果会造成影响,则数据库服务中需要事务支持。

ACID 保证通过确保满足一组四项要求来定义事务。 ACID 是原子性、一致性、隔离性和持续性的首字母缩略词。

  • 原子性意味着一个事务只能运行一次,而且它必须是原子性的。 即,要么完成所有工作,要么都不完成。 事务中的操作通常共享一个共同的意图且相互依赖。
  • 一致性可确保数据在事务之前和之后保持一致。
  • 隔离性可确保每个事务不受其他事务的影响。
  • 持续性意味着因事务所做的更改将永久保存在系统中。 系统会保存已提交的数据,因此即使发生故障和系统重启,数据也能以正确的状态存在。

如果数据库提供 ACID 保证,则会以一致的方式将这些原则应用于每个事务。

OLTP 与 OLAP

事务数据库通常称为联机事务处理 (OLTP) 系统。 OLTP 系统通常支持大量用户、响应时间短并且可处理大量数据。 它们还具有高可用性,这意味着它们具有最短的停机时间。 OLTP 系统通常处理小型事务或相对简单的事务。

支持 OLTP 的 Azure 服务的一个示例是 Azure SQL 数据库。

联机分析处理 (OLAP) 系统通常支持的用户更少,响应时间更长,可用性更低,并且常用于处理大型事务或复杂事务。

支持 OLAP 的 Azure 服务的一个示例是 Azure Analysis Services。

OLTP 和 OLAP 这两个术语不再像以前那样频繁使用,但是了解它们可以更轻松地对应用程序的需求分类。

事务:评估数据类型

确保数据处于正确状态并非易事。 事务可以用来对数据强制实施数据完整性要求。 如果数据受益于 ACID 原则,则请选择支持事务的存储解决方案。

让我们了解在线零售方案中的每个数据集,并确定对事务的需求。

产品目录数据

产品目录数据应存储在事务数据库中。 用户下单并验证付款后,应更新商品库存。 同样,如果客户的信用卡付款被拒,应回滚订单且不应更新库存。 处理这些关系需使用事务。

照片和视频

产品目录中的照片和视频不需要事务性支持。 只有在进行更新或添加新文件的情况下,才会更改这些文件。 即使图像与实际产品数据之间存在某种关系,其本质上也并不是事务性的。

业务数据

由于业务数据是历史数据且不会改变,因此不需要事务性支持。 处理数据的业务分析师也有独特的查询需求。 他们经常在查询中使用聚合,因此可以处理其他较小数据点的总数。

知识检查

1.

哪种类型的事务数据库系统最适合产品数据?

2.

假设同一事务中同时包含零售商的库存更新操作和付款处理操作。 某位用户尝试对其笔记本电脑上的订单应用价值 30 美元的商店积分,并通过手机提交(对全额)采用商店积分的完全相同的订单。 系统收到两个相同的订单。 这一过程使用的数据库是符合 ACID 的数据库。 会发生什么情况?