这是我参与8月更文挑战的第10天,活动详情查看:8月更文挑战算法
正如这篇文章的标题所问,什么是事务数据库?简短的回答是,它是一个支持全有或全无数据操做的存储系统,一般称为事务。这意味着,若是要执行的某些可能很长的数据操做列表(例如,建立、更新或删除信息)的任何子集因任何缘由失败,则全部操做都将被放弃,而且数据库将恢复到任何操做以前的状态。的行动开始了。数据库
此功能提供了可靠的信息存储和处理,由于它能够防止错误的数据操做,从而确保数据库始终处于正确状态。事务数据库为数据完整性提供保证,即便在系统故障的状况下也是如此,这对于许多用例来讲多是关键任务。安全
考虑一个银行客户使用移动设备上的应用程序将资金从一个账户转移到另外一个账户的快速而常见的示例。完整且正确的交易须要借记来源账户和贷记目的地账户。服务器
可是,若是断电,数据库服务器后原点账户还没有扣除以前的目标帐户贷记?一个真正的事务数据库确保在这种状况下整个事务的第一部分被取消(或“回滚”),由于第二部分没有经过,尽管发生故障,数据库仍保持正确和一致的状态。markdown
在本文中,咱们将更详细地研究数据库事务及其重要性,解释“ACID 合规性”的四个要素及其重要性,讨论当数据和事务分布在现代系统中时维护这些要素所涉及的常见困难,并提供一些关于选择知足您需求的事务性数据库系统的具体建议。网络
简而言之,数据库事务是由数据库管理系统 (DBMS) 针对给定数据库执行的工做单元,执行数据操做并更新各类存储介质上的底层文件。事务数据库将确保此类工做单元是全有或全无的,由于任何操做中的任何失败都将致使全部操做暂停和回滚,使数据库处于事务开始以前的状态。架构
使用事务数据库有两个主要缘由,第一个是它使工做单元在全部状况下均可靠。回顾一下咱们的银行业务示例,客户能够放心,当他们的钱从原始帐户中扣除时,将记入目的地帐户。若是在此过程当中出现任何问题(例如,网络故障、服务器故障等),客户但愿他们的账户保持不变,而不是简单地因偶然事件而赔钱。分布式
第二个缘由是咱们所描述的事务数据库始终处于正确且一致的状态,而无论所涉及的全部技术可能发生何种故障。没有人愿意将信息存储在一个系统中,该系统的数据可能会由于容许无效操做而变得不连贯,或者在服务器宕机时可能会丢失信息。固然,并不是每一个用例都是关键任务,但不少都是,在这些状况下,事务数据库能够提供巨大的业务价值。svn
固然,并非每一个数据库系统本质上都是事务性的。一些系统只专一于记录丢失的信息或不须要支持事务功能的信息。在考虑您的用例时,重要的是密切关注您须要这些功能的程度,并将您的指望与潜在数据库系统遵照事务数据库原则的程度相匹配。post
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 事务引擎能够经过其分布式事务协议实现“没有时钟的一致性” 。实际上,在任何数据库写入以前,Fauna 会预先决定事务应以何种顺序执行。而后,Fauna 执行引擎以这样一种方式处理它们,即最终结果与按照该顺序一次处理一个相同。
实际上,您能够得到在多台服务器上并行执行的分布式事务的全部速度和功能,同时享受事务数据库的全部数据优点,就好像它们在单个服务器上串行执行同样。
Fauna 以彻底分布式的方式将非事务性数据库的全部灵活性和性能与事务性数据库的关系查询和功能以及 ACID 保证相结合。事实上,因为 Fauna 处理其分布式事务的方式,用户能够避免其余系统可能发生的那种数据异常。经过不限制键、文档或分区数量的严格可序列化的多区域事务,能够防止不朽写入、陈旧读取、因果反转和其余此类问题。
还值得注意的是,Fauna不是一般托管的“数据库即服务”(DBaaS),甚至不是一些集群云产品,二者都须要管理。相反,Fauna 是一个真正的“数据 API”,这意味着开发人员能够根据须要简单地进行调用,而无需花时间担忧配置或扩展,具备事务数据库和 ACID 合规性的全部好处。
由于它是一个真正的数据 API,因此 Fauna 没有全部常见的配置和配置问题,而且能够当即做为无服务器实用程序使用。开发人员只须要一个账户便可开始使用,无需支付任何费用并提供丰厚的起步津贴。没有常见的头痛问题:没有配置实例,没有普遍的配置等。
在本文中,咱们检查了事务数据库,解释了它们提供的 ACID 保证,说明了它们在关键任务用例中的价值,讨论了现代对分布式事务的需求如何使状况复杂化,并提供了一些具体的建议,以轻松得到 ACID合规的数据优点。
最后,Fauna 经过轻松分布式数据库事务、自动配置和轻松扩展来提供全部价值。它能够免费注册,易于上手,并提供清晰简单的订价——只需为您实际使用的内容付费。若是您认为 Fauna 能够管理您的数据需求,为何不当即尝试一下呢?
以上就是本篇文章的全部内容了
我已经写了很长一段时间的技术博客,这是个人一篇技术文章/教程。但愿大家会喜欢!这里汇总了个人掘金博客主页:海拥
若是你真的从这篇文章中学到了一些新东西,喜欢它,收藏它并与你的小伙伴分享。🤗最后,不要忘了❤或📑支持一下哦。