|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
实不相瞒,net网页编程是我见过的执行效率最低的程序设计语言,前不久在CSDN论坛上有个评测,计算9999的阶乘,同样的循环算法,net网页编程的耗时是.NET的5倍。
事件是包管数据库从一个分歧性的形态永世地酿成别的一个分歧性形态的基本,个中,ACID是事件的基础特征。
A是Atomicity,原子性。一个事件常常触及到很多的子操纵,原子性则包管这些子操纵要末都做,要末都不做,而不至于呈现事件的部分操纵乐成,而别的一部分操纵没有乐成。假如事件在实行的过程当中产生毛病,那末数据库将回滚到事件产生之前的形态。好比银行的转账服务,这个事件的终极了局必定是:某个账户的余额增添了x,而别的一个账户的余额削减了x,大概两个账户的余额未产生变更。而不会呈现其他情形。
C是Consistency,分歧性。分歧性是指事件产生前和产生今后,都不会损坏数据库的束缚干系,包管了数据库元素的准确性、无效性和完全性。这类束缚干系能够是数据库外部的束缚,好比数据库元素的值必需在必定的局限内,也能够是使用带来的束缚,好比转账今后银行账户的余额不克不及为正数。
I是Isolation,断绝性。一个事件的操纵在未提交之前,是不会被并行产生的其他事件会见到的。也就是说,数据库操纵不会看到某个事件的两头操纵了局,好比转账过程当中,用户是不克不及查询到一个账户余额削减了,而别的一个账户余额未产生变更的情形。
D是Durability,耐久性。事件完成今后,它对数据库的影响是永世性的,即便在数据库体系产生宕机大概其他妨碍的情形下,这类影响也会失掉坚持。
在散布式体系中,事件常常包括有多个介入者的举动,单个介入者上的举动是可以包管原子性的,而多个介入者之间原子性的包管则必要经由过程两阶段提交来完成,两阶段提交是散布式事件完成的关头。
很分明,两阶段提交包管了散布式事件的原子性,这些子事件要末都做,要末都不做。而数据库的分歧性是由数据库的完全性束缚完成的,耐久性则是经由过程commit日记来完成的,不是由两阶段提交来包管的。至于两阶段提交怎样包管断绝性,能够参考Large-scaleIncrementalProcessingUsingDistributedTransactionsandNotifications中两阶段提交的详细完成。
两阶段提交的历程触及到和谐者和介入者。和谐者能够看作成事件的倡议者,同时也是事件的一个介入者。关于一个散布式事件来讲,一个事件是触及到多个介入者的。详细的两阶段提交的历程以下:
第一阶段:
起首,和谐者在本身节点的日记中写进一条的日记纪录,然后一切介入者发送动静prepareT,扣问这些介入者(包含本身),是不是可以提交这个事件;
介入者在承受到这个prepareT动静今后,会依据本身的情形,举行事件的预处置,假如介入者可以提交该事件,则会将日记写进磁盘,并前往给和谐者一个readyT信息,同时本身进进预提交形态形态;假如不克不及提交该事件,则纪录日记,并前往一个notcommitT信息给和谐者,同时打消在本身上所做的数据库改;
介入者可以推延发送呼应的工夫,但终极仍是必要发送的。
第二阶段:
和谐者会搜集一切介入者的定见,假如收到介入者发来的notcommitT信息,则标识着该事件不克不及提交,和谐者会将AbortT纪录到日记中,并向一切介入者发送一个AbortT信息,让一切介入者打消在本身上一切的预操纵;
假如和谐者收到一切介入者发来prepareT信息,那末和谐者会将CommitT日记写进磁盘,并向一切介入者发送一个CommitT信息,提交该事件。若和谐者迟迟未收到某个介入者发来的信息,则以为该介入者发送了一个VOTE_ABORT信息,从而作废该事件的实行。
介入者吸收到和谐者发来的AbortT信息今后,介入者会停止提交,并将AbortT纪录到日记中;假如介入者收到的是CommitT信息,则会将事件举行提交,并写进纪录
一样平常情形下,两阶段提交机制都能较好的运转,当在事件举行过程当中,有介入者宕机时,他重启今后,能够经由过程扣问其他介入者大概和谐者,从而晓得这个事件究竟提交了没有。固然,这统统的条件都是各个介入者在举行每步操纵时,城市事前写进日记。
独一一个两阶段提交不克不及办理的窘境是:当和谐者在收回commitT动静后宕机了,而独一收到这条命令的一个介入者也宕机了,这个时分这个事件就处于一个未知的形态,没有人晓得这个事件究竟是提交了仍是未提交,从而必要数据库办理员的参与,避免数据库进进一个纷歧致的形态。固然,假如有一个条件是:一切节点大概收集的非常终极城市恢复,那末这个成绩就不存在了,和谐者和介入者终极会重启,其他节点也终极也会收到commitT的信息。
数据库日记包管了事件实行的原子性和耐久性,日记范例能够分为redolog,undolog,undo/redolog。关于这几种日记情势的详细先容,能够参照:
http://nosql-wiki.org/foswiki/bin/view/Main/TransactonLog
C#中有两处地方用到new关键字,第一处也是最常见的一处是用在调用构造函数的时候,这种情况也是大家见的最多的一种。另一处是用在派生类中,作用有隐藏成员,切断继承关系等,相信第二处的用法大家明显要比第一处生疏。 |
|