双重数据库的维护( 三 )


这里
S是前面所说的选择项,
V是与S相关的值,
T是入口的最迟改变的时间戳(一个上面所说的(T,D))
每个处理器DBMP的任务是根据收到的修改操作信息 , 保持数据库的拷贝是最新的 。
同时它必须确保它的每个入口和所有其它的DBMP的入口一致 。这必须实现 , 尽管它收到
的修改顺序不同于其它的处理器DBMP收到的修改顺序 。在本文的后面部分 , 我们将考虑
数据库的操作及它们对处理器DBMP进行处理的影响 。
赋值
首先 , 考虑对一个存在的入口赋值的情况 。当赋初值时 , 所涉及的处理器DBMP在本
地做出修改 , 并且创建一个包括修改入口和这个修改必须发送到的处理器DBMP的相关列
表的拷贝 。随着这个修改操作被传递到其它的处理器DBMP , 它们从列表中被移除 , 直到
没有余下的DBMP , 然后删除这个修改操作的拷贝 。这个分布式机制必须没有错误(例如
修改操作的接收必须在移除接收列表前确认) 。(2)
----------说明:
(2)这个相同的过程(本地修改和为远程分布的排队)当然可能是执行其它可能的数据库
操作 。本地修改如何安全进行 , 信息如何排列 , 传递如何进行等等的细节虽然重要但在这里
不进行讨论 。使用一个传递修改信息的地址表是很轻易实现 , 并且在实际的应用中也不是很
难 。
当一个DBMP接收一个赋值修改(本地的或者来自另外一个处理器DBMP) , 它拿修改
的时间戳和它自己的数据库中的拷贝的时间戳进行比较 , 并且保持这个修改操作根据上面的
定义在时间上是最迟的 。因而 , 当对给定入口的赋值分布在所有的处理器DBMP上时 , 它
们能够保证与那个入口相关的值时最新的 。
创建
实体的创建和删除会产生不止一个的问题 。注重创建先前的未知的实体 , 需要一个处理
器DBMP能够处理未知实体的赋值 。例如 , 考虑被处理器DBMPA创建的实体XYZ的情
况 , 事件的次序如下:处理器DBMPA告诉处理器DBMPB这个新的实体 , 然后处理器DBMP
B赋一个新值给XYZ;处理器DBMPB则在处理器DBMPC从处理器DBMPA获取创建信
息之前通知DBMPC 。处理器DBMPC必须保存XYZ的赋值直到它得知实体的创建 , 或者
简单的假设这个创建将会发生并立即使用这个“新”实体 。后者试图保持数据库尽可能是最
新的 , 但会导致失去一致性 。
删除
实体的删除是数据库系统的主要问题 。假如删除入口就马上把它从数据库中移除则会出
现问题 。考虑下面的情况:
XYZ是所有DBMP都知道的入口
XYZ在处理器DBMPA删除
XYZ在处理器DBMPB修改(在处理器DBMPB知道它被处理器DBMPA删除之前)
现在考虑处理器DBMPC , 它可能在处理器DBMPA之前得到处理器DBMPB的消息 , 在
这种情况下 , XYZ将在处理器DBMPC被删除 。然而处理器DBMPC也可能在处理器DBMP
B之前得到处理器DBMPA的消息 。在这种情况下 , 假如处理器DBMPC从数据库中移除
XYZ , 那么被处理器DBMPB初始赋值的XYZ将在处理器DBMPC的XYZ重新创建 。为
了防止这种情况 , 处理器DBMPC必须记住XYZ已经被删除直到它完全的忘记XYZ即不
再进行与XYZ相关的操作 。
这个问题的解决方法是不必实际的从数据库中移除入口 , 删除只是在这个入口作一个删
除的标记 。然而 , 接收被删除的入口的赋值的问题依然存在 。例如 , 处理器DBMPA可能
从处理器DBMPB接收一个赋值 , 而这个入口处理器DBMPA已经标记为删除了 。处理器

推荐阅读