`
in355hz
  • 浏览: 230297 次
社区版块
存档分类
最新评论

漫谈事务与分布式事务(1)- 理解 ACID

阅读更多

最近看了一点资料,准备写一个大话题。

 
事务,是所有数据库讲义中最核心的话题。它本质上是一系列连续的,逻辑相关的数据库操作的组合。随便翻开一本书,都会告诉你,事务必须满足下面四个属性:
 
ACID(Atomic,Consistency,Isolation,Durability)
 
按照属性即实体的观点:数据库事务就是 ACID,符合 ACID 的就是数据库事务。因此我们可以得出一个公式:
 
数据库事务 = ACID
 
抛开课本上那些苦涩难懂的定义,如何理解 ACID ? 
 
首先,我们不用去读 Jim Gray 的《Transaction Processing: Concepts and Techniques》。——为什么数据库能在半个世纪内如此受欢迎,以至于取代了其他的数据存储方式? 显然是因为它能够满足业务的需要。那么业务最需要什么? 
 
数据的可靠性
 
用学术的语言说是数据的“完整性约束”——可靠的数据一定是符合“完整性约束”的数据。而“完整性约束”是什么? 学术语言说“完整性约束”是建立在业务数据集上的“不变式(Invariant)”。那“不变式(Invariant)”又是什么?... 
 
呃。抛开这些学术概念,业务上的数据可靠性可以从两方面理解: 数据首先必须可靠的存储,然后必须可靠的更新。
 
记住,可靠的意义是符合数据的 完整性约束 ——可以简单的看做业务规则。例如,账户金额不能为负,入出账必须平衡都是规则。
 
接下来,ACID 的含义 已经不难理解了:
 
A - 原子化更新。业务操作要么全部完成, 要么全都不做, 不容忍中间状态。
 
C - 事务开始前和结束后,数据的完整性(约束)不会被破坏。注意了,ACID 定义的 Consistency 跟现在大家常说的一致性(数据在分布式节点的一致)不一样,这里采用学术界的原始定义。
 
    这儿再一次提到了 完整性约束。区别是,ACID 把 C 限制在一个事务单元内,强调事务必须保证数据从一个一致性状态进入另一个一致性状态,事务的结束和数据的一致性之间没有时差。
 
I - 事务隔离是业务选择的。数据库定义了 4 种隔离级别:
 
    Read committed
 
    业务的中间状态对外不可见。很容易找到的一个例子是:甲向乙转账,银行先向乙的账户转入 100 元,再从甲的账户扣除 100 元。在银行扣款前,甲、乙的账户里都有 100 元。如果这一中间状态对外可见——甲和乙就有机会都花掉这 100 元,让银行扣款失败,而且没有办法追回。
 
    Repeatable reads / Serializable
 
    这两个级别都在限制事务执行时,其他事务提交的更新是否可见。但是程度不同。Repeatable reads 只限制行,而 Serializable 限制整个数据集。
 
    举个简单的例子来理解:生成业务报表,过程先查询订单明细数据,再查询汇总数据。如果业务在处理完明细数据后,又读到了其他业务修改的订单金额 (这会违反 Repeatable reads),或者又读到了新的订单 (这会违反 Serializable),那么最终得到的汇总数据就会与明细数据不一致,这对于商业敏感的报表是无法接受的。
 
    Read uncommitted
 
    业务的中间状态对外可见,不需要事务隔离。这样看似危险,但不一定会产生业务问题。例如,在一个真实的转账里:银行会先从甲的账户扣除 100 元,再向乙的账户转入 100 元。这样,在乙账户到账前,甲的账户已经扣掉了 100 元。显然,即使这个中间状态对外可见,甲、乙也没有任何机会造成银行转账失败。
 
D - 业务数据不会丢失。事务结束后,除非数据被其他业务更新,否则不应该有变化。
 
理解 ACID
 
在 ACID 里,数据的可靠性是业务的根本需求。
 
如果不满足 A,则业务的一组操作并没有全部完成。比如写入了订单,但是没有写入订单明细,一定会违反业务的数据完整性。
 
而不满足 D,则数据是易变的。昨天写的订单今天也许就找不到了,业务的数据可靠性得不到保证。
 
C 保护数据在事务前后的完整性。这不是必须的,有些业务可以允许时差。继续用上面的转账作为例子:甲向乙转入 100 元,银行先从甲的账户扣除 100 元,承诺明天到账。甲信任银行,认为这是合理的。第二天,银行向乙的账户转入 100 元,结束这笔业务。
 
用户(甲)可以容忍账务临时的不一致。因此,从这个意义来看 C 是场景相关的。
 
最后,I 根据业务场景的需要定义了 4 个隔离级别。有些业务场景需要强 Serializable 的事务隔离,有些场景完全不需要事务隔离。很明显,I 也是场景相关的。
 
结论是:在 ACID 里,A / D 是基础,而 C / I 看业务场景。
 
最后梳理一下全文的线索:
 
1. 数据库事务 = ACID
2. ACID 的需求是数据可靠性。
3. 保护数据可靠性,A / D 是基础,而 C / I 看业务场景。
 
理解 ACID 就写到这里,下一篇准备开讲数据库 ACID 的实现,敬请期待。

 

分享到:
评论

相关推荐

    「端点安全」跨越攻防的壁垒_漫谈企业内部安全蓝军建设实践 - 安全方案.zip

    「端点安全」跨越攻防的壁垒_漫谈企业内部安全蓝军建设实践 - 安全方案 企业安全 企业安全 NGFW 安全对抗 端点安全

    [NET 4.0面向对象编程漫谈 应用篇].金旭亮---高清版.pdf

    .NET 4.0面向对象编程漫谈应用篇是一本专注于.NET 4.0框架下进行面向对象编程技术的电子书籍。作者金旭亮将其专业见解和实践经验融入到这本书中,让读者在应用层面上深入理解面向对象编程(Object-Oriented ...

    [NET 4.0面向对象编程漫谈 基础篇].金旭亮--高清版.pdf

    在.NET 4.0面向对象编程漫谈基础篇中,金旭亮详细介绍了.NET框架下的面向对象编程的基础知识和技巧。面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,它使用“对象”来设计软件。对象可以包含数据...

    漫谈兼容内核.zip

    漫谈兼容内核之一:ReactOS怎样实现系统调用 漫谈兼容内核之二:关于kernel-win32的对象管理 漫谈兼容内核之三:Kernel-win32的文件操作 漫谈兼容内核之四:Kernel-win32的进程管理 漫谈兼容内核之五:Kernel-win32...

    星际旅行漫谈-光速旅行-时间机器-虫洞

    综上所述,《星际旅行漫谈》通过对光速旅行、时间机器和虫洞等概念的深入探讨,不仅呈现了人类探索宇宙的梦想与追求,也为读者展现了科学技术进步所带来的无限可能。尽管目前这些概念大多停留在理论阶段,但随着科学...

    信息安全漫谈-技术普及培训-PPT-2016

    本文件提供信息安全基本知识,面向普通人群尤其是IT技术人员,通过案例和深入浅出的讲解,让听者掌握基本的信息安全知识、理念、理论和技能。适合于各类科技公司、院校和研究院所。

    漫谈电子商务解决方案(ppt-34页).ppt

    1. **硬件平台** - **RS/6000 企业服务器**:RS/6000是一款高性能的UNIX服务器,适合中小企业构建电子商务平台,具有出色的扩展性和稳定性。 - **S/390 并行企业服务器**:作为大型机,S/390提供了强大的数据处理...

    漫谈电子商务竞争优势(ppt-41页).ppt

    本篇内容将深入探讨电子商务的竞争优势,帮助企业理解并充分利用这些优势来提升自身市场地位。 首先,电子商务能够帮助企业树立良好的企业形象(CI)。通过网络平台,企业可以展现出高科技的形象,吸引网络群体的...

    漫谈WebLogic-CVE-2020-25511

    漫谈WebLogic-CVE-2020-25511

    漫谈电子商务的影响(ppt-39页).ppt

    本文将从企业与非营利组织、消费者、政府及商业流程四个主要角度,深入分析电子商务所带来的变革及其深远的影响力。 首先,电子商务为企业及非营利组织带来了前所未有的竞争优势。利用先进的信息技术,企业能够优化...

    尿素期货上市漫谈-0715-中银国际期货-16页.pdf

    投资者在参与交易时,需要充分理解尿素市场的供需特点、价格季节性以及相关政策,以便做出更为明智的投资决策。同时,期货市场本身的风险管理规则,如保证金制度和价格波动限制,也需要投资者密切关注,以便有效控制...

    漫谈 VoIP 网络中的核心设备-SBC

    根据 Infonetics 研究报告指出,托管式 IPPBX 和融合通信市场将以每年至少 20%的增长。 由此不难看出,2016 年 SBC 市场将以大幅度增长。统计数据表明用户需求数量的增加必然 带动厂家设备的销售额。...

    分布式Key Value Store漫谈

    分布式Key Value Store漫谈

    五年级语文上册 第六单元 23《漫谈沟通》课后练习 北京版-北京版小学五年级上册语文试题.docx

    北京版小学五年级上册语文教材第六单元的课文《漫谈沟通》便是一篇探讨这一主题的文章。通过这篇课文,学生们不仅能够学习到沟通的基本知识,更重要的是能够认识到有效沟通在生活中的重要性。 在课后练习的练习题中...

    Windows之漫谈兼容内核

    漫谈兼容内核之一:ReactOS怎样实现系统调用 漫谈兼容内核之二:关于kernel-win32的对象管理 漫谈兼容内核之三:Kernel-win32的文件操作 漫谈兼容内核之四:Kernel-win32的进程管理 漫谈兼容内核之五:Kernel-win32...

    漫谈兼容内核.7z

    谈兼容内核之一:ReactOS怎样实现系统调用.pdf 漫谈兼容内核之二:关于kernel -win32的对象管理.pdf 漫谈兼容内核之三:关于kernel-win32的文件操作.pdf 漫谈兼容内核之四:Kernel-win32的进程管理.pdf 漫谈兼容内核...

    步步为营C#技术漫谈七、事务处理(Transaction)[借鉴].pdf

    本地事务遵循ACID原则,确保事务的四个特性得以满足。 2. 分布式事务(Distributed Transactions): 分布式事务涉及到多个数据源,如SQL Server、Oracle、Sybase等。在这种情况下,MSDTC(Microsoft Distributed ...

    从Google Spanner漫谈分布式存储与数据库技术.pdf

    #资源达人分享计划#

    漫谈分布式存储方案,GPFS 对话 CEPH1

    分布式存储方案,特别是GPFS和CEPH,正在成为现代数据中心云存储的核心技术。随着云计算的兴起,传统的集中式存储架构逐渐让位于分布式、对象存储和超融合等创新技术。这两种技术各自有着独特的特点和优势。 GPFS...

Global site tag (gtag.js) - Google Analytics