音乐学家伊恩·克罗斯对音乐作为一种进化的适应提出了最充分的解释。克罗斯采纳了进化心理学的观点,认为大脑是由一些模块组成的,这些模块对环境触发因素做出专门的、自动的行为回应。此外,据克罗斯所说,音乐会产生许多积极的群体利益。然而,克罗斯认为,不只于此,音乐可能还促成了人类文化的出现。......
2025-09-30
并发控制(concurrency control)是为了保证事务的隔离性(I)和一致性(C)。
分布式数据库管理系统的并发控制是为了保证多用户分布环境下的数据库一致性。如果事务内部一致(即不损害任何一致性约束),最简单的方法是让每一个事务单独执行,一个接着一个,互不干扰。当然,这只是理论上合理,实施起来无意义,因为这么做会把系统的吞吐量弄得很小,这不是我们所期待的。并发程度(并发事务的个数)是分布式数据库系统性能好坏的重要参数之一。因此,数据库系统的并发控制机制力图找出一个折中,使得既能保持数据库的一致性,又能维持高度的并发性。
现在我们假设整个分布式系统是完全可靠的,既没有任何软件故障,又没有硬件故障。尽管这是不现实的,但是可以简化我们的讨论。关于可靠性问题我们将在下一章讨论。
可串行化(serializability)是大家广泛认同的能保证并发控制算法正确性的依据。可串行化是涉及并发控制的一个重要理论。为了说明这个理论,我们需要先给出一些定义。
调度(schedule)是指一个调度S(也称历史(history))定义在一个事务集合T上,T={T1,T2,…,Tn},它可以指定这些事务的执行序。
对于任意一对操作aij(x)和akl(x)(i和k是事务标识,不必一样,即这两个操作可以属于不同的事务),它们存取同一个数据库的数据项x,如果它们中间有一个是写(write)操作,则它们是冲突(conflict)的。这样可以将这两个操作简单标为“读”和“写”,从而归结成两类冲突:读-写(read-write)(或写-读(write-read))冲突和写-写(write-write)冲突。其实,这两个操作可能来自同一个事务,也可能来自不同的事务。如果来自不同的事务,则这两个事务是冲突的。
下面先来定义一个完整调度(complete schedule),该调度定义了该域里所有操作之间的执行序。
定义9.1 一个完整调度的前缀是指由该域的事务子集构成的偏序,令POT为事务子集上的完整调度,则T={T 1,T 2,…,Tn}构成一个偏序POT={ΣT,≯T},其中:
条件3:对于任意两个冲突操作而言,aij,akl∈ΣT,aij≯T akl,或者akl≯T aij。
条件1表示调度涉及的域是一个由各个事务构成的集合。条件2定义了一个序,它是各个事务序集合的超集。条件3强调任意一对冲突操作间必须有一个序。
【例9.1】 考虑两个事务T 1和T 2的序:
T1: Read(x)
这样,关于这两个事务的一个完整调度POT为T={T 1,T 2},POT={ST,≯T},存在:
Σ1={r1(x),w1(x),C1}
Σ2={r2(x),w2(x),C2}
这样,ΣT=Σ1∪Σ2={r1(x),w1(x),C1,r2(x),w2(x),C2},且POT={〈r1,r2〉,〈r1,w1〉,〈r1,C1〉,〈r1,w2〉,〈r1,C2〉,〈r2,w1〉,〈r2,C1〉,〈r2,w2〉,〈r2,C2〉,〈w1,C1〉,〈w1,w2〉,〈w1,C2〉,〈C1,w2〉,〈C1,C2〉,〈w2,C2〉}
这个调度可以用一个有向无环图(即DAG图)来表示,如图9.1所示。
我们可以使用简化一点的方式来描述这样一个调度,因为可以忽略那些无需强调的序,如〈r1,r2〉,〈r1,C1〉[1]等。可以让执行序与表中操作的顺序对应,这样POT可简化为:
POT=[r1(x),r2(x),w1(x),C1,w2(x),C2]
可以将一个调度P看成是一个完整调度P的前缀。
给定一个偏序P={Σ,≯},令P={Σ,≯}为P的一个前缀,如果满足:
图9.1 一个完整调度的DAG表示
(1)Σ⊆Σ;
(2)∀ai∈Σ,a1≯a2 iff a1≯a2;
(3)ai∈Σ,if∃aj∈Σ∧aj≯ai,then aj∈Σ。
前两个条件把P的域S定义在P的域S上,P中的序仍然保持在P中。第三个条件表示S中的所有元素,如果在S中有前元(predecessor),则它们在S中也有前元。
【例9.2】 我们来看如下三个事务:
从以上事务可以看出,如下调度S是串行的(serial):(https://www.chuimin.cn)
S=[w2(x),w2(y),r2(z),C2,r1(x),w1(x),C1,r3(x),r3(y),r3(z),C3]
因为T 2的所有操作都在T 1的所有操作前执行,T 1的所有操作都在T3的所有操作前执行,所以可以记作T 2≯s T 1≯s T 3或T 2→T 1→T 3。
例9.2所示的是一个串行调度。
串行调度能保证事务的一致性,但是系统的效率低。有更有效的办法吗?下面我们讨论可串行化的问题。
定义9.2 在一个调度S中,若各个事务的操作执行时不叠加(即操作一个接着一个发生),则这个调度是串行的。
两个调度S1和S2定义在相同的事务集上,如果它们对数据库产生相同的效果,则称为是等价的。更形式化地说,如果S1和S2定义在相同的事务集上,对它们中任意一对冲突操作aij和akl(i≠k)来说,如果aij≯S1 akl,则aij≯S2 akl,反之亦然,我们称之为冲突等价(conflict equivalence)。两个满足冲突等价的调度是等价的。
两个调度的等价条件可以定义如下。
条件1:在两个调度中,每个读操作读到的是相同写操作产生的数据。
条件2:且两个调度中对每个修改数据项的最后一个写操作相同。
【例9.3】 再考虑例9.2中的三个事务,S是一个定义在三个事务上面的调度,它的冲突等价于串行S:
S=[w2(x),r1(x),w1(x),C1,r3(x),w2(y),r3(y),r2(z),C2,r3(z),C3]
这里:对x来说,按照冲突操作对的序,则T2→T1→T3;对y来说,按照冲突操作对的序,则T 2→T 3;对z来说,r2(z)和r3(z)不冲突,不需要强加序。因此,S等价于T2→T 1→T 3。
注意,冲突等价满足第三级一致性。
定义9.3 一个调度Sc是可串行的(serializable),当且仅当Sc冲突等价于一个串行调度,这种可串行化通常称为冲突等价可串行化(serializability)。
并发控制器的基本功能是产生一个要执行事务的可串行化调度。
可串行化理论可以简单地用于无副本的分布式数据库中。我们把每个节点上事务执行的调度称为本地调度,整个分布式数据库上的调度称为全局调度。此时,如果一个全局调度的每个本地调度是可串行的,且每个本地串行调度序是相同的,则这个全局调度是可串行的。在有副本的分布式数据库系统中,可串行化理论的要求更复杂些。
【例9.4】 我们来看以下两个事务:
它们同时在两个副本所在地,也就是在两个节点上运行。下面是两个节点上的本地调度:
S1=[r1(x),w1(x),C1,r2(x),w2(x),C2]
S2=[r2(x),w2(x),C2,r1(x),w1(x),C1]
这两个调度都是可串行化的,确切来说是串行的。因此每一个调度代表一个正确的执行序。但要指出的是,在这两个调度中,T 1和T2的序是互相颠倒的,即S1等价于T1→T 2,S2等价于T 2→T 1。
如果在执行这两个事务前x的值是10,结果在执行这两个事务后,x在S1为150,在S2为105。
例9.3在现实中是不允许的,我们要求S1和S2应当满足互一致性。互一致性要求所有的副本数据值都是一样的。
直观地说,一个单副本可串行化全局调度必须满足如下条件。
●每个本地调度都是可串行化的。
●两个冲突操作在它们同时出现的所有本地调度中都必须有相同的序。
第二个条件保证在冲突事务一起执行时,所有节点上的串行序是相同的。
显然,在有副本的数据库中,需要附加副本控制协议。
假设一个数据项x有副本x1,x2,…,xn。下面我们把x称为逻辑数据项,其副本称为物理数据项。如果提供副本透明度,用户事务就对逻辑数据项x发布读/写操作要求。副本控制协议负责把逻辑数据项x上的每个读操作(Read(x))映射到一个物理数据项副本的读操作(Read(xj))上。将逻辑数据项x上的每个写操作映射到所有x的物理数据副本子集的写操作集上。是映射到物理数据项副本的全集还是子集取决于副本控制算法。如果把读操作映射到其中一个副本上,那么写操作就映射到一个物理数据项副本的全集上,这个算法就满足readonce/write-all(ROWA)协议。
相关文章
音乐学家伊恩·克罗斯对音乐作为一种进化的适应提出了最充分的解释。克罗斯采纳了进化心理学的观点,认为大脑是由一些模块组成的,这些模块对环境触发因素做出专门的、自动的行为回应。此外,据克罗斯所说,音乐会产生许多积极的群体利益。然而,克罗斯认为,不只于此,音乐可能还促成了人类文化的出现。......
2025-09-30
为了有效地进行总额控制,中国还必须逐步建立长期预算框架。目前,如何对社会支出实行预算控制,已是各国预算面临的最大挑战。中国应在一个长期预算的框架内编制社会支出预算,并将其与社会政策体系整合起来。过去十年中,对于长期预算的讨论开始零星地涌现。2008年金融危机后,越来越的学者开始认识到长期预算的必要性。为确保财政可持续,中国应对社会支出引入权责发生制的长期预算。......
2025-09-29
授权控制可以用“谁(授权者)可以授权”来描述。表4.4授权矩阵的例子对象上的权利可以像授权规则一样记录在数据目录(字典)里。如表4.4所示,最常用的方法是将所有的权限用一个授权矩阵表示。其中,每一行表示一个授权事项,每一列代表一个对象。正像前面所提到的,Oracle也为授权标识提供了一套口令系统,在Oracle中称为用户名。Oracle为授权标识提供了更进一步的应用,并在SQL中增加了CREATE user命令。每个角色应当是表示某一功能的连贯的权限组。......
2025-09-30
ANSI SQL标准提供了安全系统最基本的访问控制级别,主要有以下几种。授权标识是一种区别访问数据库不同部分的基本方法,应用SQL的这种特征,根据不同的访问控制可以将数据库分给各个模式。要执行模块中的SQL语句,必须对授权标识授予必要的权限。1992 SQL标准增加了一条取消权限的REVOKE语句,使用该语句可选择性地逐级取消被授权者的权限。......
2025-09-30
语义完整性子系统有两种主要成分:一种表达与操纵完整性断语的语言,一种在数据库更新时强制数据库实施特定动作的强制机制。前者称为完整性约束,后者称为触发器。3)域完整性在关系中,每个属性有指定的域,并且该域的值会有限制。4)参考完整性参考完整性是指关系的外键的值必须与其参考关系中的主键相匹配。在关系型数据库系统中,可以使用断语来定义完整性约束。......
2025-09-30
所谓I/O接口也就是输入/输出接口。根据信号传输方式的不同,I/O接口一般可分为并行接口和串行接口两种方式。通常所说的并行接口一般称为Centronics接口,也称为IEEE1284标准。当传输距离较远、位数又多时,并行接口会导致通信线路复杂且成本提高。图5-13所示为各类并行接口及并行电缆,传输的是数字量和开关量。串行接口按电气标准及协议来分包括RS-232-C、RS-422、RS-485等。......
2025-09-29
依据我国《民法典》第147~151 条的规定,可撤销合同产生的原因可以进一步划分为重大误解、欺诈、胁迫及显失公平这几种。在当事人发生动机的误解时,是否可以主张重大误解撤销合同成为重大误解制度上的一个问题。为此,对于动机欺诈产生的错误,相对人可以主张撤销合同。......
2025-09-29
相关推荐