索引更新管线的制作方法_3

文档序号:9602485阅读:来源:国知局
04)之后,在已经执行局部指令(508)之后,当已经确认全部指令时(510)等。变更请求的启动程序可指示期望什么级别的一致性,诸如最终一致性或直接一致性。
[0059]操作506描绘将复制日志中的指令传输到受影响的分区。实施方案可使用涉及将指令写到发送缓冲区的技术,发送缓冲区可保存指令,直到它们被发送到受影响的分区以及指令的接收被确认。单独的发送缓冲区可用于每个目的地分区。实施方案还可采用单个发送缓冲区,其包括使指令与其对应的目的地分区相关的信息。
[0060]将被发送到其它分区的指令中的一些或全部可适用于接收变更请求的分区。操作508描绘在接收变更请求的分区上执行这些指令。此外,操作508可涉及执行指令,以变更非局部索引或其它结构。例如,在图2A中,第一分区200可执行修改远程定位的分区或其它计算节点上的索引结构的指令。其它实施方案可通过将指令发送到托管结构的分区而导致非局部指令被执灯。
[0061]操作508可按图5中描绘的顺序执行,或其可在另一时间响应于变更请求的处理而被执行。例如,图5中描绘的操作可在单个执行线程上执行,操作508例外,操作508可在单独的执行线程上并行执行。实施方案可执行被描绘为508之后或操作508开始或完成之前的步骤。当被操作508执行的指令完成时,可相对于接收变更请求的分区而将它们标记为已提交。
[0062]继将指令写到发送缓冲区之后的一段时间,分区可接收指令已被分区接收且在接收分区上可被视为持久的确认,如操作510描绘。在一些实施方案中,在接收确认时可能尚未执行指令。然而,对于这些实施方案,确认证实目的地分区已经接受执行确认的指令的责任。例如,这可通过将接收指令写入由目的地分区维护的日志文件来完成。其它实施方案可延迟确认,直到指令已被处理。确认可包含在传输到发送分区的消息中,且可包括被执行的最后指令的LSN值。对于按顺序处理指令的实施方案,其足以指示具有较低的LSN值的指令也已被执行。
[0063]由分区接收的确认可为以下确认:已成功执行指令、有效执行指令(例如,其可被执行但是冗余的)、或在其处理期间发生错误。如本文中使用,术语被执行或执行可包括这些条件中的任何一个。在错误情况下,实施方案可提交指令或从日志文件移除指令(即使在错误条件发生),因为如果不这样,则可能重复发送导致错误的指令。实施方案可使用有关所接收的确认类型的附加信息来更新日志,以及可产生各种报告以帮助技术人员诊断错误条件并校正数据差异。实施方案可执行如下步骤:诸如将日志文件中的指令标记为在具有或不具有错误的情况下被执行,或从日志文件移除指令。
[0064]实施方案还可采用技术以检测日志文件中已保持未确认超过预期时段的指令。实施方案可从日志文件移除此类条目,或标记条目具有关于稍后诊断或数据差异的校正的状态信息。可被采用的技术是扫面复制日志中的指令、检查指令被发送的时间、以及跟踪复制日志中包含未确认指令的区域的各种组合。
[0065]在操作512,可相对于其目的地分区而将日志文件中与确认指令对应的指令标记为已提交。如果操作508也已被完成,则可将指令标记为已完全提交。在从故障和其它事件(诸如重新指定主机)中恢复之后,可重放日志文件中的条目。重放过程可重新发送未提交的指令,但跳过被提交的指令。
[0066]—些实施方案可通过更新日志文件中对应的条目而将指令标记为已提交。其它实施方案可能不更新日志文件。例如,一些实施方案可基于最后执行指令的记录而重放来自日志文件的指令。继最后执行指令之后的指令可被视为未提交,而在最后执行指令之前且包括最后执行指令的指令可被视为标记为已提交。
[0067]图6描绘用于配置发送和接收缓冲区的实施方案。发送分区600包括日志文件612和两个发送缓冲区608和610,其可存储在易失性存储器中。发送分区602 (包括日志文件618和发送缓冲区614和616)以类似于发送分区600的方式被配置,且以类似方式进行操作。
[0068]在一些实施方案中,分区可利用针对每个接收分区的一个发送缓冲区。为了说明目的,假设发送分区600和602各自已经接收变更请求。进一步假设每个变更请求暗示将指令传输到接收分区604和606中的每个。在图6中,这些假设被箭头标记的指令632和634反映。
[0069]密切地检查发送分区600,在接收前述段落中描述的示例变更请求之后,发送分区可导致将被定向到接收分区604和606的指令写到日志文件612且放置在对应的存储器内发送缓冲区608和610中,以最终传输到接收分区604和606。被放置在发送缓冲区中的指令可包括将被执行的指令的描述、指令应用到的数据结构的指示、以及诸如发送分区的LSN、PID的信息等。该信息可允许接收分区(诸如接收分区604和606)识别请求的来源,并确定接收指令应被处理的顺序。所述信息还可用于发送确认,并跟踪哪些指令已被执行,如在本文中关于图7进行描述。
[0070]在指令632已被写到日志文件612之后而在指令已被成功发送且由接收分区604和606处理之前,可能出现系统崩溃的情况。如果这样,当系统恢复时,可重放日志文件612中的条目,使得再次将指令632放置在发送缓冲区608和610中。
[0071]接收分区604包括索引624,为了说明目的,其可被视为指令632和634的目标中的一个。接收分区604还可包括用于每个分区的一个接收缓冲区,其可从每个分区接收指令。相应地,图6描绘了与发送分区600和602对应的两个接收缓冲区620和622。接收分区606 (包括接收缓冲区626和628以及索引630)以类似于接收分区604的方式被配置,并且以类似方式进行操作。
[0072]可将接收缓冲区620和622保存在易失性存储器中,且因此在系统故障的事件中,保存在缓冲区中的指令将丢失。然而,实施方案可通过重放系统日志条目而从系统故障恢复。如果图6中描绘的系统发生故障,则在恢复之后,可播放日志文件612和618,使得日志文件612和618中的未确认指令再次被发送到接收分区604并存储在接收缓冲区620和622 中。
[0073]—旦放置在接收缓冲区620和622中,所述指令可被执行。执行指令可涉及插入、更新、删除或以其它方式修改索引624中的条目。一旦指令已被执行,则可将其从接收缓冲区移除。在原子事务的上下文内,实施方案可执行指令并将其从接收缓冲区移除,以有助于避免指令被丢失或复制。
[0074]图7A描绘了在系统故障之后恢复接收缓冲区的内容的实施方案。虽然被描绘为操作的序列,但是本领域的普通技术人员将明白,所描绘的操作中的至少一些可被更改、省略、重新排序或并行执行。
[0075]在操作700,可从发送分区接收第一指令并将其放置在接收缓冲区中。所接收的指令可附有识别信息诸如PID、LSN等。实施方案还可采用全局唯一标识符(“⑶ID”)或类似机制。
[0076]在接收之后,可执行指令,如操作702描绘。执行指令可包括对接收分区上的索引和其它数据结构执行各种修改。例如,指令可包括从索引删除条目、将条目插入索引、更新索引中的值、更新项目值等。如本文中使用,术语指令可包括多个子指令。实施方案可将指令执行为原子集,使得完全执行全部子指令或不允许任何子指令生效。
[0077]在接收指令的成功执行之后,可更新反映指令的成功处理的记录,如操作704描绘。图7B描绘实施方案为此目的而采用的结构的非限制性实例。表750可由PID列752和LSN列754构成。实施方案可采用多种数据结构(诸如B树、数组等)以表示表。对于图7B中描绘的实施方案,表应为持久的,使得在系统故障的事件中,可恢复其内容。
[0078]PID值和LSN值的组合可唯一地识别指令。如本文解释,PID值可用于唯一地识别发送分区,而LSN值可指示源自发送分区的指令的序列。当组合时,两个值唯一地识别指令。
[0079]发送分区提供的LSN值可按顺序递增。发送分区的实施方案可独立于目的地分区使LSN值递增。因此,在各种实施方案中,发送分区产生的LSN值可按顺序递增,而接收值所见的LSN值可单调地增加,但对于给定的PID值,不一定顺序地增加。
[0080]对于包括两个发送分区的说明性实施方案,表750可包含与来自第一分区的被成功执行的最近指令对应的行756。一旦指令已变为持久,一些实施方案可更新行756,而非要求指令被完全执行。行758与行756类似,但与第二分区对应。
[0081]返回图7A,操作706描绘从发送分区接收第二指令。然而,在执行之前,系统故障708可能发生,从而导致第二指令在被执行之前从接收计算节点的存储器擦除。
[0082]图7B中描绘的记录PID值和LSN值可用于从系统故障708恢复,如在图7A中所见。系统故障可包括可能需要重新启动接收分区的各种事件。在重新启动之后,先前包含在接收分区接收缓冲区中的指令已擦除。
[0083]图7A中的操作710描绘恢复过程的开始。在一些情况下(诸如电源故障),一旦电源已恢复且托管分区的计算节点已重启,则恢复可开始。在一些情况下,可能已经选择新的主分区,在这种情况下,在开始恢复之前,可能已经将复制日志输送到新的主分区。
[0084]在操作712,接收分区可传输恢复请求,以获取未执行的指令。例如,图7B的表750指示与可能未处理指令的两个发送分区的关联性。接收分区可使用PID识别发送分区,并向其发送请求。例如,行756包含可用于确定发送分区的互联网协议(“IP”)地址的PID值。表750中描绘的值是说明性的,且可包含许多不同类型的值。
[0085]请求还可包括LSN值。LSN值源自每个分区,并且可随(例如)每个生成指令以1递增。因为LSN值单调地增加,所以其可用于识别尚未被执行的指令。例如,行756包含LSN值12。如果发送分区具有指令,其中LSN值大于12,则其将指示那些指令尚未被接收分区执行。相应地,发送分区可通过发送用于接收分区、具有大于包括在请求中的值的LSN值的指令而响
当前第3页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1