ITPub博客

首页 > 数据库 > 数据库开发技术 > 理论先行 #2:ACID原则-大道至简

理论先行 #2:ACID原则-大道至简

原创 数据库开发技术 作者:架构染色 时间:2022-11-26 08:26:00 0 删除 编辑

你用忙碌送走白昼,笑迎寂静的深夜

并非贪恋繁星的闪耀,而是钟爱默默地拼搏

欢迎关注【架构染色】交流学习

一、简介

对于一个可靠的支持事务的数据库管理系统来说,若要保证事务过程中数据的正确性,则必须具有的四个基本特性,分别是:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。

本篇介绍 ACID 四个原则的语义,并在结尾处基于 CAP 定理跟 BASE 理论比对,探讨差异;希望能对你有益,帮你解惑。

二、原子性(Atomicity)

原子性是说,一次事务中所有的指令,从效果来看他们需作为一个不可分割的整体。在操作这些指令时,从执行效果看,要么全部执行成功,要么全部不执行。只要当前事务中的有一个指令执行失败,那其他所有指令都要执行失败:尚未执行的指令不再执行,已经执行的指令,需将其数据变更进行回滚,恢复到事务执行前的状态。

三、一致性(Consistency)

一致性的说法很多,我比较认可的一种说法是“系统从一个正确的状态,迁移到另一个正确的状态”。这里正确的状态特别有讲究,既要能够达到理想状态下的预期效果,又要遵守数据库实现层面的相关约束(违反约束会报错)。

有这种解释推荐给大家:通过事务的 AID 来保证 C,AID 都是手段,C 是目的,AID 是数据库的特征(就是依赖数据库的具体实现);而 C 实际上它依赖于应用层(正确的状态由上层应用的业务状态决定),也就是依赖于开发者(由开发者的逻辑控制来保证这个正确的状态)。具体查看:如何理解数据库事务中的一致性的概念?

四、隔离性(Isolation)

隔离性是说,事务是并发的,多个并发执行的事务相互之间是隔离的;每个事务都不受其它事务中操作的干扰;某个事务中所做的修改在完成提交以前,其他事务不可见。

五、持久性(durability)

持久性是说,当事务成功提交后,事务操作对数据的变更将会永久性地保存到数据库中。

六、总结

如果 ACID 也能为数据库横向分区扩展提供一致性选择,那将大大简化了应用程序开发人员的工作,但基于 CAP 定理【点击了解前文详情:《 理论先行-CAP定理》】,在满足 CP 的情况下,良好的可用性是难以保障的。

ACID 是悲观的并且在每个操作结束时保障强制一致性,BASE 则与 ACID 截然相反;BASE 是乐观的并且接受数据库一致性处于不稳定的状态,在它看来既然无法做到强一致性,每个应用都可以根据自身的业务场景特点,采用适当的策略帮助系统实现最终一致性。

最后说一句(请关注,莫错过)

如果这篇文章对您有帮助,或者有所启发的话,欢迎关注公众号【 架构染色 】进行交流和学习。您的支持是我坚持写作最大的动力。


参考并感谢

[1]

https://juejin.cn/post/7167294154827890702


原文作者:架构染色;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2022-08-23

  • 博文量
    49
  • 访问量
    23706