DBMPA不能分辨是处理器DBMPB没有听到删除的消息 , 还是听到了但已经收到了一个
重新创建的请求 , 这个请求处理器DBMPA并不知道 。为了使得处理器DBMPA能解决这
种情况 , 我们在所有的入口加入另一个时间戳:入口创建的时间戳 。因而在上面的例子中 ,
处理器DBMPA能够比较赋值和被删除实体的创建时间戳 。最迟的创建时间戳被保留 。这
样 , 无论什么时候一个带有过时的时间戳的修改操作都将被忽略 。
现在我们用一个五元组来描述入口和修改操作:
E::=(S,V,F,CT,T)
S是选择项
V是相关的值
F是删除/未删除的标志
CT是创建时间戳
T是最近一次修改的时间戳
注重一个修改操作的元素F,CT,T的值唯一的标示修改操作的类型 。因而只是成为一个
选择项的新的入口的五元组 , 而不是修改的类型 , 需要通信:
F未删除 , CT=T=>创建
F未删除 , CT赋值
F删除=>删除
上面描述的机制处理分布式数据库的所有的操作 , 保证所有拷贝的一致性 。一个处理器
DBMP只要收到处理器DBMP的启动修改的请求 , 该处理器DBMP对数据库的修改将生效 。
这个机制的低效在于被删除的入口不从数据库中直接移除 。下面将讨论答应被删除的入
口“垃圾收集“的方法 。
被删除入口的移除
这个问题的基本限制是一个处理器DBMP直到没有收到任何相同的选择项(S)的赋值或
过时的创建时间戳(CT)的赋值才删除入口 。假如操作失败 , 则无法区分同一个选择项S
的过时的赋值和新创建入口的赋值 。为了能够做到这一点 , 每个处理器DBMP必须知道是
否所有其它的处理器DBMP已经知道删除入口的消息 。为了实现它 , 每个处理器DBMP在
听到删除消息的时候能够通知其它的处理器DBMP , 假如这些通知按照修改操作的正常顺
序传送的话 , 那么每个处理器DBMP收到一个通知时能够确信发送方处理器DBMP已经传
送了赋值给被删除的入口 , 标记它为删除 , 并且将不再产生任何新的赋值 。利用这种方式跟
踪和交换每个独立的被删除的入口要比一般的要求具体复杂得多 。
考虑到简单性 , 让每个处理器DBMP按先后次序传递它的所有修改 。我们使得所有的
处理器DBMP保存一张由从其它的每个处理器DBMP接收到的上次修改的时间戳组成的
表 。任何一个处理器DBMP , 例如处理器DBMPA保证已经收到了所有的由另外一个处理
器DBMP例如处理器DBMPB引起的修改 , 这张表在处理器DBMPA中的拷贝 , 拥有早于
或等于处理器DBMPB的入口的时间戳 。假如这张表在处理器DBMP之间交换 , 那么所有
的处理器DBMP将有第二张N*N(N=处理器DBMP的数量)的表 , 入口(I,J)将是处理器
DBMPI从处理器DBMPJ接收到的上次修改的时间戳 。因而当在处理器DBMPA的这张表
的第K列的所有入口晚于或等于被删除入口的时间戳时 , 处理器DBMPA能够移除一个被
处理器DBMPK所引起删除的入口 。当一个处理器DBMP收到一个删除修改 , 除了进行操
作 , 确认收到了 , 还应该发送它的最迟时间戳的表给所有其它处理器DBMP , 这是通过一
个按修改操作信息的正常顺序排列的时间戳信息来发送的 。
我们可以通过减少交换信息的数量和表的尺寸这个方法来进行的改进 , 使得DBMP只是
交换第一张表(由从其它的处理器DBMP接收到的上次修改的时间戳构成)中最过时的入
口 。这些将被保存在1*N的表中 , 替换N*N的表 。一个DBMP假如正在接收时间戳等于或
推荐阅读
- 我买了K750c的一点感受
- 王者荣耀老夫子的克星是谁
- 如何删除横页和纵页之间的空白页
- 真空的粽子常温可以放多久
- 两个坐标向量相乘怎么算 两个坐标向量相乘的计算方法是什么
- 857什么意思 857的意思
- 发布抖音视频的时候如何添加话题
- Serv-U3.0的Domain设置 上
- 月明人静的夜里,纺织娘叫起来改为拟人句 拟人句
- 认真享受E6第四天