分布式数据库管理系统 - 副本控制



本章探讨副本控制,它是维护所有站点数据一致性所必需的。我们将研究副本控制技术以及副本控制所需的算法。

如前所述,复制是分布式数据库中用于在不同站点存储数据表多个副本的技术。在多个站点拥有多个副本的问题在于维护数据一致性的开销,尤其是在更新操作期间。

为了在所有站点维护相互一致的数据,需要采用副本控制技术。副本控制有两种方法,即:

  • 同步复制控制
  • 异步复制控制

同步复制控制

在同步复制方法中,数据库是同步的,以便所有副本始终具有相同的值。请求数据项的事务将能够在所有站点访问相同的值。为了确保这种一致性,更新数据项的事务会扩展,以便它在数据项的所有副本中进行更新。通常,为此使用两阶段提交协议。

例如,让我们考虑一个数据表 PROJECT(PId, PName, PLocation)。我们需要运行一个事务 T1,如果 PLocation 为“Bombay”,则将其更新为“Mumbai”。如果没有副本,则事务 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;

异步复制控制

在异步复制方法中,副本并不总是维护相同的值。一个或多个副本可能存储过时的值,并且事务可能会看到不同的值。将所有副本更新到当前值的过程称为同步

一种流行的同步方法是存储转发方法。在这种方法中,一个站点被指定为主站点,其他站点为辅助站点。主站点始终包含更新的值。所有事务首先进入主站点。然后将这些事务排队,以便在辅助站点中应用。只有当事务计划在辅助站点上执行时,才使用推出方法更新辅助站点。

副本控制算法

一些副本控制算法包括:

  • 主从复制控制算法。
  • 分布式投票算法。
  • 多数一致算法。
  • 循环令牌算法。

主从复制控制算法

有一个主站点和“N”个从站点。主算法在主站点运行以检测冲突。从算法的一个副本在每个从站点运行。整个算法在以下两个阶段执行:

  • 事务接受/拒绝阶段 - 当事务进入从站点的交易监控器时,从站点会向主站点发送请求。主站点检查是否存在冲突。如果没有冲突,则主站点向从站点发送“ACK+”消息,然后从站点开始事务应用阶段。否则,主站点向从站点发送“ACK-”消息,然后从站点拒绝事务。

  • 事务应用阶段 - 进入此阶段后,事务进入的从站点向所有从站点广播请求以执行事务。在收到请求后,对等从站点执行事务并在完成后向请求的从站点发送“ACK”。在请求的从站点从其所有对等站点收到“ACK”消息后,它向主站点发送“DONE”消息。主站点理解事务已完成并将其从挂起队列中删除。

分布式投票算法

它包含“N”个对等站点,所有这些站点都必须“OK”事务才能开始执行。以下是该算法的两个阶段:

  • 分布式事务接受阶段 - 当事务进入站点的交易管理器时,它会向所有其他站点发送事务请求。在收到请求后,对等站点使用基于优先级的投票规则解决冲突。如果所有对等站点都“OK”事务,则请求的站点开始应用阶段。如果任何对等站点不“OK”事务,则请求的站点拒绝事务。

  • 分布式事务应用阶段 - 进入此阶段后,事务进入的站点向所有从站点广播请求以执行事务。在收到请求后,对等从站点执行事务并在完成后向请求的从站点发送“ACK”消息。在请求的从站点从其所有对等站点收到“ACK”消息后,它会让事务管理器知道事务已完成。

多数一致算法

这是分布式投票算法的一种变体,其中允许在大多数对等站点“OK”事务时执行事务。它分为三个阶段:

  • 投票阶段 - 当事务进入站点的交易管理器时,它会向所有其他站点发送事务请求。在收到请求后,对等站点使用投票规则测试冲突并将任何冲突的事务(如果有)保存在挂起队列中。然后,它发送“OK”或“NOT OK”消息。

  • 事务接受/拒绝阶段 - 如果请求的站点收到对事务的大多数“OK”,则它接受事务并向所有站点广播“ACCEPT”。否则,它向所有站点广播“REJECT”并拒绝事务。

  • 事务应用阶段 - 当对等站点收到“REJECT”消息时,它会将其事务从其挂起列表中删除并重新考虑所有延迟的事务。当对等站点收到“ACCEPT”消息时,它应用事务并拒绝挂起队列中与此事务冲突的所有延迟事务。它在完成后向请求的从站点发送“ACK”。

循环令牌算法

在这种方法中,系统中的事务使用循环令牌序列化并相应地针对数据库的每个副本执行。因此,所有事务都被接受,即没有被拒绝。它有两个阶段:

  • 事务序列化阶段 - 在此阶段,所有事务都安排以序列化顺序运行。每个站点中的每个事务都从一个连续序列中分配一个唯一的票证,指示事务的顺序。一旦事务被分配了一个票证,它就会被广播到所有站点。

  • 事务应用阶段 - 当站点收到事务及其票证时,它会根据其票证安排事务执行。事务执行完成后,该站点会广播相应的消息。当事务在所有站点完成执行时,该事务结束。

广告

© . All rights reserved.