原子事务处理
1.事务处理完全正确地执行完毕
2.事务处理夭折或取消时,相当于该事务处理根本没有执行,不会对数据由任何影响(不可分割)
事务处理有两种结束情况:
正常结束,向事务处理管理员发送提交(Commit)命令。
非正常结束,事务处理需要卷回,向事务处理管理员发送夭折(Abort)命令。
恢复操作
意图表方法:
1.把事务处理要向各数据对象施加的所有修改操作都存放在一个表中,该表称为意图表
2.该表写入坚固存储器中
3.事务处理管理员决定该事务处理是否提交
4.若提交,则在表中设置完整标志,开始按照意图表修改在磁盘中的那些对象
5.删除意图表
根据不同情况采取不同处理方法:
1.意图表不存在,则夭折该事务处理
2.意图表不完整,即在写意图表时节点崩溃,则夭折该事务处理并删除此表
3.意图表完整,即在按坚固存储器中意图表对数据对象进行实际的更新时节点崩溃,则系统安装意图表中的说明进行更新,更新完毕后删除意图表
先写运行记录方法
写一个记录项,记录修改前/后的值是什么
把数据对象的新值写入到运行记录之前,先把数据对象的旧值写入运行记录
在对数据对象进行实际的更新之前,先把该数据对象的旧值和新值写入到运行记录中
记录项不能被覆盖,必须全记录。
在分布式事务处理中,分布式提交就是要保证参加同一个事务处理的所有参加者要么都提交该事务处理,要么都不提交该事务处理。
数据复制算法解决多副本数据库/多副本文件系统的相互一致性问题
主站点方法
目标是要保证完成对每个数据对象的操作,即使系统中达到k个节点错误。为了实现目标,数据至少要复制到系统中的k+1歌节点上,一个节点被指定为主站点,其他节点是备份的。
读请求:只读一个,其他备选。主站点失效,从备份站点选举一个主站点。(一个)
写请求:主站点完成一个写请求,同时向至少K个备份站点更新(多个)
循环令牌方法
1.为了在全部控制住上发动执行事务处理,控制者必须等待收到控制令牌。
2.令牌携带顺序号,用来给事务处理请求发“票”,每张票上都有顺序号,每发出一张票就自动增加顺序号,这样,这些票就给这些请求建立了一个全排序。
同步表决方法
假设,按照时间戳进行排序,事务处理𝒕𝑨优先于𝒕𝑪,三个控制者进行如下操作:
控制者B:若先收到对𝒕𝑪的投票,后收到对𝒕𝑨的投票,则B先广播对𝒕𝑪的投票。在收到对𝒕𝑨的投票是,通过广播对𝒕𝑨的投票从而撤销对𝒕𝑪的投票。若先收到𝒕𝑨则立即广播对𝒕𝑨的投票,对于后到的𝒕𝑪不进行广播。控制者C:广播对𝒕𝑨的投票。控制者A:不广播对𝒕𝑪的投票
法定数方法
每个控制者向其他控制者发出询问,等待回答,然后以多数一致原则决定表决结果,即有多数控制者表决接收该请求即可。因为需要多数,所以如果要同时接受两个请求,就必须至少有一个局部控制者对这两个请求都投票同意接受,而这是不可能的,所以要保证不会发生冲突。(避免读写冲突)𝑵𝑹+𝑵𝑾>𝑵。
读操作多,Nr小一些。写操作多,Nw小一些。
完成操作的法定票数随着副本数目的增加而线性增长。层次结构可以减少法定表决票数。