LoveUnix » 行业应用 项目实施 » 多副本的并发控制
让LU留住您的每

一天 让LU博客留住您的每一天
2004-4-20 14:23 mistyme
在用主副本法解决多副本的并发控制问题上,如何从多个副本中确定一个主副本,怎样确定一共有多少个副本。若发生故障,如何重新选择一个新的主副本。<br />现在用delphi中com+组件以及SQLServer2000做这个,构建了客户端,服务器,请问一下中间构建一个协调对象是不是更好???<br />我也在自学中,各位帮帮忙了。 <!--emo&^_^--><img src='style_emoticons/default/happy.gif' border='0' style='vertical-align:middle' alt='happy.gif' /><!--endemo-->

2004-5-30 16:52 avazoo
我也想知道 <!--emo&:)--><img src='style_emoticons/default/smile.gif' border='0' style='vertical-align:middle' alt='smile.gif' /><!--endemo-->

2004-6-6 08:18 纳兰婷
<!--QuoteBegin-mistyme+2004-04-20 14:23:08--><div class='quotetop'>QUOTE(mistyme @ 2004-04-20 14:23:08)</div><div class='quotemain'><!--QuoteEBegin--> 在用主副本法解决多副本的并发控制问题上,如何从多个副本中确定一个主副本,怎样确定一共有多少个副本。若发生故障,如何重新选择一个新的主副本。<br />现在用delphi中com+组件以及SQLServer2000做这个,构建了客户端,服务器,请问一下中间构建一个协调对象是不是更好???<br />我也在自学中,各位帮帮忙了。 <!--emo&^_^--><img src='style_emoticons/default/happy.gif' border='0' style='vertical-align:middle' alt='happy.gif' /><!--endemo--> <!--QuoteEnd--></div><!--QuoteEEnd--><br />sorry,这两天偶较忙的说,才看到你的问题。也不知道这个版的斑竹干什么去了。<br /><br />如果是使用副本的话,应该是用以锁定为基础的并发控制。你先想一下在集中式数据库开发锁定机构的过程中,是怎么做的。其实已经隐含的假设了每一个数据项目只有一份副本。也就是说一个事务处理只要发现一个数据项目副本处于锁定状态,那么它就可以知道另一个事务处理正在处理该数据项目了。那么再看看分布式数据库,一般都要求存储在不同地点的数据项目之间具有冗余性,那么对存储在不同地点的同一数据项目的两个副本持有冲突锁定的两个事务处理有可能不知道他们的相互存在。在这种情况下,锁定根本没有用。<br /><br />为了避免这个问题,DTM(分布式事务处理管理程序)必须以以下方法翻译一个由一个主角所提供的、对于一个数据项目的锁定基元:对一个冲突的事务处理来说,不知道这个锁定是不可能的。实现这个要求的最简单的途径是,给存储该数据项目的局部副本的所有地点上的全部 LTM(局部事务处理管理程序)提供局部锁定。这种方法就可以把一个锁定基元变换成和锁定的数据项目的副本数一样多的锁定基元。这种方法很有效,因为两个冲突的事务处理在它们要求锁定的所有地点上将能够发现它们的冲突。而且这种方法是冗余的。<br /><br />关于确定主副本,你只需要给每一个数据项目的一份副本赋予特权就可以了。但是要注意:必须对它施加所有的锁定。<br /><br />关于协调程序小组,应该建立这么个程序。<br /><!--c1--><div class='codetop'>CODE</div><div class='codemain'><!--ec1-->协调程序: Write &#34;prepare&#34; record in the log;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Send PREPARE message and activate timeout.<br /><br />参加者: Wait for PREPARE message;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if the participant is willing to commit<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;then begin<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; write subtransaction&#39;s records in the log;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; write &#34;ready&#34; record in the log;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; send READY answer message to coordinator<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else begin<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; write &#34;abort&#34; record in the log;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; send ABORT answer message to coordinator<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end<br /><br />协调程序: Wait for ANSWER message &#40;READY or ABORT&#41; from all participants or timeout;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if timeout expired or some answer message is ABORT<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;then begin<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;write &#34;global_abort&#34; record in the log;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;send ABORT command message to all participants<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else &#40;* all answers arrived and were READY *&#41; begin<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; write &#34;global_commit&#34; record in the log;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; send COMMIT command message to all participants<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end<br /><br />参加者: wait for command message;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;write &#34;abort&#34; or &#34;commit&#34; record in the log;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;send the ACK message to coordinator;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;execute command<br /><br />协调程序: wait for ACK messages from all participants;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;write &#34;complete&#34; record in the log<!--c2--></div><!--ec2-->

页: [1]
查看完整版本: 多副本的并发控制


Powered by Discuz! Archiver 5.5.0  © 2001-2006 Comsenz Inc.