什么是事务数据库?

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

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

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

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

让我们考虑一个更复杂的例子来说明为什么 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 合规性的所有好处。

先自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以扫码领取!

img

技术学习总结

学习技术一定要制定一个明确的学习路线,这样才能高效的学习,不必要做无效功,既浪费时间又得不到什么效率,大家不妨按照我这份路线来学习。

最后面试分享

大家不妨直接在牛客和力扣上多刷题,同时,我也拿了一些面试题跟大家分享,也是从一些大佬那里获得的,大家不妨多刷刷题,为金九银十冲一波!

妨多刷刷题,为金九银十冲一波!

[外链图片转存中…(img-XyZ4vjIv-1711488238253)]

[外链图片转存中…(img-tDCVo4bE-1711488238253)]

需要更多Java资料的小伙伴可以帮忙点赞+关注,点击传送门,即可免费领取!

  • 29
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值