双重数据库的维护( 二 )


数据库
本文讨论的数据库类型以一个实体----(选择项,值)的集合形式出现 。每个选择项是唯
一的 , 值对于处理器DBMP而言是原子实体 。提出的这种机制可以扩展用来处理有更复杂
结构的数据库----其中的值本身可以是(选择项,值)的集合形式----但这种扩展将在此不进行
进一步的讨论 。
答应对数据库进行的四种操作:
1)选择:给定一个选择项,返回与之匹配的值 。
2)赋值:给定一个选择项和值 , 这个给定的值替代与这个给定的选择项相关的以前的值 。
3)创建:一个新的选择项和一个初始的值 , 然后一个新的实体(选择项,值)加入到数据库
中 。
4)删除:给定一个选择项 , 已经存在的实体(选择项,值)从数据库中移除 。
注重值的修改局限于赋值操作 。函数修改请求----例如“把X置换成Factorial(X)“----
就超出规则之外了 。假如答应这些请求将强制使用系统同步互锁 。
一致性
另一个必须考虑的问题是数据库拷贝的一致性程度 。由于处理器DBMP之间相互通信
的延迟 , 所以不可能保证数据库在任何时候都完全相同 。我们的目标不是保证拷贝之间的完
全相同 , 而是保证拷贝之间的一致性 。这样的话 , 我们可以认为假设当停止任何一个入口的
修改操作时 , 处理器DBMP之间有足够的通信时间 , 则那个入口的状态(它的存在和值)在所
有的数据库中的拷贝都相同 。
时间戳
我们答应任何一个创建和维护数据库的处理器DBMP对数据库进行修改 。当然 , 一个
处理器DBMP进行一些改变必须与其它的处理器DBMP通信 。为了确保一致性 , 所有的处
理器DBMP必须做出相同的决定 , 即对特定的某个入口的哪个修改将是最后结果 。我们希
望选择最迟的改变 , 然而 , 由于没有通用的经常可以存取的序列号发生器(一个网络时间标
准就足够了) , 也就没有绝对的方法来决定在分布式系统中事件的时间顺序 , ,所以“最迟“只
能是近似的 。我们通过给每个入口的每次修改附上一个时间戳来获得这种近似 。修改操作的
较迟的时间戳将设置成为当前的时间戳(1) 。
---------说明:
(1)时间在前后关系中是很有用的 , 因为它具有所希望的单调增加的属性和准确性的合理
程度的有效性 。任何其它的具有这些属性的排序方法也可以使用 , 可以选择“天天的时间“ ,
因为它轻易取得 。它的主要缺陷是它经常是手工设置(因而轻易产生错误) , 并且它在系统
服务中断时会停止 。随着计算机系统会调整来适应网络环境 , 使用一个独立的时间源将变得
更加普遍 。这已经在ARPANET的TENEX站点出现了 。
由于多于一个处理器DBMP上的时间戳的唯一性不能保证 , 所以一个“源处理器DBMP
“包含在每个时间戳中 。通过(武断地)排列处理器DBMP , 我们因而有唯一有序的时间
戳 。每个时间戳用(T,D)表示:T是时间 , D是处理器DBMP的标识符 。对于两个时间戳
(T1,D1)和(T2,D2),我们可得
(T1,D1)>(T2,D2)<=>(T1>T2)或者(T1=T2和D1>D2)
(T1,D1)可以被认为比(T2,D2)在时间上更迟一些 。
假如D1=D2和T1=T2 , 则认为这两个修改是对同一个修改请求的两个拷贝 。
为了确保时间戳的唯一性 , 每个独立的处理器DBMP对不同的修改操作附上不同的时
间 。这当然是可能的 , 即使时间单元的优点会限制在单一DBMP站点上的修改操作的频率 。
现在数据库的每一入口是一步:
E::=(S,V,T),

推荐阅读