写点什么

什么是事务数据库?

  • 2021 年 11 月 11 日
  • 本文字数:2031 字

    阅读完需:约 7 分钟

什么是数据库事务?




简而言之,数据库事务是由数据库管理系统 (DBMS) 针对给定数据库执行的工作单元,执行数据操作并更新各种存储介质上的底层文件。事务数据库将确保此类工作单元是全有或全无的,因为任何操作中的任何失败都将导致所有操作暂停和回滚,使数据库处于事务开始之前的状态。


使用事务数据库有两个主要原因,第一个是它使工作单元在所有情况下都可靠。回顾一下我们的银行业务示例,客户可以放心,当他们的钱从原始账户中扣除时,将记入目的地账户。如果在此过程中出现任何问题(例如,网络故障、服务器故障等),客户希望他们的帐户保持不变,而不是简单地因偶然事件而赔钱。


第二个原因是我们所描述的事务数据库始终处于正确且一致的状态,而不管所涉及的所有技术可能发生何种故障。没有人愿意将信息存储在一个系统中,该系统的数据可能会因为允许无效操作而变得不连贯,或者在服务器宕机时可能会丢失信息。当然,并非每个用例都是关键任务,但很多都是,在这些情况下,事务数据库可以提供巨大的业务价值。


当然,并不是每个数据库系统本质上都是事务性的。一些系统只专注于记录丢失的信息或不需要支持事务功能的信息。在考虑您的用例时,重要的是密切关注您需要这些功能的程度,并将您的期望与潜在数据库系统遵守事务数据库原则的程度相匹配。


ACID 合规性的重要性




ACID 是“Atomicity、Consistency、Isolation 和 Durability”的首字母缩写,它是一组确保数据库事务可靠、正确处理的原则。下表解释了这四个不同元素所涉及的内容。


| 元素 | 意义 |


| --- | --- |


| 原子性 | 事务中的所有数据操作以全有或全无的方式完成或回滚。 |


| 一致性 | 数据库中的信息在所有情况下都必须在语义上有意义(例如,在没有有效父级的情况下不插入子数据,必填字段没有空值等) |


| 隔离 | 每个事务必须独立于同时进行的任何其他事务运行;即,不能允许信息从一项交易“泄漏”到另一项交易。 |


| 耐用性 | 任何成功完成的交易都会以不可磨灭的方式记录下来,这意味着它的数据不会在软件甚至硬件故障的情况下丢失。 |


让我们考虑一个更复杂的例子来说明为什么 ACID 保证很重要。想象另一种常见的情况,其中两个人 A 和 B 正在为电影院的同一场演出预订同一排的座位。A 只预订了一个座位,而 B 则试图为家庭出游预订整排。


如果 A 先预订了座位,那么 B 的交易就会失败,因为网上购物车中的一个座位已经被预订了,不能重复预订。这说明了原子性,因为 B 人的数据操作之一失败了,他们都做了,以及一致性,因为系统不会允许无意义的数据,例如两个人保留相同的座位。


只有当 A 的预订成功完成并写入数据库时??,B 的交易才会被取消。然而,在这种情况发生之前,隔离的特性是允许两个人同时尝试对同一个席位进行交易,确保双方都将有争议的席位视为可用,直到它被实际保留。


最后,即使在 A 成功预订座位后整个预订系统崩溃,持久性确保在重新启动时正确的数据仍然存在。这使得 A 可以根据需要打印票并享受演出,无论在交易正确完成后发生什么系统故障。


分布式事务如何工作?




现代应用程序在本质上越来越分散,通常在全球范围内可用,这使得事务数据库的问题变得更加困难。原因是 ACID 保证对于分布式系统与在单个服务器上运行的单个数据库软件一样重要,但是涉及多个服务器或节点会使问题显着复杂化。


想想看。当单个数据库软件可以“决定”在第一个事务失败后立即取消事务中的所有其他数据操作时,这很简单。当数据库软件在分散在世界各地的数十个(甚至数百个)节点上运行时,这完全是另一回事。任何这些服务器上任何数据操作的任何元素的任何故障都要求必须取消整个事务并在任何地方安全回滚。类似地,即使事务成功,整个系统也必须确保所有操作都是正确且持久的,无论哪个或哪些服务器执行它们。


实际上,分布式事务数据库很难正确实现,但幸运的是一些供应商做到了。例如,由于其架构和数据存储算法,Fauna 能够提供严格可序列化、外部一致的事务。


与其他系统不同的是,Fauna 不需要所有服务器之间严格的物理时钟同步来提供一致性,这避免了副本服务器之间通常的距离限制,因此对于以典型的全球 Internet 延迟在世界各地进行部署是实用的。当系统时钟或网络流量相差几毫秒时,确实需要同步的方法可能会导致故障,而 Fauna 更宽松的要求则不会遇到此类问题。


这是可能的,因为 Fauna 提供了受 Calvin 启发的事务引擎,这是一种跨分区数据库系统实现快速分布式事务的方法。Fauna 事务引擎可以通过其分布式事务协议实现“没有时钟的一致性” 。实际上,在任何


【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


数据库写入之前,Fauna 会预先决定事务应以何种顺序执行。然后,Fauna 执行引擎以这样一种方式处理它们,即最终结果与按照该顺序一次处理一个相同。


实际上,您可以获得在多台服务器上并行执行的分布式事务的所有速度和功能,同时享受事务数据库的所有数据优势,就好像它们在单个服务器上串行执行一样。


呼吁采取行动




评论

发布
暂无评论
什么是事务数据库?