确保分布式存储系统中导出数据的一致性的制作方法

文档序号:9564647阅读:576来源:国知局
确保分布式存储系统中导出数据的一致性的制作方法
【技术领域】
[0001]本公开涉及计算机系统的领域。更具体地,提供了用于确保分布式系统内导出数据的一致性的系统、方法和装置。
【背景技术】
[0002]大量的数据,诸如传统的RDBMS(关系型数据库管理系统),通常包括原始数据(或者主数据)和导出数据(或者次级数据)。导出数据指基于原始数据而改变或者计算的数据,并且可以包括次级或者本地的索引、计数器、具体的列或者字段等。当主数据被更新时(例如,作为数据查询的一部分),相关联的导出数据(如果存在)也自动被更新。
[0003]因为传统的RDBMS在整体存储引擎上存储所有数据(包括主数据和导出数据),对RDBMS内主数据和相关联的导出数据的更新可以作为满足ACID (原子性、一致性、独立性和持久性)的可靠的事务来执行。因此,当之后被读取时可能很多地或者并不关心导出数据(或者主数据)将处于不一致的状态。
[0004]然而,现在许多数据处理环境采用分布式存储架构,并且可以将主数据和相关联的导出数据彼此远离地存储一一使用不同的存储引擎存储在不同的设备上等。由于不可避免的通信延迟、必须经过的额外可能的故障点、对于数据的长期锁定的结果、和/或针对架构的其他因素,在这些环境中将非常难以实施可靠的事务。因此,在对其相关联的主数据更新以后确保分布式数据存储系统内导出数据的一致性可以是困难的。

【发明内容】

[0005]在本发明的一个实施例中,提供了一种确保在包括多个存储引擎的分布式数据存储系统中导出数据的一致性的方法,所述方法包括:在管理主数据的第一存储引擎处:执行写入由键标识的主数据的一部分的请求;以及传输执行的所述写入的结果至管理与所述键相关联的所述导出数据的第二存储引擎;以及在所述第二存储引擎处:接收包括所述键的执行的所述写入的所述结果;尝试更新与所述键相关联的所述导出数据;如果所述更新尝试失败,则在失败的更新的集合中记录所述键;以及如果所述更新尝试成功,如果存在包括所述键的记录的所述失败的更新的集合则清除包括所述键的记录的所述失败的更新的所述集合。
[0006]在本发明的一个实施例中,提供了一种用于确保导出数据的一致性的系统,包括:主数据存储引擎,所述主数据存储引擎管理主数据并且包括:至少一个处理器;以及存储指令的第一非瞬态计算机可读媒介,所述指令在由所述至少一个处理器执行时致使所述主数据存储引擎:执行写入由键标识的主数据的一部分的请求;以及传输执行的所述写入的结果至导出数据存储引擎;以及所述导出数据存储引擎,所述导出数据存储引擎管理所述导出数据并且包括:一个或者多个处理器;以及存储指令的第二非瞬态计算机可读媒介,所述指令在由所述一个或者多个处理器执行时,致使所述导出数据存储引擎:接收包括所述键的执行的所述写入的所述结果;尝试更新与所述键相关联的所述导出数据;如果所述更新尝试失败,则在失败的更新的集合中记录所述键;以及如果所述更新尝试成功,如果存在包括所述键的记录的所述失败的更新的集合则清除包括所述键的记录的所述失败的更新的所述集合。
[0007]在本发明的一个实施例中,提供了一种用于确保分布式数据存储系统内导出数据的一致性的装置,包括:存储在线应用的主数据的第一物理存储设备;存储所述在线应用的导出数据的第二物理存储设备;一个或者多个处理器;包括指令的导出数据更新逻辑,所述指令在由所述一个或者多个处理器执行时,致使所述装置:基于对由第一键标识的所述主数据的一部分的执行的写入的结果尝试更新所述存储的导出数据;其中所述结果包括所述第一键、对于所述键的第一值、和所述执行的写入的第一序列号;包括指令的失败的更新逻辑,所述指令在由所述一个或者多个处理器执行时,致使所述装置:如果对更新存储的所述导出数据的所述尝试失败,则将所述结果写入失败的更新的集合;以及包括指令的改变捕获逻辑,所述指令在由所述一个或者多个处理器执行时,致使所述装置:从主数据改变的流提取主数据改变,所述提取的主数据改变包括键和序列号;以及如果所述键匹配所述第一键并且所述序列号匹配所述第一序列号,则调用所述导出数据更新逻辑。
【附图说明】
[0008]图1是根据一些实施例描绘计算环境的框图。
[0009]图2A-2B是绘出根据一些实施例的确保分布式数据存储系统中导出数据的一致性的方法的流程图。
[0010]图3是绘出根据一些实施例的用于确保分布式数据存储系统中导出数据的一致性的装置的框图。
【具体实施方式】
[0011]呈现以下描述以使得本领域的技术人员制造和使用所公开的实施例,并且在一个或者多个特定应用及其需求的上下文中提供。对于所公开的实施例的各种修改对于本领域的技术人员将是显而易见的,并且在不背离所公开的内容的范围的情况下,在此定义的一般原理可以被应用于其他实施例和应用。因此,本发明不旨在被限制于所示的实施例,而是旨在符合与本公开一致的最广泛的范围。
[0012]在一些实施例中,提供了用于确保导出数据的一致性的系统、方法和装置。该系统是分布式数据存储系统或者包括分布式数据存储系统,其中数据的不同部分被存储于不同的位置、不同的数据存储设备上、不同的数据存储引擎的控制下等。特别地,主数据被存储在一个数据仓库中并且由主存储引擎(例如,数据库管理系统)管理,而导出数据被存储在另一数据仓库中,并且由导出存储引擎(例如,不同的数据库、文件系统)管理。导出数据和导出存储引擎可以可替代地分别被称为次级数据和次级存储引擎,并且可交换地使用术语“数据存储引擎”和“存储引擎”。
[0013]在该系统中,如所指定的,在查询和向主存储引擎提交的写操作中更新主数据,并且在对主数据的成功的写入后自动更新与被更新的主数据(如果存在)相关联的导出数据。对主数据和相关联的导出数据的更新不作为可靠的事务(即,满足ACID属性的事务)来执行,但是在此提供的方法确保导出数据的最终一致性,并且仍然允许写后读(read-after-write),这意味着用户或者客户端可以在主数据被写入后查询相关联的导出数据,并且可以期待收到正确的数据。
[0014]在一些实施例中,确保分布式数据存储系统中导出数据的一致性的方法包括,将对主数据写入的结果同步地发送至导出数据存储引擎,这意味着按照对主数据应用的写入的顺序,将结果直接地从主数据存储引擎发送至导出数据存储引擎。仅当对主数据的相应的写入成功时将结果发送至导出数据存储引擎。
[0015]在这些实施例中,对主数据的写入的结果包括键、键值和序列号。键标识在主存储引擎中被更新的主数据的字段、列、记录或者其他部分,键值提供键的字段/列/记录的新的值,以及序列号是由诸如Lamport时间戳的逻辑时钟产生的时间戳。如以下所示,此信息对于导出存储引擎来标识和正确地更新与键相关联的导出数据是足够的。
[0016]在接收到从主数据存储引擎直接地发送的写入结果后,次级数据存储引擎更新相关联的导出数据。如果对相关联的导出数据的更新失败,在“失败的写入记录器(FailedffritesRecorder) ”数据结构中做记录,该“失败的写入记录器”数据结构可以采取任何适当的形式(例如,列表、数组、队列),并且(例如,向主数据存储引擎)返回适当的失败消息。当对导出数据或者仅某些子集(例如,键、序列号)的更新失败时,从主存储引擎接收的整个写入结果可以存储在失败的写入记录器中。然而,如果具有相同键的记录已经存在于失败的写入记录器中,则因为任何之前的失败现在是毫无意义的,可以仅使用刚刚失败的更新尝试的序列号来更新记录。
[0017]如果对相关联的次级数据的更新成功,则返回合适的成功消息,并且此外,清除或者擦除与相同数据相关联的失败的写入记录器中的任何记录。特别地,导出存储引擎清除具有与成功应用的写入结果的键相同的键的记录。
[0018]除了将写入结果直接地传输至次级存储引擎之外,主存储引擎还在“改变捕获流”中记录主数据写入。在这些实施例中,并且顾名思义,该数据流可能以与直接发送至导出存储引擎的结果相同的形式(例如,如同以{键,值,序列号}形式的元组),来捕获所有对于主数据的改变(或者基本上所有的改变)。包括导出数据存储引擎的各种实体可以订阅或者监听该改变捕获流。
[0019]特别地,导出数据存储引擎订阅了该改变捕获流,并且因此不仅直接地接收主写入结果(来自主存储引擎),还经由该流接收主写入结果(稍后)。一旦经由改变捕获流接收到写入结果,导出存储引擎确定在失败的写入记录器中它是否具有与从该流提取的结果具有相同的键的任何记录。如果没有,则忽略该结果。
[0020]但是,如果在失败的写入记录器中存在具有与从该改变捕获流接收的结果相同的键和相关的序列号的记录,则导出数据存储引擎将重新应用该结果来更新导出数据,并且将从失败的写入记录器清除记录。可以多次尝试该更新直至它成功。
[0021]如上所述,当导出数据存储引擎成功地应用直接地从导出数据存储引擎(或者经由改变捕获流)接收的写入结果时,导出数据存储引擎清除失败的写入记录器。对于给定的键的给定的主写入结果的成功的应用使得涉及相同键的任何之前失败的更新无关。并且,因为同步地接收写入结果(在导出数据存储引
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1