精华内容
下载资源
问答
  • 阶段提交协议(two phase commit protocol,2PC)可以保证数据的一致性,许多分布式关系型数据管理系统采用此协议来完成分布式事务。它协调所有分布式原子事务参与者,并决定提交或取消(回滚)分布式算法。...

    两阶段提交协议(two phase commit protocol,2PC)可以保证数据的强一致性,许多分布式关系型数据管理系统采用此协议来完成分布式事务。它是协调所有分布式原子事务参与者,并决定提交或取消(回滚)的分布式算法。同时也是解决一致性问题的一致性算法。该算法能够解决很多的临时性系统故障(包括进程、网络节点、通信等故障),被广泛地使用。但是,它并不能够通过配置来解决所有的故障,在某些情况下它还需要人为的参与才能解决问题。参与者为了能够从故障中恢复,它们都使用日志来记录协议的状态,虽然使用日志降低了性能但是节点能够从故障中恢复。

    在两阶段提交协议中,系统一般包含两类机器(或节点):一类为协调者(coordinator),通常一个系统中只有一个;另一类为事务参与者(participants,cohorts或workers),一般包含多个,在数据存储系统中可以理解为数据副本的个数。协议中假设每个节点都会记录写前日志(write-ahead log)并持久性存储,即使节点发生故障日志也不会丢失。协议中同时假设节点不会发生永久性故障而且任意两个节点都可以互相通信。

    当事务的最后一步完成之后,协调器执行协议,参与者根据本地事务能够成功完成回复同意提交事务或者回滚事务。

    顾名思义,两阶段提交协议由两个阶段组成。在正常的执行下,这两个阶段的执行过程如下所述:

    阶段1:请求阶段(commit-request phase,或称表决阶段,voting phase)

    在请求阶段,协调者将通知事务参与者准备提交或取消事务,然后进入表决过程。在表决过程中,参与者将告知协调者自己的决策:同意(事务参与者本地作业执行成功)或取消(本地作业执行故障)。

    阶段2:提交阶段(commit phase)

    在该阶段,协调者将基于第一个阶段的投票结果进行决策:提交或取消。当且仅当所有的参与者同意提交事务协调者才通知所有的参与者提交事务,否则协调者将通知所有的参与者取消事务。参与者在接收到协调者发来的消息后将执行响应的操作。

    注意 两阶段提交协议与两阶段锁协议不同,两阶段锁协议为一致性控制协议。

    该协议的执行过程可以通过下图X-X来描述:


    (a)成功 (b)失败

    图X-X:两阶段提交

    两阶段提交协议最大的劣势是其通过阻塞完成的协议,在节点等待消息的时候处于阻塞状态,节点中其他进程则需要等待阻塞进程释放资源才能使用。如果协调器发生了故障,那么参与者将无法完成事务则一直等待下去。以下情况可能会导致节点发生永久阻塞:

    如果参与者发送同意提交消息给协调者,进程将阻塞直至收到协调器的提交或回滚的消息。如果协调器发生永久故障,参与者将一直等待,这里可以采用备份的协调器,所有参与者将回复发给备份协调器,由它承担协调器的功能。

    如果协调器发送“请求提交”消息给参与者,它将被阻塞直到所有参与者回复了,如果某个参与者发生永久故障,那么协调器也不会一直阻塞,因为协调器在某一时间内还未收到某参与者的消息,那么它将通知其他参与者回滚事务。

    同时两阶段提交协议没有容错机制,一个节点发生故障整个事务都要回滚,代价比较大。

    下面我们通过一个例子来说明两阶段提交协议的工作过程:

    A组织B、C和D三个人去爬长城:如果所有人都同意去爬长城,那么活动将举行;如果有一人不同意去爬长城,那么活动将取消。用2PC算法解决该问题的过程如下:

    首先A将成为该活动的协调者,B、C和D将成为该活动的参与者。

    阶段1:

    A发邮件给B、C和D,提出下周三去爬山,问是否同意。那么此时A需要等待B、C和D的邮件。

    B、C和D分别查看自己的日程安排表。B、C发现自己在当日没有活动安排,则发邮件告诉A它们同意下周三去爬长城。由于某种原因,D白天没有查看邮件。那么此时A、B和C均需要等待。到晚上的时候,D发现了A的邮件,然后查看日程安排,发现周三当天已经有别的安排,那么D回复A说活动取消吧。

    阶段2:

    此时A收到了所有活动参与者的邮件,并且A发现D下周三不能去爬山。那么A将发邮件通知B、C和D,下周三爬长城活动取消。

    此时B、C回复A“太可惜了”,D回复A“不好意思”。至此该事务终止。

    通过该例子可以发现,2PC协议存在明显的问题。假如D一直不能回复邮件,那么A、B和C将不得不处于一直等待的状态。并且B和C所持有的资源,即下周三不能安排其它活动,一直不能释放。其它等待该资源释放的活动也将不得不处于等待状态。

    基于此,后来有人提出了三阶段提交协议,在其中引入超时的机制,将阶段1分解为两个阶段:在超时发生以前,系统处于不确定阶段;在超市发生以后,系统则转入确定阶段。

    2PC协议包含协调者和参与者,并且二者都有发生问题的可能性。假如协调者发生问题,我们可以选出另一个协调者来提交事务。例如,班长组织活动,如果班长生病了,我们可以请副班长来组织。如果协调者出问题,那么事务将不会取消。例如,班级活动希望每个人都能去,假如有一位同学不能去了,那么直接取消活动即可。或者,如果大多数人去的话那么活动如期举行(2PC变种)。为了能够更好地解决实际的问题,2PC协议存在很多的变种,例如:树形2PC协议(或称递归2PC协议)、动态2阶段提交协议(D2PC)等。


    参考文献:

    维基百科:http://en.wikipedia.org/wiki/Two-phase_commit_protocol

    两阶段提交协议与三阶段提交协议之比较:http://my.oschina.net/digerl/blog/34139

    NoSQL数据库笔谈:http://sebug.net/paper/databases/nosql/Nosql.html#_08464202471077442_91161458194

    展开全文
  • mysql

    2019-07-13 17:37:58
    阶段锁协议保证了当前事务修改数据时,不会丢失其他事务未提交修改。 RR通过事务启动时创建一致性识图来实现,RC语句执行时创建一致性识图来实现。 1.innodb支持RC和RR隔离级别实现的一致性视图...
    1. 一致性视图,保证了当前事务从启动到提交期间,读取到的数据是一致的(包括当前事务的修改)。
    2. 当前读,保证了当前事务修改数据时,不会丢失其他事务已经提交的修改。
    3. 两阶段锁协议,保证了当前事务修改数据时,不会丢失其他事务未提交的修改。
    4. RR是通过事务启动时创建一致性识图来实现,RC是语句执行时创建一致性识图来实现。

    1.innodb支持RC和RR隔离级别实现是用的一致性视图(consistent read view)

    2.事务在启动时会拍一个快照,这个快照是基于整个库的.
    基于整个库的意思就是说一个事务内,整个库的修改对于该事务都是不可见的(对于快照读的情况)
    如果在事务内select t表,另外的事务执行了DDL t表,根据发生时间,要嘛锁住要嘛报错

    3.事务是如何实现的MVCC呢?
    (1)每个事务都有一个事务ID,叫做transaction id(严格递增)
    (2)事务在启动时,找到已提交的最大事务ID记为up_limit_id。
    (3)事务在更新一条语句时,比如id=1改为了id=2.会把id=1和该行之前的row trx_id写到undo log里,
    并且在数据页上把id的值改为2,并且把修改这条语句的transaction id记在该行行头
    (4)再定一个规矩,一个事务要查看一条数据时,必须先用该事务的up_limit_id与该行的transaction id做比对,
    如果up_limit_id>=transaction id,那么可以看.如果up_limit_id<transaction id,则只能去undo log里去取。
    去undo log查找数据的时候,也需要做比对,必须up_limit_id>transaction id,才返回数据

    4.什么是当前读,由于当前读都是先读后写,只能读当前的值,所以为当前读.
    会更新事务内的up_limit_id为该事务的transaction id

    5.为什么rr能实现可重复读而rc不能,分两种情况
    (1)快照读的情况下,rr不能更新事务内的up_limit_id,
    而rc每次会把up_limit_id更新为快照读之前最新已提交事务的transaction id,则rc不能可重复读
    (2)当前读的情况下,rr是利用record lock+gap lock来实现的,而rc没有gap,所以rc不能可重复读
    (3)RR是通过事务启动时创建一致性识图来实现,RC是语句执行时创建一致性识图来实现。

    展开全文
  • 数据库原理

    2018-03-25 18:46:16
    基本内容:ACID与CAP、数据库事务可能引发问题、数据库锁类型、三级封锁协议、两段锁协议、数据库隔离级别、MVCC实现步骤、MySQL事务如何实现、数据库锁如何实现、XA两段提交协议。 1.ACID数据库事务正确...

    基本内容:ACID与CAP、数据库事务可能引发的问题、数据库锁的类型、三级封锁协议、两段锁协议、数据库隔离级别、MVCC的实现步骤、MySQL事务如何实现、数据库锁如何实现、XA两段提交协议

    1.ACID是数据库事务正确执行的四个基本要素:

        原子性:事务是数据库并发控制的最小单位,要么全部提交成功,要么全部回滚失败;

        一致性:事务执行前后,数据的完整性必须保证一致。事务执行前后都保持一致性,数据库总是由一个一致性状态转向另一个一致性状态。

        隔离性:一个事务的修改在最终提交之前,对其它事务是不可见的;

        持久性:事务一旦提交,其所做的修改将永远保存在数据库中。即使系统发生崩溃,事务执行的结果也不能丢失。可以通过数据库备份和恢复来保证持久性。

    2.CAP是分布式系统的设计原则。   

        一致性:在一个时刻,各节点数据是否相同。强一致性:数据一致更新,所有的数据变动都是同步的;弱一致性:在限定时间内,最终达到一致。

        可用性:集群对外好的响应性能;有限时间内返回结果。一个结点宕机不影响整体。

        分区容错性:系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,就必须在C和A之间做出选择。

    3.并发一致性

        在并发环境下,一个事务如果受到其它事务的影响,那么事务操作就无法满足一致性条件。可能引发的问题有:

       (a)丢失修改。T1和T2两个事务都对一个数据进行修改,T1先修改,T2随后修改,则T2的修改覆盖了T1的修改。

       (b)脏读。T1修改一个数据,T2随后读取这个数据。如果T1撤销了这次修改,那么T2读取的数据是脏数据

       (c)不可重复读。T1读取一个数据,T2对该数据进行了修改。如果T1在读这个数据,此时读取的结果和第一次读取的结果不同。

       (d)幻读(广义的不可重复读)。T1读取某个范围内的数据集,若T2在该范围内插入了一条数据。如果T1再读取该范围的数据,此时读取的结果和第一次读取的结果不同。

        解决方法:

        产生并发不一致性的主要问题是破坏了事务的隔离性,解决方法是通过并发控制(封锁)来保证隔离性。

    4.封锁

        (a)锁类型

            排它锁(Exclusive),简称为X锁,又称写锁。一个事务T对数据对象A加了X锁,就可以对A进行读取和更新。加锁期间其它事务不能对A加任何锁。

            共享锁(Shared),简称为S锁,又称读锁。一个事务T对数据对象A加了S锁,就可以对A进行读取操作,但是不能进行更新操作。加锁期间其它事务能对A加S锁,但是不能加X锁。

            更新锁(Updated),简称为U锁。在提交读隔离级别中,此事务读取数据[获取数据对象的读锁(S锁)],然后修改数据 [此操作要求锁转换为排他锁(X 锁)],并发时可能导致死锁。因此引入U锁。

                update test set A=A-1 where id=1;//不恰当的例子 该更新语句分为两步:先读数据对象的值,再设置数据对象的值。

            意向锁(Intention Locks)可以支持多粒度封锁。它本身是一个表锁,表示想对该表的某行记录进行操作,而非整张表。通过原来的X/S锁之上引入了IX/IS,来表示一个事务想要在某个数据行上加X锁或S锁。

        (b)封锁粒度

            锁数据库、表、页、行、属性列。     

        (c)封锁协议

        三级封锁协议:通过加不同类型的锁和不同的释放时机来实现。

            1级封锁协议:事务T要修改数据对象A时必须加X锁,直到事务结束才释放锁。可以有效避免修改丢失问题。

            2级封锁协议:在1级封锁协议的基础上,约定读取A时必须加S锁,读取完马上释放S锁。可以有效避免脏读问题。根据1级封锁协议,若T事物1在对数据对象A进行修改,会加X锁,那么事务T2就无法对A加S锁,也就不会读入脏数据。

            3级封锁协议:在1级封锁协议的基础上,约定读取A时必须加S锁,直至事务结束了才释放S锁。可以有效避免不可重复读问题。因为事务在读A时,其它事务不能加X锁,从而避免了在读期间数据发生改变。

        两段锁协议:事务T对数据对象A进行读或写操作之前,必须先获得对A的封锁;并且在释放一个封锁后,T就不能再获得其它任何锁。“两段”锁顾名思义即把事务分为两个阶段:加锁阶段和释放锁阶段。

        事务遵循两段锁协议是可串行化调度的充分条件。例如以下操作满足两段锁协议,它是可串行化调度的。

    lock-x(A)...lock-s(B)...lock-s(c)...unlock(A)...unlock(C)...unlock(B)

        但不是必要条件,例如以下操作不满足两段锁协议,但它还是可串行化调度的。

    lock-x(A)...unlock(A)...lock-s(B)...unlock(B)...lock-s(c)...unlock(C)...

        (d)数据库隔离级别(隔离性)

            1.未提交读(READ UNCOMMITTED)

                指定语句可以读取已由其它事务修改但尚未提交的行。事务中的修改,即使没有提交,对其它事务也是可见的。

            2.提交读(READ COMMITTED)

                指定语句不能读取已由其它事务修改但尚未提交的行。这样可以避免脏读。该选项是SQL Server默认隔离级别。一个事务只能读取已经提交事务所做的修改。换句话说,一个事务所做的修改在提交之前对其它事务是不可见的。

            3.可重复读(REPEATABLE READ)

                指定语句不能读取已由其它事务修改但尚未提交的行,并且指定,其它任何事务都不能在当前事务提交之前修改由当前事务读取的数据。该选项是MySQL默认隔离级别。可以保证在同一个事务中多次读取同样的数据的结果是一样的。不能解决幻读。

            4.可串行化(SERIALIXABLE)

                强制事务串行执行,就不存在并发问题。

            5.多版本并发控制(Multi-Version Concurrency Control,MVCC)/snapshot隔离级别

               思想: copyOnWrite,无锁编程。   适用于读多写少的场景(写时复制)。

            实现原理:默认添加两个隐藏列(数据创建时间事务版本号create_ver,数据删除时间事务版本号expire_ver),通过对两个隐藏列的对比实现。

            (1)select:行创建版本号create_ver<=当前事务版本号current_ver(代表该事务开启之前数据行就存在或者是当前事务新建的数据行)且行删除版本号expire_ver>当前事务版本号current_ver(代表事务开始前该行还没有被删除)。

            (2)update:写时复制机制。将旧行删除时间expire_ver设为当前事务版本号current_ver:expire_ver=current_ver;将新行的创建时间create_ver设置为当前事务版本号create_ver=current_ver;

            (3)delete:将删除时间设为当前事务版本号expire_ver=current_ver;

            (4)insert: 将创建时间设为当前事务版本号expire_ver=current_ver;

    MySQL事务的实现:

        通过锁实现隔离性,通过redo log来实现原子性和持久性,通过undo log来实现一致性。

    XA两段提交协议:

        两类角色:协调者、参与者。协调者是对集群的事务进行控制,本身不需要执行事务。

        阶段1:事务请求(询问)阶段。1.协调者向所有参与者发送事务内容,并等待各参与者回应是否可以进行事务提交操作;2.各参与者开始执行事务,并将自己的执行情况反馈给协调者,如果可以进行事务提交操作,则返回Yes,否则返回No。

        阶段2:事务提交阶段。如果协调者从所有参与者都获得Yes响应,则对所有参与者发送commit命令;参与者接受到commit命令后执行事务提交操作,在提交事务完成后向释放占用资源并协调者发送ACK消息;协调者接受到所有参与者的ACK后,该事务完成。如果任何一个协调者向参与者发送了No响应,或者在超时时间内协调者没有收到所有参与者的回馈响应,那么会中断事务:协调者向所有参与者发送rollback命令,参与者接收到rollback命令后,开始执行回滚操作,回滚完成后释放等占用资源并向协调者发送ACK消息,协调者接受到所有参与者的ACK后再执行事务中断。

        可以看出这是一个强一致性算法。

        问题:1.事务提交阶段存在同步阻塞,所有参与者等待协调者的commit/rollback命令才能继续执行,极大地限制了分布式系统的性能。2.协调者单点故障,若在第二阶段协调者挂掉而没有发送,没有向参与者发送commit/rollback命名,那么所有参与者将持续等待,无法完完成提交事务;或者只向部分参与者发送了commit就挂掉了,那么将导致数据不一致性,出现数据分区。

    参:

    MySQL技术内幕

    https://www.cnblogs.com/acm-bingzi/p/msqlLimit.html

    https://www.cnblogs.com/siqi/p/6690059.html

    https://msdn.microsoft.com/zh-cn/library/ms175519(v=sql.105).aspx

    展开全文
  • 详解SQL Server 2008多版本并发控制

    千次阅读 2012-10-10 10:43:31
    目前大多数商业数据库(DB2, SQL Server)并发控制采用的是两阶段(Two-Phase Locking,2PL)协议,2PL保证了并发事务执行可串行化。但2PL在对任何数据进行读、写操作之前,需要对该数据加锁。在封锁相容矩阵中,S...
    【IT168 技术文档】数据库的一致性,也是衡量DBMS性能的重要指标之一。目前大多数商业数据库(DB2, SQL Server)的并发控制采用的是两阶段锁(Two-Phase Locking,2PL)协议,2PL保证了并发事务执行的可串行化。但2PL在对任何数据进行读、写操作之前,需要对该数据加锁。在封锁相容矩阵中,S锁(Share Locks,共享锁)和X锁(Exclusive Locks,排它锁)是不相容的,因此当事务1正对数据A进行读操作(加S锁)时,事务2想要对数据进行写操作(加X锁),那么事务2必须等待事务1释放数据A上的S锁,才能继续执行。
    

      多版本并发控制(Multi-Version Concurrency Control,MVCC)较好地解决了这一问题。在多版本的系统中,每一次写数据均产生一个新的版本,读操作可以根据需要读取合适的版本,因此读写操作互不阻塞。MVCC虽然提高了并发度,但也带来了维护多个版本的存储开销。

      Microsoft SQL Server 数据库引擎引入了现有事务隔离级别的一种新的实现方式 - 已提交读,用于提供使用行版本控制的语句级快照。SQL Server 数据库引擎还引入了一个新的事务隔离级别 - 快照,用于提供也使用行版本控制的事务级快照。

      将 READ_COMMITTED_SNAPSHOT 数据库选项设置为 ON 可启用使用行版本控制的已提交读隔离。将 ALLOW_SNAPSHOT_ISOLATION 数据库选项设置为 ON 可启用快照隔离。为数据库启用任一选项时,数据库引擎都将保持被修改的每一行的版本。每当某个事务修改行时,修改前的该行图像将被复制到版本存储区的一页中。

      版本存储区是 tempdb 中的数据页集合。如果有多个事务修改行,则该行的多个版本将被链接到一个版本链中。使用行版本控制的读操作将检索每一行在事务或语句启动时已提交的最后一个版本。

      为 SQL Server 2008编写的或 SQL Server 中新增的应用程序,通过在 READ_COMMITTED_SNAPSHOT 数据库选项为 ON 时指定读提交的事务隔离级别,来实现使用行版本控制的读提交的隔离。所有读操作都将查看语句启动时已提交的行版本。这将提供数据的语句级快照。

      为 SQL Server 编写的应用程序将通过在 ALLOW_SNAPSHOT_ISOLATION 数据库选项为 ON 时指定快照事务隔离级别,来实现快照隔离。快照事务中的所有读操作都将查看事务启动时已提交的行版本。这将提供数据的事务级快照。

      对于使用基于行版本控制的隔离级别的事务,读操作不对数据请求共享锁。这意味着使用行版本控制的读取器不会妨碍其他读取器或编写器访问同一数据。同理,编写器也不会妨碍读取器。但是,编写器会互相妨碍(即使是在基于行版本控制的隔离级别下运行)。两个写操作不能同时修改同一数据。

      “快照隔离”功能扩展了 SQL Server 2008 中的锁定框架,它使应用程序能够在发生任何数据修改之前查看值。这可防止应用程序被锁定,同时仍将提供真正已提交的数据。SQL Server 2008 的 Read Committed Snapshot 需要数据库管理员来激活,允许数据被只读事务读取。所以 SI 对只读事务的并发控制效果是很好的,但是对更新事务是否也这样不得而知。

      对长时间运行的更新事务来说更为不利于与短期的高竞争性事务。如果跨数据库的事务试图使用 快照隔离(SI)标准 ,而不是所有数据库都设定的话,则该事务会失败。这无疑给可扩展性带来一定的障碍。看来微软要实现自己的比 SQL 92 规范还要强的 SI 还有很多路要走。

    展开全文
  • 当多个事务在数据库中并发地执行时,数据的一致性可能无法再维持。系统有必要控制各事务之间相互作用,这通过被称为并发控制机制来实现。最常用机制各种封锁协议、时间戳排序机制、有效性检查技术与多...
  • 1、若事务T对数据R已加X,则其它事务对R__不能加任何___。...5、两段封锁协议是可以保证冲突可串行性的 两阶段封锁法是可串行化的并行调度算法 两阶段封锁法一定能够保证数据更新的一致性 并发调..
  • 目前大多数商业数据库(DB2, SQL Server)并发控制采用的是两阶段(Two-Phase Locking,2PL)协议,2PL保证了并发事务执行可串行化。但2PL在对任何数据进行读、写操作之前,需要对该数据加锁。在封锁相容矩阵...
  • 重写Overriding父类与子类之间多态性的一种表现,重载Overloading一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,...
  • 1.1.8 NFS 和 SMB 最常见的两种 NAS(Network Attached Storage)协议,当把一个文件系统同时通过 NFS 和 SMB 协议共享给多个主机访问时,以下哪些说法错误 1.1.9 输入 ping IP 后敲回车,发包前会发生什么?...
  • 因而行级即可保证数据的一致性又能提高数据操作迸发性。 18如果数据库满了会出现什么情况,是否还能使用? 答:见16 19 关于内存对齐问题以及sizof()输出 答:编译器自动对齐原因:为了提高程序性能...
  • 并确保在同一事务处理种对相同数据的两次查询看到的是相同值。 值范围: TRUE | FALSE 默认值: FALSE row_locking: 说明: 指定在表已更新或正在更新时是否获取行锁。如果设置为 ALWAYS, 只有在表被更新后才获取...
  • Firebird数据库中文版

    热门讨论 2011-11-29 08:48:43
    并且每一个事务都可以独立进行控制,两段提交功能可以保证数据库的一致性优化机制也支持多个事务保存点。 在线备份: 不需要停止数据库即可进行备份,一个备份进程产生一个数据库当前快照。因此,用户可以...
  • C#微软培训教材(高清PDF)

    千次下载 热门讨论 2009-07-30 08:51:17
    C#--微软.NET第一语言 本书着重介绍语言本身,比较少涉及应用,不错入门书,从头讲起,不怕不明白。 <<page 1>> page begin==================== 目 目目 目 录 录录 录 第一部分 C#语言概述.4 ...
  • 全书共分为11章,首先在第1章中详细介绍了sql server 2008架构和配置,然后在接下来10个章节中深入探讨了sql server 2008数据存储和查询处理等各个方面内部机制,包括:数据库和数据库文件、表、索引、跟踪、...
  • C#微软培训资料

    2014-01-22 14:10:17
    越今天各自为营 超越今天各自为营超越今天各自为营 超越今天各自为营 Web 站点 站点站点 站点 把 把把 把 Internet 建成一 建成建成 建成 个 一个一 一个可 可个可 可 以互相...
  • 全书共分为11章,首先在第1章中详细介绍了sql server 2008架构和配置,然后在接下来10个章节中深入探讨了sql server 2008数据存储和查询处理等各个方面内部机制,包括:数据库和数据库文件、表、索引、跟踪、...
  • java 面试题 总结

    2009-09-16 08:45:34
    重写Overriding父类与子类之间多态性的一种表现,重载Overloading一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,...
  • 5.6 数据一致性和数据并发性 155 5.6.1 数据库写入器和写前协议 155 5.6.2 SCN 156 5.6.3 撤销管理 156 5.7 备份与恢复体系结构 157 5.7.1 用户管理备份与恢复 157 5.7.2 RMAN 157 5.7.3 Oracle ...
  • 千里马酒店前台管理系统V7使用手册

    热门讨论 2011-06-16 14:09:38
    酒店前台管理一个流程复杂、实时性强的系统,酒店的标志性的关键核心业务。前台管理的水平,决定了整个酒店管理系统的水平。因此,前台管理系统千里马酒店管理系统的核心系统。 通常房务管理(Room Division...
  • 10 张图打开 CPU 缓存一致性的大门 计算机网络 7种常见的设计模式和使用场景 新来的"大神"用策略模式把if else给"优化"了,总监想叫他走... 零拷贝 从String中移除空白字符的多种方式!?差别竟然这么大! Java必会...
  • asp.net知识库

    2015-06-18 08:45:45
    第2章 并发操作的一致性问题 (2) Using sqlite with .NET Visual Studio 2005 中新 DataSet 特性 MySQL 和 .Net2.0配合使用 与DotNet数据对象结合自定义数据对象设计 (二) 数据集合与DataTable 与DotNet数据对象...
  • <div><p>多研究些架构,少谈些框架(1) -- 论微服务架构核心概念 ...使用事务来保证逻辑ACID。最典型就是存储过程。当然我们在平时J2EE经典分层架构中,经常在Service层使用事务脚本。 ...
  • 不过我们还是在单线程模式下找到了可以提高一定安全性的方案,方案通过ShadowDOM的Close模式把Body住。这样开发者自己的代码无法操作DOM的,因为被我住了,但是开发者的JavaScript自由...
  • 2 一致性与连贯性  2. 5 硬件保护  2. 5. 1 双重模式操作  2. 5. 2 I/O保护  2. 5. 3 内存保护  2. 5. 4 CPU保护  2. 6 网络结构  2. 6. 1 局域网  2. 6. 2 广域网  2. 7 小结  习题二  推荐读物  第三...
  • 注意:静态编译后常量数据位于PE文件.rdata中,只可读不可写,编程时请避免修改它们。譬如以下代码,静态编译后就可能会出现问题: a = " " GetWindowTextA(hWnd, a, 20) 正确代码为: a = 取空白文本 ...
  • Oracle 主要配置文件介绍

    热门讨论 2007-08-25 10:07:40
    保护数据考虑 尤其在 CAMS 双机应用模式下 能够保证数据的一致性 具体修改操作可参考 Linux与 Oracle 安装手册 初始化参数文件一个包含实例配置参数文本文件 这些参数被设置为特 定值 用于...

空空如也

空空如也

1 2
收藏数 29
精华内容 11
关键字:

两段锁协议是保证数据一致性的协议