- 分布式 DBMS 教程
- DDBMS - 主页
- DDBMS - DBMS 概念
- DDBMS - 分布式数据库
- 分布式数据库设计
- 分布式数据库环境
- DDBMS - 设计策略
- DDBMS - 分布透明度
- DDBMS - 数据库控制
- 分布式数据库管理系统安全
- 数据库安全与密码学
- 分布式数据库的安全性
- 分布式 DBMS 资源
- DDBMS - 快速指南
- DDBMS - 有用的资源
- DDBMS - 讨论
分布式 DBMS - 复制控制
本章探讨复制控制,这是在所有站点中维护一致数据所必需的。我们将研究复制控制技术以及复制控制所需的算法。
如前所述,复制是分布式数据库中使用的一种技术,用于在不同站点存储数据表的多个副本。在多个站点中拥有多个副本的问题是维护数据一致性的开销,特别是在更新操作期间。
为了保持所有站点的数据相互一致,需要采用复制控制技术。复制控制有两种方法,即 -
- 同步复制控制
- 异步复制控制
同步复制控制
在同步复制方法中,数据库是同步的,因此所有复制始终具有相同的值。请求数据项的事务将有权访问所有站点中的相同值。为了确保这种一致性,更新数据项的事务被扩展,以便它在数据项的所有副本中进行更新。通常,使用两阶段提交协议来达到此目的。
例如,让我们考虑一个数据表 PROJECT(PId, PName, PLocation)。如果 PLocation 是“孟买”,我们需要运行事务 T1 将 PLocation 更新为“孟买”。如果没有复制,事务 T1 中的操作将是 -
Begin T1: Update PROJECT Set PLocation = 'Mumbai' Where PLocation = 'Bombay'; End T1;
如果数据表在站点 A 和站点 B 中有两个副本,则 T1 需要生成与这两个站点对应的两个子项 T1A 和 T1B。扩展后的交易 T1 将是 -
Begin T1: Begin T1A : Update PROJECT Set PLocation = 'Mumbai' Where PLocation = 'Bombay'; End T1A; Begin T2A : Update PROJECT Set PLocation = 'Mumbai' Where PLocation = 'Bombay'; End T2A; End T1;
异步复制控制
在异步复制方法中,副本并不总是保持相同的值。一个或多个副本可能存储过时的值,并且事务可以看到不同的值。使所有副本达到当前值的过程称为同步。
一种流行的同步方法是存储转发方法。在这种方法中,一个站点被指定为主站点,其他站点被指定为辅助站点。主站点始终包含更新的值。所有的交易首先进入主站点。然后,这些事务将在辅助站点中排队等待应用。仅当计划在辅助站点上执行事务时,才使用转出方法更新辅助站点。
复制控制算法
一些复制控制算法是 -
- 主从复制控制算法。
- 分布式投票算法。
- 多数共识算法。
- 流通代币算法。
主从复制控制算法
有 1 个主站点和“N”个从站点。主算法在主站点运行以检测冲突。从属算法的副本在每个从属站点运行。整体算法分以下两个阶段执行 -
事务接受/拒绝阶段- 当事务进入从站点的事务监视器时,从站点向主站点发送请求。主站点检查冲突。如果没有任何冲突,主站将向从站发送“ACK+”消息,然后从站开始事务申请阶段。否则,主设备将向从设备发送“ACK-”消息,然后从设备拒绝该事务。
事务应用阶段- 进入此阶段后,事务已进入的从站站点向所有从站广播执行事务的请求。收到请求后,对等从属设备执行事务并在完成后向发出请求的从属设备发送“ACK”。请求从站收到来自所有对等方的“ACK”消息后,它会向主站发送“DONE”消息。主设备知道事务已完成并将其从待处理队列中删除。
分布式投票算法
这由“N”个对等站点组成,所有这些站点都必须在事务开始执行之前“确定”该事务。以下是该算法的两个阶段 -
分布式事务接受阶段- 当事务进入站点的事务管理器时,它会向所有其他站点发送事务请求。收到请求后,对等站点使用基于优先级的投票规则解决冲突。如果所有对等站点都对事务“OK”,则请求站点开始申请阶段。如果任何对等站点未“确定”事务,则请求站点将拒绝该事务。
分布式事务应用阶段- 进入此阶段后,事务进入的站点向所有从站广播执行事务的请求。收到请求后,对等从属设备执行事务并在完成后向发出请求的从属设备发送“ACK”消息。在发出请求的从属设备收到来自所有对等方的“ACK”消息后,它会让事务管理器知道事务已完成。
多数共识算法
这是分布式投票算法的一种变体,在分布式投票算法中,当大多数节点“OK”交易时,交易就被允许执行。这分为三个阶段 -
投票阶段- 当交易进入站点的交易管理器时,它会向所有其他站点发送交易请求。收到请求后,对等站点使用投票规则测试冲突,并将冲突的事务(如果有)保留在待处理队列中。然后,它发送“OK”或“NOT OK”消息。
交易接受/拒绝阶段- 如果请求站点收到交易的多数“OK”,则它接受交易并向所有站点广播“ACCEPT”。否则,它向所有站点广播“REJECT”并拒绝交易。
交易应用阶段- 当对等站点收到“拒绝”消息时,它会从其待处理列表中删除该交易,并重新考虑所有推迟的交易。当对等站点收到“接受”消息时,它会应用该事务并拒绝待处理队列中与该事务冲突的所有延迟事务。完成后,它会向发出请求的从机发送“ACK”。
流通代币算法
在这种方法中,系统中的事务使用循环令牌进行序列化,并针对数据库的每个副本相应地执行。因此,所有交易都被接受,即没有交易被拒绝。这有两个阶段 -
事务序列化阶段- 在此阶段,所有事务都计划按序列化顺序运行。每个站点中的每笔交易都会被分配一个来自连续序列的唯一票证,指示交易的顺序。一旦交易被分配了票证,它就会被广播到所有站点。
交易应用阶段- 当站点收到交易及其票据时,它会根据其票据放置交易以执行。交易完成执行后,该站点会广播适当的消息。当事务在所有站点中完成执行时结束。