CN105320722A - 确保分布式存储系统中导出数据的一致性 - Google Patents
确保分布式存储系统中导出数据的一致性 Download PDFInfo
- Publication number
- CN105320722A CN105320722A CN201510092962.9A CN201510092962A CN105320722A CN 105320722 A CN105320722 A CN 105320722A CN 201510092962 A CN201510092962 A CN 201510092962A CN 105320722 A CN105320722 A CN 105320722A
- Authority
- CN
- China
- Prior art keywords
- data
- key
- write
- derived data
- record
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2365—Ensuring data consistency and integrity
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/16—Error detection or correction of the data by redundancy in hardware
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/13—File access structures, e.g. distributed indices
- G06F16/134—Distributed indices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/82—Solving problems relating to consistency
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/835—Timestamp
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Computer Security & Cryptography (AREA)
- Quality & Reliability (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及确保分布式存储系统中导出数据的一致性。具体地,提供了用于确保分布式数据存储系统中与主数据相关的导出数据的一致性的系统、方法和装置。主数据和导出数据存储在数据存储系统的单独的组件上,和/或由数据存储系统的单独的组件(诸如不同的存储引擎)管理。如在写入请求中所指定的主数据被写入和被更新,其可以是在主存储引擎所主导的查询。主数据写入的结果被直接传送至导出存储引擎。如果对导出数据的更新失败,做出记录;如果更新成功,清除对相同数据的任何记录的失败的写入。导出存储引擎还经由影响主数据的事件的改变捕获流接收写入结果,并且可以使用写入结果的这些拷贝来修复失败的更新,并且从失败的写入记录中清除失败。
Description
技术领域
本公开涉及计算机系统的领域。更具体地,提供了用于确保分布式系统内导出数据的一致性的系统、方法和装置。
背景技术
大量的数据,诸如传统的RDBMS(关系型数据库管理系统),通常包括原始数据(或者主数据)和导出数据(或者次级数据)。导出数据指基于原始数据而改变或者计算的数据,并且可以包括次级或者本地的索引、计数器、具体的列或者字段等。当主数据被更新时(例如,作为数据查询的一部分),相关联的导出数据(如果存在)也自动被更新。
因为传统的RDBMS在整体存储引擎上存储所有数据(包括主数据和导出数据),对RDBMS内主数据和相关联的导出数据的更新可以作为满足ACID(原子性、一致性、独立性和持久性)的可靠的事务来执行。因此,当之后被读取时可能很多地或者并不关心导出数据(或者主数据)将处于不一致的状态。
然而,现在许多数据处理环境采用分布式存储架构,并且可以将主数据和相关联的导出数据彼此远离地存储——使用不同的存储引擎存储在不同的设备上等。由于不可避免的通信延迟、必须经过的额外可能的故障点、对于数据的长期锁定的结果、和/或针对架构的其他因素,在这些环境中将非常难以实施可靠的事务。因此,在对其相关联的主数据更新以后确保分布式数据存储系统内导出数据的一致性可以是困难的。
发明内容
在本发明的一个实施例中,提供了一种确保在包括多个存储引擎的分布式数据存储系统中导出数据的一致性的方法,所述方法包括:在管理主数据的第一存储引擎处:执行写入由键标识的主数据的一部分的请求;以及传输执行的所述写入的结果至管理与所述键相关联的所述导出数据的第二存储引擎;以及在所述第二存储引擎处:接收包括所述键的执行的所述写入的所述结果;尝试更新与所述键相关联的所述导出数据;如果所述更新尝试失败,则在失败的更新的集合中记录所述键;以及如果所述更新尝试成功,如果存在包括所述键的记录的所述失败的更新的集合则清除包括所述键的记录的所述失败的更新的所述集合。
在本发明的一个实施例中,提供了一种用于确保导出数据的一致性的系统,包括:主数据存储引擎,所述主数据存储引擎管理主数据并且包括:至少一个处理器;以及存储指令的第一非瞬态计算机可读媒介,所述指令在由所述至少一个处理器执行时致使所述主数据存储引擎:执行写入由键标识的主数据的一部分的请求;以及传输执行的所述写入的结果至导出数据存储引擎;以及所述导出数据存储引擎,所述导出数据存储引擎管理所述导出数据并且包括:一个或者多个处理器;以及存储指令的第二非瞬态计算机可读媒介,所述指令在由所述一个或者多个处理器执行时,致使所述导出数据存储引擎:接收包括所述键的执行的所述写入的所述结果;尝试更新与所述键相关联的所述导出数据;如果所述更新尝试失败,则在失败的更新的集合中记录所述键;以及如果所述更新尝试成功,如果存在包括所述键的记录的所述失败的更新的集合则清除包括所述键的记录的所述失败的更新的所述集合。
在本发明的一个实施例中,提供了一种用于确保分布式数据存储系统内导出数据的一致性的装置,包括:存储在线应用的主数据的第一物理存储设备;存储所述在线应用的导出数据的第二物理存储设备;一个或者多个处理器;包括指令的导出数据更新逻辑,所述指令在由所述一个或者多个处理器执行时,致使所述装置:基于对由第一键标识的所述主数据的一部分的执行的写入的结果尝试更新所述存储的导出数据;其中所述结果包括所述第一键、对于所述键的第一值、和所述执行的写入的第一序列号;包括指令的失败的更新逻辑,所述指令在由所述一个或者多个处理器执行时,致使所述装置:如果对更新存储的所述导出数据的所述尝试失败,则将所述结果写入失败的更新的集合;以及包括指令的改变捕获逻辑,所述指令在由所述一个或者多个处理器执行时,致使所述装置:从主数据改变的流提取主数据改变,所述提取的主数据改变包括键和序列号;以及如果所述键匹配所述第一键并且所述序列号匹配所述第一序列号,则调用所述导出数据更新逻辑。
附图说明
图1是根据一些实施例描绘计算环境的框图。
图2A-2B是绘出根据一些实施例的确保分布式数据存储系统中导出数据的一致性的方法的流程图。
图3是绘出根据一些实施例的用于确保分布式数据存储系统中导出数据的一致性的装置的框图。
具体实施方式
呈现以下描述以使得本领域的技术人员制造和使用所公开的实施例,并且在一个或者多个特定应用及其需求的上下文中提供。对于所公开的实施例的各种修改对于本领域的技术人员将是显而易见的,并且在不背离所公开的内容的范围的情况下,在此定义的一般原理可以被应用于其他实施例和应用。因此,本发明不旨在被限制于所示的实施例,而是旨在符合与本公开一致的最广泛的范围。
在一些实施例中,提供了用于确保导出数据的一致性的系统、方法和装置。该系统是分布式数据存储系统或者包括分布式数据存储系统,其中数据的不同部分被存储于不同的位置、不同的数据存储设备上、不同的数据存储引擎的控制下等。特别地,主数据被存储在一个数据仓库中并且由主存储引擎(例如,数据库管理系统)管理,而导出数据被存储在另一数据仓库中,并且由导出存储引擎(例如,不同的数据库、文件系统)管理。导出数据和导出存储引擎可以可替代地分别被称为次级数据和次级存储引擎,并且可交换地使用术语“数据存储引擎”和“存储引擎”。
在该系统中,如所指定的,在查询和向主存储引擎提交的写操作中更新主数据,并且在对主数据的成功的写入后自动更新与被更新的主数据(如果存在)相关联的导出数据。对主数据和相关联的导出数据的更新不作为可靠的事务(即,满足ACID属性的事务)来执行,但是在此提供的方法确保导出数据的最终一致性,并且仍然允许写后读(read-after-write),这意味着用户或者客户端可以在主数据被写入后查询相关联的导出数据,并且可以期待收到正确的数据。
在一些实施例中,确保分布式数据存储系统中导出数据的一致性的方法包括,将对主数据写入的结果同步地发送至导出数据存储引擎,这意味着按照对主数据应用的写入的顺序,将结果直接地从主数据存储引擎发送至导出数据存储引擎。仅当对主数据的相应的写入成功时将结果发送至导出数据存储引擎。
在这些实施例中,对主数据的写入的结果包括键、键值和序列号。键标识在主存储引擎中被更新的主数据的字段、列、记录或者其他部分,键值提供键的字段/列/记录的新的值,以及序列号是由诸如Lamport时间戳的逻辑时钟产生的时间戳。如以下所示,此信息对于导出存储引擎来标识和正确地更新与键相关联的导出数据是足够的。
在接收到从主数据存储引擎直接地发送的写入结果后,次级数据存储引擎更新相关联的导出数据。如果对相关联的导出数据的更新失败,在“失败的写入记录器(FailedWritesRecorder)”数据结构中做记录,该“失败的写入记录器”数据结构可以采取任何适当的形式(例如,列表、数组、队列),并且(例如,向主数据存储引擎)返回适当的失败消息。当对导出数据或者仅某些子集(例如,键、序列号)的更新失败时,从主存储引擎接收的整个写入结果可以存储在失败的写入记录器中。然而,如果具有相同键的记录已经存在于失败的写入记录器中,则因为任何之前的失败现在是毫无意义的,可以仅使用刚刚失败的更新尝试的序列号来更新记录。
如果对相关联的次级数据的更新成功,则返回合适的成功消息,并且此外,清除或者擦除与相同数据相关联的失败的写入记录器中的任何记录。特别地,导出存储引擎清除具有与成功应用的写入结果的键相同的键的记录。
除了将写入结果直接地传输至次级存储引擎之外,主存储引擎还在“改变捕获流”中记录主数据写入。在这些实施例中,并且顾名思义,该数据流可能以与直接发送至导出存储引擎的结果相同的形式(例如,如同以{键,值,序列号}形式的元组),来捕获所有对于主数据的改变(或者基本上所有的改变)。包括导出数据存储引擎的各种实体可以订阅或者监听该改变捕获流。
特别地,导出数据存储引擎订阅了该改变捕获流,并且因此不仅直接地接收主写入结果(来自主存储引擎),还经由该流接收主写入结果(稍后)。一旦经由改变捕获流接收到写入结果,导出存储引擎确定在失败的写入记录器中它是否具有与从该流提取的结果具有相同的键的任何记录。如果没有,则忽略该结果。
但是,如果在失败的写入记录器中存在具有与从该改变捕获流接收的结果相同的键和相关的序列号的记录,则导出数据存储引擎将重新应用该结果来更新导出数据,并且将从失败的写入记录器清除记录。可以多次尝试该更新直至它成功。
如上所述,当导出数据存储引擎成功地应用直接地从导出数据存储引擎(或者经由改变捕获流)接收的写入结果时,导出数据存储引擎清除失败的写入记录器。对于给定的键的给定的主写入结果的成功的应用使得涉及相同键的任何之前失败的更新无关。并且,因为同步地接收写入结果(在导出数据存储引擎和改变捕获流两处),不存在将对于主数据的与较早写入相关联的更新应用在与之后的写入相关联的更新之上的危险。
因此,遵循如下:到导出存储引擎从改变捕获流接收具有特定键的写入结果的时候,与相同的键相关联的并且在主数据存储引擎处从较早的写入所产生的写入结果将已经在导出数据存储引擎处被接收和尝试。因此,失败的写入记录器不应当具有这样的记录,该记录与当前从改变捕获流提取的结果相同的键以及较老的或者较早的序列号。
然而,失败的写入记录器可以具有与刚刚从改变捕获流接收的结果相比有着相同的键和较新的或者较近的序列号的记录。在此情况下,导出存储引擎忽略所提取的结果。当从主存储引擎直接地接收新的写入结果并且成功地应用该新的写入结果时,或者当从流接收对应于失败的写入记录器的记录的写入结果时,导出数据将反而被修正。
因此,在本发明的一些实施例中,按照成功地执行对相关联的主数据的写入的顺序,同步地执行对于导出数据的写入(或者被尝试的写入)。当直接地接收之后的写入时或者当通过改变捕获流接收相同的写入的通知时,在对导出数据的被尝试的写入失败后,异步地执行导出数据的修正或者修复。
图1是根据一些实施例的描述分布式数据存储系统并且如上所述可以确保导出数据的一致性的计算环境的框图。
在这些实施例中,系统110是数据中心(或者是数据中心的一部分)或者计算机资源的其他集合,它承载了帮助成员创建、发展和维护,例如由LinkedIn公司提供的,专业的(和个人的)关系的专业网络服务或者社交网络服务。在其他实施例中,系统110可以支持或者承载存储、维护和发布几乎任何类型的内容的应用、服务或者网站。
由系统110承载的服务的用户经由客户端设备连接至该系统,该客户端设备可以是固定的(例如,台式电脑、工作站)和/或移动的(例如,智能电话、平板电脑、膝上电脑)。客户端设备运行适当的客户端应用,诸如为了访问由系统110提供的服务而具体设计的浏览器程序或者应用,以便显示由该系统向它们服务的内容。
由系统110服务的内容包括状态更新、消息、广告、提供、公告、工作列表、新闻、信息性文章、其他用户的活动等,并且可以是或者可以包括任何类型的媒体(例如,文本、图形、图像、视频、音频)。由系统110公布或者服务的内容项目可以包括由系统的服务的用户生成的内容和/或用于向这些服务的用户交付的由第三方提供的内容。
因为可以要求系统110的用户向该系统注册以便完全访问可用的服务,系统110的用户可以被称为成员。可以通过用户名、电子邮件地址、电话号码和/或一些其他独特的标识符来标识和区分成员。
通常通过入口112来进行交互式的用户/成员会话,该入口112可以包括应用服务器和/或一些其他网关或者入口点。通过其建立给定的会话的入口可以取决于成员的设备或者连接的方法。例如,移动客户端设备的用户与台式机或者工作站电脑的用户相比可以经由不同的入口(或者入口的集合)连接至系统110。
系统110还包括简档服务器114、内容服务器115、追踪服务器118和包括多个存储引擎122的分布式数据存储系统120。
不同的存储引擎可以是不同的类型或者相同的类型,并且给定的存储引擎可以远离另一存储引擎。说明性的存储引擎包括OracleRDBMS(关系型数据库管理系统)、MySQL、文件系统和/或包括或者管理数据仓库的其他实体。单独的数据存储设备(例如,磁盘,固态驱动器)可以是单独的存储引擎122的一部分和/或可以是被耦合至分布式数据存储系统120内的引擎122的单独的实体。
简档服务器114维护由系统110承载的服务的成员的简档,这些简档可以存储在分布式数据存储系统120中或者别处。个体成员的简档可以反映该成员的任意数量的属性或者特征,包括个人的(例如,性别、年龄或者年龄范围、兴趣、爱好、成员ID)、专业的(例如,雇佣状况、职位名称、职能范围或者行业、雇主、技能、背书、专业奖项)、社交的(例如,用户是其成员的组织、居住的地理区域、朋友)、教育的(例如,学位、就读的大学、其他培训)等。成员的简档,或者成员的简档的属性或者维度,可以由系统组件以各种方式来使用(例如,以识别发送信息者、以识别状态更新的接收者、以选择内容来服务于成员或者相关联的成员、以记录内容交付事件)。
组织也可以是服务的成员(即,除了个人以外),并且可以具有相关联的描述或者包括诸如行业(例如,信息产业、制造业、金融业)、规模、位置、目标等属性的简档。“组织”可以是公司、企业、合伙企业、事务所、政府机关或者实体、非营利性实体、在线社区(例如,用户组)或者出于几乎任何目的(例如,专业的、社交的、教育的)而形成的一些其他实体。
内容服务器116维护用于向成员提供的内容项目、内容项目的索引、和/或在向成员提供内容中有用的其他信息。一些或者全部的内容项目和索引可以存储于分布式数据存储系统120内和/或别处(例如,图1中未示出的内容存储)。用作说明地,内容服务器116可以每天服务于数以亿计的项目的订单。内容服务器115可以包括用于推荐将向成员提供的内容的推荐模块,或者可以由系统110的一些其他组件生成推荐(图1中未示出)。
在分布式数据存储系统120中和/或其他位置处,追踪服务器118监控和记录系统110和/或成员的活动。例如,每当内容从系统提供时(例如,向客户端设备),追踪服务器知晓提供了何物、向谁提供(例如,哪个成员)、何时被提供、和/或其他信息。类似地,追踪服务器也接收关于内容的成员动作的通知,以包括所作用于的成员和内容的身份、采取的动作、何时采取动作等。可以捕获的说明性的动作包括但不限于,(在内容上,在标识或者图像上)点击/敲打/捏、转换、后续的请求、访问与主题或者内容的提供者相关联的网页、采取关于内容的一些其他的动作(例如,对内容进行评论、分享内容、关注内容的提供者、喜欢内容)等。
因此,对于多个重要类型的动作中的每一种重要类型,事件被触发、被传递至追踪服务器,并且可以存储于分布式数据存储系统120中。一些事件从系统组件被接收,而其他事件从客户端设备和/或系统110外部的其他设备被接收。在此所述的实施例中,追踪服务器118接收大量的事件。在一些说明性的场景中,在一天中在追踪服务器接收的事件的数量可以超过十亿。
系统110可以包括图1中未示出的其他组件。例如,在一些实施例中,系统110包括存储代表成员的关联/连接/关系的连接服务器。用作说明地,成员的关联可以被存储为图,其中每一个节点对应于一个成员或者用户,并且两个节点之间每一条边对应于由两个节点代表的成员/用户之间的关系。由系统110提供的服务的成员的网络可以数以千万计或者数以亿计,并且成员的关联的图可以存储在分布式数据存储系统120的一个或者多个组件上和/或别处。
由系统110承载的服务的成员在系统上具有相应的页面(例如,网页,内容页面),他们可以使用该页面来促进他们与系统以及彼此间的活动,以形成与其他成员的连接/关系,通知他们的生活和/或工作发展中的朋友和/或同事。这些页面(或者经由这些页面向成员提供的信息)对于一些或者所有其他成员可见。成员的页面可以存储在分布式数据存储系统120内和/或别处。
系统110的功能可以以可替代的方式,诸如通过合并或者进一步地划分一个或者多个组件的功能,分布在其组件之中或者可以分布在组件的不同集合中。然而,当在图1中描绘为单独的和独立的硬件组件(例如,计算机服务器)时,入口112、简档服务器114、内容服务器116和追踪服务器118中的一个或者多个可以可替代地被实现为运行在一个或者多个计算机服务器上的单独的软件模块。因此,尽管图1中仅图示了系统110的特定组件的单一实例,应当理解,可以运用一些或者全部组件的多个实例。
应当理解,分布式数据存储系统120和存储引擎122可以存储由系统110的其他组件使用的一些或者全部的数据。
例如,在一个说明性的实现中,存储在分布式数据存储系统中的主数据是或者包括具有作为键的成员ID的成员简档,并且导出数据可以是允许一个人从他的或者她的简档的一个或者多个字段查询成员ID的次级索引。在本实现中,每当给定的成员更新他的或者她的简档时,可以应用本发明的实施例来确保导出数据被正确地更新。
在另一说明性的实现中,主数据包括具有作为键的文章标识符的文章(例如,来自报纸、期刊、博客),并且导出数据或者次级数据可以是与该文章有关或者相关联的照片、图像和/或其他(图示的)内容。在此实现中,当新的文章被接收或者被公布,或者现有的文章被编辑时,可以调用推荐模块来识别一个或者多个图形以作为次级数据与该文章相关联。
在另一说明性的实现中,主数据包括成员之间连接的记录,该记录具有包括共享连接的一个或者两个成员的标识符的键,并且次级数据可以是对于每一个成员的连接的计数器。每当两个成员建立新的连接并且该连接被添加到连接数据的仓库(例如,数据库或者社交图的其他仓库)时,对于两个成员的次级数据被更新。
在又一说明性的实现中,主数据包括具有作为键的消息ID的去往成员、来自成员和/或成员之间的消息(例如,电子邮件消息、即时消息、成员页面上的发帖)。在本实现中,导出数据可以包括对于每一个成员、对于每一个讨论线程、对于成员页面上的每一个发帖等的消息ID的列表。
因此,在分布式数据存储系统120内,一些数据可以被认为是,诸如当事件被记录时、当成员更新他的或者她的简档时、当成员间的新的连接被创建时等,响应于向存储系统120提交的查询或者写入操作而更新的主数据。数据存储系统120还包括导出数据或者次级数据,当相关联的主数据被更新时,该导出数据或者次级数数据被自动更新,并且该导出数据或者次级数据可以或者不可以由用户查询直接写入。
在图1所反映的本发明的实施例中,对于一个或者多个应用或者服务的主数据由存储引擎122a管理,而相关联的次级数据由存储引擎122b管理。因此,在此所述的方法适用于其中主数据和导出数据在单独的设备/组件/机器上存储,并且可以或者不可以是彼此远离的系统。然而,当主数据和导出数据被存储在一起时也可以应用该方法。
图2A-B包括根据一些实施例图示确保分布式数据存储系统内导出数据的一致性的方法的流程图。
在这些实施例中,分布式数据存储系统包括多个存储引擎,其中之一管理对于特定应用或者服务的主数据,以及其中之一管理对于相同应用或者服务的导出数据或者次级数据。该存储引擎可以或者不可以彼此远离。
在操作202中,主数据存储引擎接收可能作为对应用或者服务的数据的请求的一部分的写入请求。该请求可以直接从用户/客户端设备接收,或者可以经由描绘分布式数据存储系统并且承载应用或者服务的数据中心或者系统的一些其他组件接收。
在操作204中,主数据存储引擎对具体的主数据执行所请求的写入,该写入改变一个或者多个列(或者字段)和记录中的值。
在操作206中,主数据存储引擎确定写入是否成功。如果成功,方法进行至操作220。否则,在操作210中将失败消息返回给写入请求的发起者并且方法结束。
在操作220中,生成了主数据写入操作的结果,该结果说明性地以包括键、键值和序列号SCN的元组的形式。键通过列、字段和/或其他标识符标识被写入的主数据的部分,而值是当前存储在主数据的键部分中的值。
在这些实施例中序列号是独特地并且循序地标识在主数据存储引擎的主数据上成功执行的写入操作的逻辑时间戳。因此,任意两个写入操作的基于时间的顺序可以通过比较他们的序列号来确定。具有较早的或者较老的时间戳的操作可以在具有较晚的或者较新的时间戳的操作之前执行。
在操作222中,作为结果的元组被直接转发至维护与被写入的主数据相关联的导出数据的存储引擎(即,导出数据存储引擎)。应当注意,在一些实现中,不同的存储引擎可以存储对于应用或者服务的导出数据的不同部分。
在操作224中,主数据存储引擎还将写入结果添加至“改变捕获流”,该“改变捕获流”是对于主数据应用的成功的写入操作的结果的数据流。包括导出数据存储引擎的各种实体订阅该流。
图2A因此根据一些实施例说明主数据存储引擎的动作,该动作可以被描绘为对于在操作202中接收的写入请求而言,可能除了来自导出数据存储引擎的成功或者失败的消息以外,在操作224之后结束。
图2B描绘了导出数据存储引擎的动作。尽管图示为对于两个存储引擎的操作的离散的集合,应当理解,如同应用或者服务继续操作,图2A-B中所示的操作对于不同的写入请求将被连续地执行。因此,将会理解,从图2A的操作222和224分别逻辑地流向图2B的操作242和262。
在操作242中,导出数据存储引擎接收主写入的结果,该结果包括主数据键、新的键值和主写入操作的序列号。
在操作244中,导出存储引擎试图写入或者更新与主数据键相关联的导出数据。在这些实施例中,基于连同主写入结果被接收的键和值,使用关于哪个导出数据将更新以及如何更新该数据的指令对导出数据存储引擎进行编程。
在操作246中导出数据存储引擎确定更新是否成功。如果没有,方法在操作250继续;否则,该方法进行至操作260。
在操作250中,导出数据存储引擎在失败的写入记录器的数据结构(例如,列表、数组、队列)中记录失败。引擎确定失败的写入记录器是否已经包括具有与在操作242中接收的写入结果中所接收的相同键的记录。如果是,该记录被更新为将其现有的(老的)序列号改变为在操作242中接收的写入结果的序列号。如果不是,一些或者全部的写入结果被存储为新的记录。在说明性的实施例中,失败的写入记录器极少地,如果存在的话,包含对于特定键的多于一个的记录。
在操作250之后,该方法结束,尽管当经由改变捕获流接收相同的写入结果时,该方法反而可以被认为进行至操作262。
在操作260中,因为对相关联的导出数据的写入成功,与相同键相关联的之前的失败是毫无意义的;因此失败的写入记录器中的具有相同键的任何记录被清除或者被删除。在操作260之后,尽管可以返回成功的消息至主数据存储引擎,所示的方法对于当前的主数据写入结果而言结束。
在操作262中,导出数据存储引擎通过改变捕获数据流而不是直接从主数据存储引擎而接收相同的写入结果。
在操作264中,导出数据存储引擎确定失败的写入记录器中的任何记录是否具有与写入结果中的键相同的键。如果不是,该方法对于该写入结果结束。如果是,该方法在操作266继续。
在操作266中,导出存储引擎确定在步骤264中找到的失败的写入记录是否具有与写入结果的序列号相同的序列号。如果不是,该方法结束;否则,该方法在操作268继续。
在操作268中,写入结果的键和值被用于修正或者修复相关联的导出数据。如果有必要,可以多次尝试该修复直至其成功。如果在若干次或者多次尝试后该修复不能成功,可能存在严重的错误(例如,磁盘失效),该严重的错误将由其他过程确定并且不能由导出数据存储引擎修复。如果对应于当前写入尝试的存储引擎或者应用或者服务必须被重启,则可以使用改变捕获流来确保主数据和导出数据的一致性。
在操作268之后,所示的方法进行至操作260,以清除失败的写入记录的失败的写入记录器。
在一些实施例中,每当失败的写入记录器为空时,导出数据存储引擎可以忽视改变捕获流内的事件(例如,在操作262)或者甚至可以取消对该流的订阅。在后一种情况中,当下一次导出数据更新失败时,引擎将重新订阅该流。
图3根据一些实施例描绘用于确保分布式数据存储系统内导出数据的一致性的装置。
图3的装置300包括处理器302、存储器304和存储306,存储306可以包括一个或者多个光的、固态的和/或磁的存储组件。存储306可以是在装置的本地或者远端。装置300可以被耦合至(永久地或者临时地)键盘312、定点设备314和显示器316。
多个装置300可以存储相关的或者相关联的数据,并且共同处理和应用对数据的查询,包括读取和写入操作。例如,一个装置可以存储应用或者服务的主数据,而另一装置存储对于相同应用或者服务的导出数据。
除了数据322以外,存储306还存储可以被加载进存储器304用于被处理器302执行的逻辑。这样的逻辑包括操作逻辑324和通信逻辑326。在其他实施例中,这些逻辑模块可以根据需要被合并或者被划分为聚合或者划分它们的功能。此外,如果数据322包括导出数据,存储306和/或存储器304将对数据322的失败的写入记录为失败的写入(或者失败的更新)328。
操作逻辑324包括根据数据322的类型不同地运行的处理器可执行的指令。当装置300存储主数据时,操作逻辑服务以接收关于数据322的原始的写入请求/查询,向存储相关联的导出数据的其他装置(如果存在的话)发送成功写入的结果,并且将结果写入装置300订阅的改变捕获流。
当装置300存储导出数据时,运行在一个或者多个其他装置上的操作逻辑操作以接收对主数据的写入的结果、按照主写入结果对导出数据322进行写入、在失败的写入328中记录失败的写入、并且当失败已经被修正或者已经变得毫无意义时清除失败的写入。
通信逻辑326包括用于如下的处理器可执行的指令:取决于装置是存储主数据还是导出数据,发送或者接收写入请求和/或写入的结果,以及用于发送写入结果至改变捕获流或者从改变捕获流接收写入结果。
在一些实施例中,装置300执行属于图1的系统110的一个或者多个组件(诸如存储引擎122)的一些或者全部的功能。
其中执行上述的一个或者多个实施例的环境可以包含通用计算机或者诸如手持计算机或者通信设备的专用设备。为了清楚起见可以省略这样的设备的一些细节(例如,处理器、存储器、数据存储、显示器)。一个或者多个任务或者功能归功于的诸如处理器或者存储器的组件可以是临时地被配置为执行特定任务或者功能的通用组件,或者可以是被制造为执行任务或者功能的专用组件。在此使用的术语“处理器”指一个或者多个电子电路、设备、芯片、处理内核和/或被配置为处理数据和/或计算机程序代码的其他组件。
在此详细描述中所描述的数据结构和程序代码典型地存储在非瞬态计算机可读存储媒介上,其可以是可以存储代码和/或数据来用于由计算机系统使用的任何设备或者媒介。非瞬态计算机可读存储媒介包括但不限于,易失性存储器、非易失性存储器、电的、磁的、以及光学存储设备,诸如硬盘驱动、磁带、CD(压缩盘)以及DVD(数字多功能盘或者数字视频盘)、固态驱动、和/或现在已知或者将在未来开发的其他非易失性计算机可读媒介。
在详细的描述中所描述的方法和过程可以体现为代码和/或数据,如上所述该代码和/或数据可以存储在非瞬态计算机可读存储媒介中。当处理器或者计算机系统读取并执行该代码、并且操作存储在媒介上的数据时,处理器或者计算机系统执行体现为代码和数据结构并存储在媒介中的方法和过程。
此外,可以将方法和过程编程进硬件模块中,诸如但不限于,专用集成电路(ASIC)芯片、现场可编程门阵列(FPGA)和现在已知的或者将来开发的其他可编程逻辑设备。这样的硬件模块在被激活时,它执行包含于模块内的方法和过程。
仅为了说明和描述的目的已经呈现了前述实施例。它们不旨在穷尽或者限制本公开于所公开的形式。因此,许多修改和变型对于本领域的技术人员将是明显的。由所附权利要求而非前述公开来定义范围。
Claims (18)
1.一种确保在包括多个存储引擎的分布式数据存储系统中导出数据的一致性的方法,所述方法包括:
在管理主数据的第一存储引擎处:
执行写入由键标识的所述主数据的一部分的请求;以及
传输执行的所述写入的结果至管理与所述键相关联的导出数据的第二存储引擎;以及
在所述第二存储引擎处:
接收包括所述键的执行的所述写入的所述结果;
尝试更新与所述键相关联的所述导出数据;
如果所述更新尝试失败,则在失败的更新的集合中记录所述键;以及
如果所述更新尝试成功,则如果存在包括所述键的记录的所述失败的更新的集合则清除包括所述键的记录的所述失败的更新的集合。
2.根据权利要求1所述的方法,进一步包括:
在所述第一存储引擎处,向主数据改变的流写入执行的所述写入的所述结果,其中所述结果包括所述键、对于所述键的值和执行的所述写入的序列号;以及
在所述第二存储引擎处,
从所述主数据改变的流接收第一条目,所述第一条目包括第一键和第一序列号;以及
如果所述失败的更新的集合包括包含所述第一键和所述第一序列号的记录,则:
更新与所述第一键相关联的导出数据;以及
清除包括所述第一键的记录的所述失败的更新的集合。
3.根据权利要求1或2所述的方法,其中在所述失败的更新的集合中记录所述键包括:
如果所述失败的更新的集合包括包含所述键的较早记录,则使用所述序列号改写所述较早记录的较早序列号;以及
如果所述失败的更新的集合不包括包含所述键的较早记录,则向所述失败的更新的集合写入包括执行的所述写入的所述结果的记录。
4.根据任一前述权利要求所述的方法,其中在所述失败的更新的集合中,对所述导出数据的失败的更新的每个记录包括对所述主数据的相应执行的写入的所述结果。
5.根据任一前述权利要求所述的方法,其中写入结果的序列号是逻辑时间戳。
6.根据任一前述权利要求所述的方法,其中:
所述第一存储引擎和所述第二存储引擎彼此远离。
7.根据任一前述权利要求所述的方法,其中:
所述第一存储引擎是数据库;以及
所述第二存储引擎是文件系统。
8.根据任一前述权利要求所述的方法,其中所述主数据和所述导出数据是专业的社交联网系统的一部分。
9.一种用于确保导出数据的一致性的系统,包括:
主数据存储引擎,所述主数据存储引擎管理主数据并且包括:
至少一个处理器;以及
存储指令的第一非瞬态计算机可读媒介,所述指令在由所述至少一个处理器执行时致使所述主数据存储引擎:
执行写入由键标识的所述主数据的一部分的请求;以及
传输执行的所述写入的结果至导出数据存储引擎;以及
所述导出数据存储引擎,所述导出数据存储引擎管理所述导出数据并且包括:
一个或者多个处理器;以及
存储指令的第二非瞬态计算机可读媒介,所述指令在由所述一个或者多个处理器执行时,致使所述导出数据存储引擎:
接收包括所述键的执行的所述写入的所述结果;
尝试更新与所述键相关联的所述导出数据;
如果所述更新尝试失败,则在失败的更新的集合中记录所述键;以及
如果所述更新尝试成功,则如果存在包括所述键的记录的所述失败的更新的集合则清除包括所述键的记录的所述失败的更新的集合。
10.根据权利要求9所述的系统,其中:
所述第一非瞬态计算机可读媒介进一步存储指令,所述指令在由所述至少一个处理器执行时,致使所述主数据存储引擎:
向主数据改变的流写入执行的所述写入的所述结果,其中所述结果包括所述键、对于所述键的值和执行的所述写入的序列号;以及
所述第二非瞬态计算机可读媒介进一步存储指令,所述指令在由所述一个或者多个处理器执行时,致使所述导出数据存储引擎:
从所述主数据改变的流接收第一条目,所述第一条目包括第一键和第一序列号;以及
如果所述失败的更新的集合包括包含所述第一键和所述第一序列号的记录,则:
更新与所述第一键相关联的导出数据;以及
清除包括所述第一键的记录的所述失败的更新的集合。
11.根据权利要求9或10所述的系统,其中在所述失败的更新的集合中记录所述键包括:
如果所述失败的更新的集合包括包含所述键的较早记录,则使用所述序列号改写所述较早记录的较早序列号;以及
如果所述失败的更新的集合不包括包含所述键的较早记录,则向所述失败的更新的集合写入包括执行的所述写入的所述结果的记录。
12.根据权利要求9至11中的任一权利要求所述的系统,其中在所述失败的更新的集合中,对所述导出数据的失败的更新的每个记录包括对所述主数据的相应执行的写入的所述结果。
13.根据权利要求9至12中的任一权利要求所述的系统,其中写入结果的序列号是逻辑时间戳。
14.根据权利要求9至13中的任一权利要求所述的系统,其中:
所述主数据存储引擎和所述导出数据存储引擎彼此远离。
15.根据权利要求9至14中的任一权利要求所述的系统,其中:
所述主数据存储引擎是数据库;以及
所述导出数据存储引擎是文件系统。
16.根据权利要求9至15中的任一权利要求所述的系统,其中所述主数据和所述导出数据是专业的社交联网系统的一部分。
17.一种用于确保分布式数据存储系统内导出数据的一致性的装置,包括:
存储在线应用的主数据的第一物理存储设备;
存储所述在线应用的导出数据的第二物理存储设备;
一个或者多个处理器;
包括指令的导出数据更新逻辑,所述指令在由所述一个或者多个处理器执行时,致使所述装置:
基于对由第一键标识的所述主数据的一部分的执行的写入的结果尝试更新存储的所述导出数据;
其中所述结果包括所述第一键、对于所述键的第一值和所述执行的写入的第一序列号;
包括指令的失败的更新逻辑,所述指令在由所述一个或者多个处理器执行时,致使所述装置:如果对更新存储的所述导出数据的所述尝试失败,则将所述结果写入失败的更新的集合;以及
包括指令的改变捕获逻辑,所述指令在由所述一个或者多个处理器执行时,致使所述装置:
从主数据改变的流提取主数据改变,所述提取的主数据改变包括键和序列号;以及
如果所述键匹配所述第一键并且所述序列号匹配所述第一序列号,则调用所述导出数据更新逻辑。
18.根据权利要求17所述的装置,其中所述导出数据更新逻辑进一步包括指令,所述指令在由所述一个或者多个处理器执行时,致使所述装置:
如果对更新存储的所述导出数据的所述尝试成功,则从所述失败的更新的集合清除包括所述第一键的任何记录。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/341,389 US20160026673A1 (en) | 2014-07-25 | 2014-07-25 | Ensuring consistency of derived data in a distributed storage system |
US14/341,389 | 2014-07-25 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105320722A true CN105320722A (zh) | 2016-02-10 |
Family
ID=52478074
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510092962.9A Withdrawn CN105320722A (zh) | 2014-07-25 | 2015-03-02 | 确保分布式存储系统中导出数据的一致性 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20160026673A1 (zh) |
EP (1) | EP2977917A1 (zh) |
CN (1) | CN105320722A (zh) |
WO (1) | WO2016014115A1 (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111339117A (zh) * | 2020-03-19 | 2020-06-26 | 支付宝(杭州)信息技术有限公司 | 数据处理方法、装置及设备 |
CN112905368A (zh) * | 2019-11-19 | 2021-06-04 | 杭州海康威视数字技术股份有限公司 | 数据修复方法、装置及设备、存储介质 |
CN113608692A (zh) * | 2021-07-25 | 2021-11-05 | 济南浪潮数据技术有限公司 | 一种存储系统数据一致性验证方法、系统、设备以及介质 |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10783135B2 (en) | 2016-02-03 | 2020-09-22 | Thomson Reuters Enterprise Centre Gmbh | Systems and methods for mixed consistency in computing systems |
CN106874320A (zh) | 2016-06-20 | 2017-06-20 | 阿里巴巴集团控股有限公司 | 分布式流式数据处理的方法和装置 |
CN108572793B (zh) * | 2017-10-18 | 2021-09-10 | 北京金山云网络技术有限公司 | 数据写入和数据恢复方法、装置、电子设备及存储介质 |
IT201800003814A1 (it) * | 2018-03-21 | 2019-09-21 | Rocco Papalia | Formulazione a base di caffe' in polvere |
CN115858564A (zh) * | 2023-03-01 | 2023-03-28 | 深圳市科力锐科技有限公司 | 表数据导出方法、装置、设备及存储介质 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6615223B1 (en) * | 2000-02-29 | 2003-09-02 | Oracle International Corporation | Method and system for data replication |
US6484187B1 (en) * | 2000-04-28 | 2002-11-19 | International Business Machines Corporation | Coordinating remote copy status changes across multiple logical sessions to maintain consistency |
US8335771B1 (en) * | 2010-09-29 | 2012-12-18 | Emc Corporation | Storage array snapshots for logged access replication in a continuous data protection system |
US9111012B2 (en) * | 2012-11-26 | 2015-08-18 | Accenture Global Services Limited | Data consistency management |
US9563655B2 (en) * | 2013-03-08 | 2017-02-07 | Oracle International Corporation | Zero and near-zero data loss database backup and recovery |
US10048983B2 (en) * | 2014-04-02 | 2018-08-14 | Red Hat, Inc. | Systems and methods for enlisting single phase commit resources in a two phase commit transaction |
US9619544B2 (en) * | 2014-06-26 | 2017-04-11 | Amazon Technologies, Inc. | Distributed state management using dynamic replication graphs |
US9529882B2 (en) * | 2014-06-26 | 2016-12-27 | Amazon Technologies, Inc. | Coordinated suspension of replication groups |
-
2014
- 2014-07-25 US US14/341,389 patent/US20160026673A1/en not_active Abandoned
-
2015
- 2015-01-27 WO PCT/US2015/013086 patent/WO2016014115A1/en active Application Filing
- 2015-03-02 CN CN201510092962.9A patent/CN105320722A/zh not_active Withdrawn
- 2015-04-14 EP EP15163568.7A patent/EP2977917A1/en not_active Withdrawn
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112905368A (zh) * | 2019-11-19 | 2021-06-04 | 杭州海康威视数字技术股份有限公司 | 数据修复方法、装置及设备、存储介质 |
CN111339117A (zh) * | 2020-03-19 | 2020-06-26 | 支付宝(杭州)信息技术有限公司 | 数据处理方法、装置及设备 |
CN111339117B (zh) * | 2020-03-19 | 2023-09-01 | 支付宝(杭州)信息技术有限公司 | 数据处理方法、装置及设备 |
CN113608692A (zh) * | 2021-07-25 | 2021-11-05 | 济南浪潮数据技术有限公司 | 一种存储系统数据一致性验证方法、系统、设备以及介质 |
CN113608692B (zh) * | 2021-07-25 | 2023-12-29 | 济南浪潮数据技术有限公司 | 一种存储系统数据一致性验证方法、系统、设备以及介质 |
Also Published As
Publication number | Publication date |
---|---|
EP2977917A1 (en) | 2016-01-27 |
WO2016014115A1 (en) | 2016-01-28 |
US20160026673A1 (en) | 2016-01-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10984132B2 (en) | Data processing systems and methods for populating and maintaining a centralized database of personal data | |
US10970371B2 (en) | Consent receipt management systems and related methods | |
US11200341B2 (en) | Consent receipt management systems and related methods | |
US11062051B2 (en) | Consent receipt management systems and related methods | |
US11301589B2 (en) | Consent receipt management systems and related methods | |
US10678945B2 (en) | Consent receipt management systems and related methods | |
US10440062B2 (en) | Consent receipt management systems and related methods | |
US10776518B2 (en) | Consent receipt management systems and related methods | |
US10796020B2 (en) | Consent receipt management systems and related methods | |
US10437412B2 (en) | Consent receipt management systems and related methods | |
CN105320722A (zh) | 确保分布式存储系统中导出数据的一致性 | |
US20200410117A1 (en) | Consent receipt management systems and related methods | |
US10037388B2 (en) | Fast querying of social network data | |
CN114742024A (zh) | 一种业务信息处理方法、装置及电子设备 | |
US20220012673A1 (en) | Maintaining status information for customer-support agents across multiple channels | |
US20170357778A1 (en) | Transparency tracker | |
US11651104B2 (en) | Consent receipt management systems and related methods | |
US20240126780A1 (en) | Data processing during data replication | |
US20100106527A1 (en) | System and Method For Referral Management |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20180508 Address after: Washington State Applicant after: Micro soft technique license Co., Ltd Address before: California Applicant before: LINKEDIN CORPORATION |
|
WW01 | Invention patent application withdrawn after publication | ||
WW01 | Invention patent application withdrawn after publication |
Application publication date: 20160210 |