阿里云云数据库rds版怎么设置配置文件(阿里云数据库rds怎么使用)

阿里云云数据库rds版怎么设置配置文件(阿里云数据库rds怎么使用),第1张

这个问题的有趣之处,不在于问题本身(“原子性、一致性的实现机制是什么”),而在于回答者的分歧反映出来的另外一个问题:原子性和一致性之间的关系是什么?

我特别关注了@我练功发自真心

的答案,他正确地指出了,为了保证事务 *** 作的原子性,必须实现基于日志的REDO/UNDO机制。但这个答案仍然是不完整的,因为原子性并不能够完全保证一致性。

按照我个人的理解,在事务处理的ACID属性中,一致性是最基本的属性,其它的三个属性都为了保证一致性而存在的。

首先回顾一下一致性的定义。所谓一致性,指的是数据处于一种有意义的状态,这种状态是语义上的而不是语法上的。最常见的例子是转帐。例如从帐户A转一笔钱到帐户B上,如果帐户A上的钱减少了,而帐户B上的钱却没有增加,那么我们认为此时数据处于不一致的状态。

数据库实现的场景中,一致性可以分为数据库外部的一致性和数据库内部的一致性。前者由外部应用的编码来保证,即某个应用在执行转帐的数据库 *** 作时,必须在

同一个事务内部调用对帐户A和帐户B的 *** 作。如果在这个层次出现错误,这不是数据库本身能够解决的,也不属于我们需要讨论的范围。后者由数据库来保证,即

在同一个事务内部的一组 *** 作必须全部执行成功(或者全部失败)。这就是事务处理的原子性。

为了实现原子性,需要通过日志:将所有对

数据的更新 *** 作都写入日志,如果一个事务中的一部分 *** 作已经成功,但以后的 *** 作,由于断电/系统崩溃/其它的软硬件错误而无法继续,则通过回溯日志,将已

经执行成功的 *** 作撤销,从而达到“全部 *** 作失败”的目的。最常见的场景是,数据库系统崩溃后重启,此时数据库处于不一致的状态,必须先执行一个crash

recovery的过程:读取日志进行REDO(重演将所有已经执行成功但尚未写入到磁盘的 *** 作,保证持久性),再对所有到崩溃时尚未成功提交的事务进行

UNDO(撤销所有执行了一部分但尚未提交的 *** 作,保证原子性)。crash

recovery结束后,数据库恢复到一致性状态,可以继续被使用。

日志的管理和重演是数据库实现中最复杂的部分之一。如果涉及到并行处理和分布式系统(日志的复制和重演是数据库高可用性的基础),会比上述场景还要复杂得多。

但是,原子性并不能完全保证一致性。在多个事务并行进行的情况下,即使保证了每一个事务的原子性,仍然可能导致数据不一致的结果。例如,事务1需要将100元转入帐号A:先读取帐号A的值,然后在这个值上加上100。但是,在这两个 *** 作之间,另一个事务2修改了帐号A的值,为它增加了100元。那么最后的结果应该是A增加了200元。但事实上,事务1最终完成后,帐号A只增加了100元,因为事务2的修改结果被事务1覆盖掉了。

为了保证并发情况下的一致性,引入了隔离性,即保证每一个事务能够看到的数据总是一致的,就好象其它并发事务并不存在一样。用术语来说,就是多个事务并发执行后的状态,和它们串行执行后的状态是等价的。怎样实现隔离性,已经有很多人回答过了,原则上无非是两种类型的锁:

种是悲观锁,即当前事务将所有涉及 *** 作的对象加锁, *** 作完成后释放给其它对象使用。为了尽可能提高性能,发明了各种粒度(数据库级/表级/行级)/各

种性质(共享锁/排他锁/共享意向锁/排他意向锁/共享排他意向锁)的锁。为了解决死锁问题,又发明了两阶段锁协议/死锁检测等一系列的技术。

一种是乐观锁,即不同的事务可以同时看到同一对象(一般是数据行)的不同历史版本。如果有两个事务同时修改了同一数据行,那么在较晚的事务提交时进行冲突

检测。实现也有两种,一种是通过日志UNDO的方式来获取数据行的历史版本,一种是简单地在内存中保存同一数据行的多个历史版本,通过时间戳来区分。

锁也是数据库实现中最复杂的部分之一。同样,如果涉及到分布式系统(分布式锁和两阶段提交是分布式事务的基础),会比上述场景还要复杂得多。

@

我练功发自真心

提到,其他回答者说的其实是 *** 作系统对atomic的理解,即并发控制。我不能完全同意这一点。数据库有自己的并发控制和锁问题,虽然在原理上和 *** 作系统

中的概念非常类似,但是并不是同一个层次上的东西。数据库中的锁,在粒度/类型/实现方式上和 *** 作系统中的锁都完全不同。 *** 作系统中的锁,在数据库实现中

称为latch(一般译为闩)。其他回答者回答的其实是“在并行事务处理的情况下怎样保证数据的一致性”。

最后回到原来的问题(“原子性、一致性的实现机制是什么”)。我手头有本Database

System

Concepts(4ed,有点老了),在第15章的开头简明地介绍了ACID的概念及其关系。如果你想从概念上了解其实现,把这本书的相关章节读完应该能大概明白。如果你想从实践上了解其实现,可以找innodb这样的开源引擎的源代码来读。不过,即使是一个非常粗糙的开源实现(不考虑太复杂的并行处理,不考虑分布式系统,不考虑针对 *** 作系统和硬件的优化之类),要基本搞明白恐怕也不是一两年的事。

一、北大法宝:是由北京大学法制信息中心与北大英华科技有限公司联合推出的智能型法律信息一站式检索平台。“北大法宝”已发展成为包括“法律法规”、“司法案例”、“法学期刊”、“律所实务”、“专题参考”、“英文译本”和“法宝视频”七大检索系统,全面涵盖法律信息的各种类型,在内容和功能上全面领先,法律工作者的必备工具。

二、北大法意网:全球领先、完备实用的中文法律信息数据库,为法律人士提供最权威、最全面、最规范、最精准的信息查询。

三、HeinOnline:法学期刊全文数据库:是美国著名的以法律为核心,涉及政治、国际关系、外交等领域的全文数据库。该数据库是法学教学、研究和学习的必备资料库。

四、LexisNexis法律数据库:面向大学法学院、律师、法律专业人员设计的数据库产品,内容非常全面,具有非常大的影响力,尤其在法律业界具有很高知名度。

五、月旦知识库:回溯最早为1952年5月发表之文章迄今, 每日更新,资源类型:期刊、论著、论文、法规、裁判、教学案例、试题。学科领域:法学、教育、公共管理、经济、医护卫生5大领域及相关交叉学科。

六、人大复印报刊资料数据库:由中国人民大学书报资料中心出版,涵盖哲学类、政治学与社会学类、法律类、经济学与经济管理类、教育类、文学与艺术类、历史学类、文化信息传播类以及其他类。

七、中国知网:是世界上最大的连续动态更新的中国学术期刊全文数据库,涵盖学科全面。

八、台湾法源:“法源法律网”由台湾法源信息股份有限公司建置维护。数据库收录了台湾各级政府机关、单位所公(发)布现行及历史之法令规章(包括宪法、法律、命令、行政规则、地方自治法规、国际法暨条约协议、两岸及港澳协议、具公益性质之法人规章等)、司法判解、各级法院裁判书、各检察机关起诉书、法令解释、每日法律新闻、法律新讯、法规草案等法学数据。数据库每日实时更新。

以上就是关于阿里云云数据库rds版怎么设置配置文件(阿里云数据库rds怎么使用)全部的内容,包括:阿里云云数据库rds版怎么设置配置文件(阿里云数据库rds怎么使用)、数据库应用系统的开发具体分为哪几个阶段(1)(数据库设计属于系统开发的什么阶段)、什么是数据库系统的一份重要文件是系统开发的标准和依据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10049894.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存