CN106991113A - 数据库环境中的表格复制 - Google Patents
数据库环境中的表格复制 Download PDFInfo
- Publication number
- CN106991113A CN106991113A CN201611128646.3A CN201611128646A CN106991113A CN 106991113 A CN106991113 A CN 106991113A CN 201611128646 A CN201611128646 A CN 201611128646A CN 106991113 A CN106991113 A CN 106991113A
- Authority
- CN
- China
- Prior art keywords
- node
- affairs
- database
- replica
- source node
- 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.)
- Granted
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/2379—Updates performed during online database operations; commit processing
-
- 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/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1446—Point-in-time backing up or restoration of persistent data
- G06F11/1448—Management of the data involved in backup or backup restore
- G06F11/1451—Management of the data involved in backup or backup restore by selection of backup contents
-
- 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/2358—Change logging, detection, and notification
-
- 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
- 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
- G06F16/273—Asynchronous replication or reconciliation
-
- 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
- G06F16/275—Synchronous replication
-
- 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/80—Database-specific techniques
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)
- Quality & Reliability (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
描述了用于在具有源节点和副本节点的数据库环境内执行数据的复制的技术。源节点在由源节点存储的至少一个数据库表格上执行数据库操作。源节点将该数据库操作异步发送到副本节点。准备提交请求被从源节点同步发送到副本节点。源节点接收来自副本节点的同步预提交确认。预提交确认指出在副本节点处执行了数据库操作。源节点提交与该数据库操作相关联的事务。
Description
技术领域
本公开概括而言涉及信息的复制。特定实现方式涉及数据库环境中的源和副本之间的数据的复制。
背景技术
通过创建源表格的副本(replica)可增强数据库性能。例如,复制的表格可被容宿(hosted)在与源表格不同的计算系统上,其中源主机和副本主机具有不同的处理器。让副本可用于服务于数据库读取请求可帮助在多个处理器之间平衡计算负载,改善系统性能。在一些情况中,副本也可用于“高可用性数据”目的,例如当在源表格变得不可用的情况下副本能够接管源表格的一个或多个功能时。
复制的系统中的挑战包括维持源表格和副本表格之间的一致性。如果与复制相关联的开销太高,复制也可导致系统性能降低。例如,在典型的同步复制协议中,副本是在与源相同的事务边界内被更新的。然而,这可导致在源主机和副本主机两者处的事务可见性延迟,因为同步复制通常涉及容宿源表格的计算系统和容宿副本表格的计算系统之间的多个通信。
在一些情况中,通过异步复制对副本表格的改变可改善性能。然而,完全异步的协议可向数据库系统添加复杂性。
发明内容
提供此发明内容部分来以简化的形式介绍下文中在具体实施方式部分进一步描述的概念中的选择的一部分。此发明内容部分并不打算标识要求保护的主题的关键特征或必要特征,也不打算用来限制要求保护的主题的范围。
描述了技术和解决方案用于在数据库环境内执行复制(例如被插入、更新和/或删除数据库操作所修改的数据库信息的复制),例如使用数据操纵语言(data manipulationlanguage,DML)语句。数据库环境包括源节点和副本节点。
在一个方面中,源节点在由源节点存储的至少一个数据库表格上执行数据库操作。源节点将该数据库操作异步发送到副本节点。准备提交请求被从源节点同步发送到副本节点。源节点接收来自副本节点的同步预提交确认。预提交确认指出在副本节点处执行了数据库操作。源节点提交与该数据库操作相关联的事务。在一些实现方式中,在源节点处提交事务可在不等待接收来自副本节点的同步预提交确认的情况下开始(例如写提交日志)。
在另一方面中,在数据库环境中,副本节点接收从源节点异步发送的数据库操作。副本节点在由副本节点存储的从源节点处的表格复制的至少一个数据库表格的拷贝上执行该数据库操作。副本节点从源节点接收同步通知以准备提交包括该数据库操作的事务。副本节点预提交该事务并且向源节点发送同步准备提交确认。准备提交确认指出副本节点预提交了该事务。
在另外一方面中,在数据库环境中,源节点在由源节点存储的至少一个数据库表格上执行数据库操作。源节点将该数据库操作发送到副本节点。同步准备提交请求被从源节点发送到副本节点。源节点接收来自副本节点的同步准备提交确认,该确认指出副本节点预提交了与该数据库操作相关联的事务。源节点提交该事务。在一些实现方式中,在源节点处提交事务可在不等待接收来自副本节点的同步准备提交确认的情况下开始(例如写提交日志)。不等待接收来自副本节点的提交确认,源节点向数据库客户端发送提交确认。提交确认(从源节点发送到数据库客户端)指出源节点提交了事务。
如本文所述,各种其他特征和优点根据需要可被包含到这些技术中。
附图说明
图1是利用DML语句和写入日志传送支持复制的环境的示图。
图2是描绘用于利用DML语句和写入日志传送执行数据库表格的复制的数据库环境的示图;
图3是描绘用于从源节点到副本节点执行数据库表格的复制的数据库环境的示图;
图4是描绘可用于本公开的至少某些实现方式中的提供版本空间管理的事务情境的体系结构的示图。
图5A是图示出未复制的数据库系统的示图。
图5B是描绘从源节点到副本节点复制数据库表可如何提供数据库系统中的负载平衡的示图。
图6A是描绘在没有表格复制的情况下在分布式数据库系统中可如何执行效率低下的跨节点联接操作的示图。
图6B是图示出在分布式数据库系统中可如何使用复制来避免跨节点联接操作的示图。
图7是数据库事务中可包括的示例数据库操作的示图,图示了后来操作对早前操作的依从性。
图8是描绘用来提交从源节点复制到副本节点的事务的两阶段提交协议的示图。
图9是一种协议的示图,在该协议中用于事务的数据库操作被从源节点异步发送到副本节点,其中在源节点和副本节点之间有同步通信来在副本节点处预提交该事务。
图10A是一种用于在数据库环境内从源节点到副本节点执行复制的涉及源节点的示例方法的流程图,其中事务的一个或多个数据库操作被异步发送到副本节点,并且源节点和副本节点之间的同步通信被用于在副本节点处预提交该事务。
图10B是一种用于在数据库环境内从源节点到副本节点执行复制的涉及副本节点的示例方法的流程图,其中由源节点异步发送的事务的一个或多个数据库操作被副本节点接收,并且源节点和副本节点之间的同步通信被用于在副本节点处预提交该事务。
图11是一种数据库协议的示图,其中用于事务的一个或多个数据库操作被从源节点复制到副本节点,并且在源节点不等待接收来自副本节点的提交确认的情况下,向数据库客户端确认该事务为已提交。
图12是一种用于在数据库环境内从源节点到副本节点执行复制的涉及源节点的示例方法的流程图,其中在源节点不等待接收来自副本节点的提交确认的情况下向数据库客户端确认该事务为已提交。
图13是一种数据库协议的示图,其中用于事务的一个或多个数据库操作被从源节点复制到副本节点,其中该(一个或多个)数据库操作被从源节点异步发送到副本节点,在源节点和副本节点之间有同步通信来在副本节点处预提交该事务,并且在源节点不等待接收来自副本节点的提交确认的情况下向数据库客户端确认该事务为已提交。
图14A是一种用于在数据库环境内从源节点到副本节点执行复制的涉及源节点的示例方法的流程图,其中一个或多个数据库操作被从源节点异步发送到副本节点,在源节点和副本节点之间有同步通信来在副本节点处预提交事务,并且在源节点不等待接收来自副本节点的提交确认的情况下向数据库客户端确认该事务为已提交。
图14B是一种用于在数据库环境内从源节点到副本节点执行复制的涉及副本节点的示例方法的流程图,其中一个或多个数据库操作被从源节点异步发送到副本节点,在源节点和副本节点之间有同步通信来在副本节点处预提交事务,并且在源节点不等待接收来自副本节点的提交确认的情况下向数据库客户端确认该事务为已提交。
图15是描绘将在源系统处维护的源表格与在副本系统处维护的数据库表格的拷贝同步的数据库环境的示图。
图16A是一种用于将在源系统处维护的数据库表格与在副本节点处维护的数据库表格的拷贝同步的涉及源节点的示例方法的流程图。
图16B是一种用于将在源系统处维护的数据库表格与在副本节点处维护的数据库表格的拷贝同步的涉及副本节点的示例方法的流程图。
图17是副本节点的示图,图示了同步时间戳可如何用于判定在副本节点处是否重放写入操作。
图18是其中可实现一些描述的实施例的示例计算系统的示图。
图19是可结合本文描述的技术使用的示例云计算环境。
具体实施方式
示例1—概述
以下描述针对的是用于执行数据(例如,数据库数据)的复制的技术和解决方案。例如,数据库数据的高效复制可利用数据操纵(DML)语句和写入日志传送(write logshipping)来执行。当在本文使用时,DML语句指的是指定对数据的任何操纵(例如,插入、更新、删除、选择)的任何语句、命令、消息或其他指令。在一些实现方式中,(例如,在第一数据库系统处)执行DML语句并且创建反映DML语句和事务提交操作的写入日志。在一个示例中,对于每个DML语句或事务提交操作创建单独的写入日志条目。在一具体示例中,写入日志条目可包括DML语句和关联的参数和/或值(例如,当在另一数据库系统处执行该DML语句时可能需要的参数和/或值)。写入日志条目可被插入到写入日志队列中并发送到一个或多个其他数据库系统以便执行。这样,可在第一数据库系统(例如,源主机或分布在多个源节点之间的源系统)和一个或多个其他数据库系统(例如,具有副本主机或者在多个副本节点之间被复制的副本系统)之间复制数据库数据。
当在本文使用时,源系统指的是数据库信息(例如,一个或多个数据库表格、整个数据库或者对数据库信息的其他选择)被从其复制到其他系统的数据库系统(例如,实现数据库环境的一个或多个计算设备)。术语数据库表格指的是数据库的任何部分,无论是如何组织的。主机指的是具有处理器和存储器的计算系统。在一些情况中,源系统可包括多个主机,通常称为节点。然而,除非上下文明确地另有指示,否则节点可以指单主机系统中的主机,或者系统中的多个主机之一。主节点指的是管理关于主节点和一个或多个从属节点的信息的源节点。从属节点指的是安装在与主源节点不同的主机上的源节点。
表格(例如,数据库表格)在向外扩展(scale-out)系统中可被复制到多个节点(例如,数据库节点)。此特征通过超越单个机器的限制利用多个节点中的多个核,可提供可扩展的搜索或查询吞吐量。其也可在多个表格被复制在多个节点上时,通过提供更本地化的访问,减少用于在这些表格上执行的联接的网络流量。在一具体示例中,数据复制对于在线分析处理(online analytical processing,OLAP)查询和操作以及在线事务处理(onlinetransaction processing,OLTP)事务和查询都可改善数据库系统的性能。
然而,当DML语句被以同步方式复制时(例如,当在同一事务边界内的源系统和副本系统上执行DML语句时,其中所有节点上的执行必须在事务被提交之前完成),性能惩罚可发生。在一些情况中,通过异步复制可减轻惩罚,这实现了向外扩展的益处。在异步复制的一些实现方式中,当事务中的DML语句在源系统处被提交时事务被提交,并且变化被传播到事务边界外的副本系统。
当在本文使用时,副本系统指的是从源系统复制数据库信息(例如,复制一个或多个数据库表格、整个数据库或者数据库信息的其他选择)的数据库系统,其中源系统例如是单个源主机或者分布在多个源节点之间的源系统。在一些示例中,副本系统可包括单个副本主机。在其他示例中,副本系统包括多个副本节点,这些副本节点可存储在源系统处维护的数据库表格的多个拷贝,具有分布在多个副本节点间的源数据库表格,或者上述的组合。在另外的示例中,单个表格可分布在多个源节点间和/或可分布在多个副本节点间。
分布式数据库系统(例如,包括多于一个副本节点、多于一个源节点或者多于一个源节点和多于一个副本节点的数据库系统)中的不同数据库节点处的数据可以是在数据库节点之间分区(即,划分、分割)的数据库表格。数据库表格可在行之间(不同分区中的不同行)和/或列之间(不同分区中的不同列)被分区。分布式数据库系统的数据库节点可包含分区表格的一个或多个分区(部分)。或者,分区的数据被以某种其他方式来组织。除非另有指示,否则数据库表格可以指数据库表格的分区。在另外的示例中,表格不被分区。
当被分区时,数据库表格可被在多个源节点之间分割并且被复制到多个副本节点。在一些情况中,分区在源节点和副本节点之间是相同的,而在其他情况中是不同的。在其他实现方式中,表格可在源节点处被分区,但被复制到单个副本节点处的单个未分区的副本表格。在另外的示例中,在源节点处未被分区的表格可被分区并分布到多个副本节点。
示例2—写入日志
在本文的任何示例中,可利用写入日志来复制DML语句(例如,DML结构化查询语言(structured query language,SQL)语句)。例如,可创建写入日志格式,其包括具有与DML语句相关联的附加信息(例如,在执行DML语句时使用的附加信息)的DML语句。在一些实现方式中,写入日志条目包括单个DML语句。
在一些实现方式中,写入日志条目包括事务标识符(ID)、DML语句、参数值和非确定值。事务标识符标识(例如,唯一标识)DML复制事务。例如,事务标识符可唯一标识在源系统和DML语句将在其中被执行的一个或多个副本节点上发生的DML复制事务。
DML语句可以是用于修改(例如,添加、更新和/或删除)数据的语句。例如,DML语句可以是用于修改数据库中的数据的SQL语句。在一些实现方式中,DML语句是SQL插入、更新或删除语句(例如,单个SQL插入、更新或删除语句)。
参数值是被DML语句使用的值。例如,参数值可以是用于绑定到DML 语句(例如,准备的或预编译的DML SQL语句)中的变量的值。当DML语句被执行(例如,重放)时,绑定变量可被其相应的参数值所替换。例如,如果DML语句包含变量“名字”,则当DML语句被执行时该变量可被特定的字符串值所替换(例如,变量“名字”可被具体值所替换,例如“约翰”)。
非确定值指的是在不同的计算设备之间可不同的值(例如,在源节点和副本节点之间不同)。例如,时间戳函数当在源系统上运行时将返回当前时间戳值,当以后某时在副本系统上运行时其可以是不同的时间戳值。在相同的值要被用于这种非确定性函数的实现方式中,非确定性函数可被评估一次(例如,在源系统上)并且所得到的值可在逻辑日志中被提供给副本系统,使得当DML语句在副本系统上被执行时,相同的值将被使用(曾在源系统处使用的那个值)。例如,非确定性函数(例如,当前时间戳函数)可在源系统处在DML语句执行期间被评估并且所得到的值可在写入日志条目中被发送到副本系统以用于在副本系统处执行DML语句时使用。
在一些实现方式中,写入日志条目是用于利用DML语句在副本位置(例如,副本节点)执行数据的复制的传送值的集合。在一具体实现方式中,写入日志条目包括:
*事务ID
*DML SQL语句
*参数值:准备的语句中的绑定变量(标记为“?”)的值。
*非确定值:如果SQL语句包括非确定性函数,例如序列或CURRENT_TIMESTAMP(当前_时间戳)函数,则可包括非确定性函数的评估值。
当在本文使用时,术语“传送(ship)”或“发送(send)”到目的地实体指的是在计算机系统内或者两个计算机系统之间传输或以其他方式输送数据的任何方式,无论是直接输送数据还是通过一个或多个中间实体输送数据。类似地,术语“接收”,例如从源实体接收,指的是在计算机系统内或者在两个计算机系统之间接收数据,无论是从原始发送的计算机系统直接接收数据还是通过一个或多个中间实体接收数据。
如上所述,写入日志条目可包括关于数据库事务的其他特征的信息。在一个方面中,写入日志包括用于当事务被源系统提交时的条目。例如,事务可包括多个DML语句。在一个实现方式中,当在源系统上已执行了事务中的所有DML语句时,该事务被提交。写入日志可包括额外的条目,例如关于已在源系统上被预提交的事务内的个体DML语句的额外条目。
示例3—利用DML语句提供复制的环境
在本文的任何示例中,可以为利用DML语句和写入日志的更高效复制(例如,数据库信息的复制)提供技术。例如,DML语句可在源系统处被执行并且被包含到写入日志中以便发送(传送)到副本系统以供执行,来在源系统和副本系统之间为一个或多个数据库表格复制数据。此外,DML复制可被应用到不同类型的存储引擎,例如行存储、列存储等等。
在一些实现方式中,具有写入日志传送的DML复制(例如,DML同步复制)的概念旨在以最低限度的复制开销跨多个节点执行复制。然而,同步复制可导致更长的响应时间,因为源和(一个或多个)副本都在同一事务边界中被更新。异步复制——其中副本不一定是在同一事务边界中更新的——可允许使用副本系统,同时对于源系统处的写入事务改善了响应时间。然而,异步复制通常涉及副本表格上的读取请求可能返回与源表格相比过时的信息的风险。
图1是图示出利用DML语句和写入日志传送的数据库数据复制的图解100。如图解100所示,客户端110(例如,客户端计算设备)与源系统120(例如,操作数据库的一个或多个服务器计算机,在该处数据将被修改并被复制到副本系统)通信。例如,客户端110可执行数据库操纵操作(例如,在存储于源系统120处的一个或多个数据库表格中插入数据、改变数据和/或删除数据)。
源系统120包括数个组件,其中包括会话/事务组件122、DML执行组件124和存储引擎126(例如,行存储和/或列存储存储引擎)。存储引擎126在持久性存储128(例如,硬盘驱动器、固态驱动器和/或其他类型的持久性存储装置)中存储数据库数据。
源系统120可接收来自客户端110和/或来自其他客户端或源的数据操纵操作(添加、修改和/或删除数据的操作,例如以插入、更新和/或删除DML语句的形式)。在接收到数据操纵操作时(例如,经由会话/事务组件122接收),源系统120可执行DML语句来执行数据操纵操作(例如,经由DML执行组件124执行)。源系统120也可创建包含DML语句的写入日志条目并将它们(如140处所示)发送到副本系统130以便执行。
副本系统130可接收写入日志并且执行其内包含的条目,包括DML语句(例如,连同写入日志中的其他参数、值和/或其他关联信息)、事务提交操作和DML语句预提交操作。例如,副本系统130可包括与源系统120类似的组件(例如,会话/事务组件132、DML执行组件134、存储引擎136和持久性存储138)。副本系统130可经由DML语句复制源系统120处存储的数据库信息(例如,一个或多个数据库表格)(例如,使得源系统120处的数据库数据变化被复制到副本系统130)。在一些情况中,副本系统130可执行DML语句并将结果返回给源系统120。结果可被提供给源系统120和/或客户端110。
图2是描绘用于利用DML语句和写入日志传送执行数据库表格的复制的示例数据库环境200的示图。数据库环境200包括数个副本节点220、230,数据库表格216在它们之间被复制。
如数据库环境200中所示,源系统210(例如,源主机或源节点)包括支持数据库活动和复制的数个组件。具体而言,源系统210存储数据库表格216(例如,存储在存储器中和/或存储在一个或多个持久性存储仓库中)。源系统210包括DML执行组件212,该DML执行组件212执行读取和/或写入数据库表格216中的数据库数据的DML语句。源系统210还包括用于存储写入日志的写入日志队列214和用于将写入日志发送到其他数据库节点(例如,发送到副本节点220和/或230)的复制处理程序218。
为了复制数据库表格(例如,复制存储在一个或多个数据库表格中的数据库信息以使得数据库表格在数据库节点之间保持同步),源系统210的DML执行组件212可接收DML语句(例如,最初来自用户或来自另外的源)并且在数据库表格216之一上执行该DML语句(例如,添加、修改和/或删除该数据库表格中的数据,该数据库表格可被称为主表格)。DML执行组件212随后可创建写入日志条目(其包括DML语句)并且将该写入日志条目插入到写入日志队列214中。一旦写入日志条目已被插入到写入日志队列214中,DML执行组件212就可自由地处理其他DML请求(例如,DML执行组件212在执行其他DML操作之前不必等待该写入日志条目被复制到副本节点220、230)。
在一些实现方式中,DML执行组件212包括数个执行的线程,其中每个线程可独立工作来处理DML请求。在这种实现方式中,线程可执行DML语句,创建写入日志条目(其包括DML语句),将写入日志条目插入到写入日志队列214中,并且自由地处理其他请求,而不必等待DML语句的复制完成(例如,不必等待DML语句被发送到其他节点或者等待其他节点处的DML语句执行的结果)。
在一些实现方式中,DML执行组件212在关于数据库表格执行DML语句时确定DML语句使用的参数值和/或非确定值。在这种实现方式中,DML执行组件212可将参数值和/或非确定值与DML语句一起包括在写入日志条目中。DML执行组件212还可将事务标识符包括在写入日志条目中来标识复制事务。DML执行组件212对DML语句的执行进行排序,使得任何给定的DML语句直到其影响的下层数据准备就绪为止不会被执行。例如,对于记录的更新语句直到添加该记录的插入语句之后为止不被执行。DML执行组件212可修改指出在写入日志条目中如何串行化DML语句的信息(例如,在充当状态计数器的非确定值或行ID值中)。
源系统210还包括用于处理写入日志队列214中的写入日志条目的复制处理程序218。复制处理程序218可从写入日志队列214取得写入日志并将它们发送到一个或多个副本节点(例如,节点220和/或节点230)以便副本节点220、230通过执行写入日志条目内包含的DML语句来执行复制。例如,复制处理程序218可从写入日志队列214取回写入日志条目并将该写入日志条目发送到节点220和/或节点230。写入日志条目在被路由到副本节点220、230时可经过各种内部或外部结构、队列等等。
接收写入日志条目的副本节点,例如副本节点220,可接收写入日志条目并将其插入到作业队列222中。副本节点220对写入日志条目的接收可由单独的组件(例如,写入日志接收器组件,未图示)或者由作业队列222执行。一旦写入日志条目已被接收并插入到作业队列222中,作业执行组件224就可取回写入日志条目并且在复制的数据库表格226之一上执行其内包含的DML语句(例如,连同参数值和/或非确定值,如果存在的话)。其他副本节点也可从复制处理程序218接收写入日志条目(例如,节点230,具有其自己的作业队列232、作业执行组件234和复制数据库表格236)。
在一些实现方式中,数据库表格可被逐节点地复制。例如,源系统(例如,源系统210)可存储数据库表格的完整集合,而第一副本节点(例如,节点220)可复制源系统处存储的表格中的一些或全部并且第二副本节点(例如,节点230)也可复制源系统210处存储的表格中的一些或全部。此外,每个副本节点220、230可复制与一个或多个其他副本节点相同的表格,或者可复制与一个或多个其他副本节点不同的表格。作为示例,源系统210可存储数据库表格1、2和3。副本节点220可复制数据库表格1和2。副本节点230可复制数据库表格1和3。
在一些实现方式中,包含修改特定数据库表格的DML语句的写入日志条目被发送到复制该特定数据库表格的副本节点(例如,只发送到复制该特定数据库表格的那些副本节点,而不发送到没有复制该特定数据库表格的副本节点)。例如,复制处理程序218可将来自写入日志队列214的写入日志条目发送到复制被该写入日志条目内的DML语句修改的数据库表格的副本节点。
在一些实现方式中,执行写入日志条目的分组。例如,对在特定副本节点处复制的数据库表格进行修改的多个写入日志条目可被分组并发送到该特定副本节点。考虑这样一种示例布置:其中,源系统210存储数据库表格1、2和3,副本节点220复制数据库表格1和2,并且副本节点230复制数据库表格1和3。在这个示例布置中,如果写入日志队列214包含全都修改数据库表格1中存储的数据库信息的三个写入日志条目,则这三个写入日志条目可被分组(例如,被组合到一写入日志群组中)并被发送到都复制表格1的副本节点220和副本节点230两者。如果写入日志队列214包含都修改数据库表格3中存储的数据库信息的两个写入日志条目,则这两个写入日志条目可被分组并被发送到复制数据库表格3的副本节点230(而不被发送到不复制数据库表格3的副本节点220)。如果写入日志队列214包含都修改数据库表格1中存储的数据库信息的两个写入日志条目和修改数据库表格2中存储的数据库信息的一个写入日志条目,则第一写入日志群组可被创建来将所有三个写入日志条目发送到副本节点220并且第二写入日志群组可被创建来仅将修改表格1的两个写入日志条目发送到副本节点230。
写入日志分组可被应用来使得网络资源可被更高效地利用。例如,为了最小化复制的惩罚,可以使用写入日志分组,其中用于多个客户端的多个写入日志条目被分组到单个网络通信中。此技术可减少执行复制所需要的网络资源并且可增大DML执行吞吐量。
接收写入日志条目的副本节点220、230的作业执行组件224、234可包括用于执行作业队列中的作业的数个进程或线程。例如,副本节点220的作业执行组件224可包括从作业队列222取回写入日志条目并执行它们的数个作业执行线程。在一些实现方式中,作业执行线程可并行执行写入日志条目,这可增大效率。在分派写入日志条目时,作业执行组件224可使用信息(例如,充当状态计数器的非确定值或行ID值)来控制执行的时机(timing),使得任何给定的DML语句直到其影响的下层数据准备就绪为止不被执行。
在一些实现方式中,DML语句在一源节点(或多个源节点)和一个或多个副本节点上在同一事务边界(也称为执行边界)内被执行。例如,一个或多个DML语句可与事务(例如,由事务标识符标识)相关联。与事务相关联的一个或多个DML语句可在一源节点(或多个源节点)处被执行,被包含到写入日志中并发送到一个或多个副本节点,并且在副本节点处在同一事务边界内被执行。在一些实现方式中,DML语句在副本节点处在整体事务边界的子语句边界内被执行。
在一些实现方式中,事务边界内的DML语句可被回滚。例如,正在一源节点和一个或多个副本节点上执行的DML语句可跨这些源节点和副本节点被回滚(例如,如果节点之一处的执行失败的话)。在一些实现方式中,支持局部回滚,其中事务的一个或多个DML语句可独立于该事务的一个或多个其他DML语句被回滚。例如,如果事务包括多个DML语句,并且DML语句之一在源节点上被回滚,则该DML语句也可在任何副本节点上被回滚。
事务边界内的DML语句的执行可提供数据库一致性。例如,DML语句可在源节点和一个或多个副本节点上被执行并且在同一事务边界内被提交(例如,利用原子提交操作来提交)。
在一些实现方式中,线程解耦被用于提供更高效的复制。在一些实现方式中,单独的线程(例如,专用的处理程序线程)执行写入日志传送(例如,包括从写入日志队列取回写入日志、分组和/或发送到副本节点在内的操作)。对于写入日志传送和DML执行使用单独的线程可解放DML执行线程以使其不必执行写入日志传送操作(例如,DML执行线程一旦将写入日志放入了写入日志队列中就可自由处理其他DML操作)。例如,DML执行线程可从其他源取得待处理的DML作业,而不必等待已被发送到副本节点的写入日志的结果。
图3是描绘用于执行从源系统302到具有副本节点304、306的副本系统的数据库表格的复制的数据库环境300的示图。虽然描绘了两个副本节点,但数据库表格的复制可在源系统302和任意数目的副本节点之间执行。
如示例数据库环境300中所示,源系统302包括数个DML执行器312(用于处理DML请求的执行线程)。为了支持复制,写入集合提取器316从DML请求中提取适当的DML信息。类似地,事务管理器320监视事务提交操作。提交操作确定事务的结果何时可用于读取。读取请求通常将接收记录的最近提交版本,即使记录当前正被DML操作所修改。
日志生成器324与事务管理器320和写入集合提取器316通信。日志生成器324对于写入和提交操作生成日志条目并且将它们添加到写入日志队列314。写入日志队列314被清空,并且日志条目被与日志生成器324通信的日志发送器328发送到适当的副本节点(例如,通过一个或多个中间节点)。在一些情况下,写入日志可被分组到一起以使得多个日志可在单次通信中被发送到副本节点。当数据库环境包括复制源系统(例如源主机)的不同部分的多个副本时,在特定实现方式中,副本节点可以只接收和执行对于由该副本节点复制的表格的写入日志。因此,逻辑日志分组可考虑到由特定副本节点复制的表格。
每个副本节点304、306包括日志接收器和分派器332。日志接收器和分派器332从日志发送器328接收写入日志条目。日志接收器和分派器332解析写入日志条目。写入操作被日志接收器和分派器332发送到并行写入日志重放器336,而提交操作被日志接收器和分派器332发送到事务提交日志重放器340。
如图3中所示,并行写入日志重放器336包括可并发操作的多个重放器344。在缺乏写入操作之间的依从性的情况下,通过允许复制的表格上的多个写入操作被同时执行,此结构帮助改善了系统性能。在至少一些实现方式中,与同一事务相关联的写入日志被同一重放器344按与在源节点处发生的操作相同的顺序重放。
为了帮助确保源系统302和副本节点304、306之间的一致性,事务提交日志重放器串行操作,例如以单个重放器348来操作。另外,日志接收器和分派器332可使用与写入日志条目一起提供的信息来对写入操作适当排序,履行(honor)写入操作之间的依从性。
本公开的至少某些实现方式包括帮助维持系统300中的一致性的附加特征。也就是说,每个复制的表格使其自身与行ID生成器相关联。每次在表格内的记录上执行写入(改变)操作时,行ID生成器的值就被递增。该值被拷贝到正被改变的数据库记录的行ID列。当写入日志条目被日志生成器(324,图3)生成时,该信息可被包括在写入日志条目中。
例如,插入新记录的操作将包括关于插入的记录的(新的、递增的)行ID的信息。更新记录的操作将产生包括关于写入操作前的记录的行ID和写入操作后的递增的行ID的信息的写入日志。删除操作将包括关于删除的行的行ID的信息。在特定实现方式中,删除操作不会导致——至少不会立即导致——记录的删除。也就是说,删除的记录可被维护为记录的新版本,并且在一些示例中,被链接到先前记录版本。新记录可被指派新的行ID。唯一行ID的使用既可在正在进行复制数据时有所帮助,也可在继续开始复制时有所帮助,例如由于手动干预或系统异常而恢复复制时。
源302和副本表格(例如位于副本304处的表格)都可包括行ID信息,例如包括在各自表格的列中。当复制被重启时,例如当在系统异常、手动重启或断电又再通电恢复复制服务之后重启副本节点304时,由源302容宿的源表格的行ID列值可被与其在副本节点304处的副本表格的行ID列值相比较。如果在它们之间存在任何不匹配的行ID,则它们可被识别为丢失的变化(lost change)并且可通过从源表格重发送相应数据或者通过删除副本处的相应行来加以解决。
例如,如果行ID值在源302和副本304处都存在,则数据是一致的并且在重启复制时对于该行ID不需要采取行动。如果行ID值只存在于源302处的表格处,则相应的数据库记录被从源302发送(或重发送)到副本304以插入到表格的拷贝中。如果行ID值只存在于由副本304容宿的表格拷贝处,则其可被从表格拷贝中删除。
用于在重启复制时同步源表格和副本表格的上述方法可被修改来改善性能或者减小在源表格的副本表格之间或者在副本304中容宿的不同复制表格的拷贝之间不一致的数据的变化。可用于本公开的至少某些示例的一个这种修改在示例8中描述。
示例4—记录版本可见性
关于常用于引导数据库环境的操作的ACID(原子性、一致性、隔离性和耐久性)的原则中的四个属性中的隔离性属性,本公开的至少一些数据库环境可提供快照隔离的两个变体中的一者或两者:语句级快照隔离(statement-level snapshot isolation,SSI)和事务级快照隔离(transaction-level snapshot isolation,TSI)。快照隔离提供针对任何并发写入事务的无阻塞读取访问.
如果事务包括一个或多个语句(例如数据操纵语言或者DML语句),并且这些语句可以是读取和写入的任一者(例如,INSERT(插入)、UPDATA(更新)或DELETE(删除)),则在SSI中,每个语句从该语句开始时的提交数据的快照读取数据。在TSI中,每个事务从事务开始时的提交数据的快照读取数据,称为快照时间戳。在至少一些数据库环境中,SSI和TSI可共存,例如可对每个用户连接配置。SSI和TSI的定义意味着数据一旦分别在语句或事务中被读取则应当在同一语句或事务内再次可见,即使该数据已被另一不同的并发事务所改变。例如,当以某个谓词执行联接查询时,同一记录在单个语句范围内可多次被访问,因为查询操作符的中间结果可由对于被过滤的记录的一组引用(例如,行ID)传递到下一个查询操作符,而不一定完全具体化它们。
虽然在快照隔离下可发生写入偏斜(Write Skew)异常,其中两个事务并发读取重叠的数据,做出互斥的更新,并且提交,但通常在实践中可通过在应用中适当地使用SELECTFOR UPDATE(为更新进行选择)来避免这种情况。与像乐观(optimistic)并发控制或两阶段锁定这样的其他并发控制选项不同,快照隔离的一个益处在于读取查询即使读取正被其他事务改变的数据库对象也可继续进行下去,而没有任何查询中止或任何锁定等待情形。
通常,在SSI和TSI中,在新快照开始时向该新快照指派快照时间戳。在SSI下,每个语句具有其自己的快照,而在TSI下每个事务具有其自己的快照。快照时间戳指派操作的成本通常在SSI中变得比在TSI中更显著,因为快照时间戳在TSI下是对每个事务指派的,而在SSI下是对每个语句指派的。SSI从而在数据库内核内提供了更多优化空间,因为通过在实际执行语句之前查找语句的查询计划可以知道在该特定快照范围中需要访问哪些表格或分区。
在本公开的一些方面中,数据库环境包括具有数据库记录的表格。在每次更新操作时创建记录的新版本,而不是覆盖(override)现有的记录版本。即使对于记录删除操作,也通常创建新的版本头部并且有效载荷为空,而不是立刻删除现有记录。当创建新记录版本时,例如在版本头部中存储表示版本创建时间(创建该版本的事务的提交时间(例如,提交ID))的版本令牌,例如版本时间戳。在特定实现方式中,版本时间戳是从由中央事务管理器(其例如可以是图3的源节点302)维护的全局同步令牌得到的,该全局同步令牌例如是事务提交时间戳,其将在写入事务的每次提交时被递增。根据特定示例,单个记录的各版本被按排序的顺序链接到彼此,例如按其版本时间戳来链接。版本链中的较老版本可在满足指定标准时,例如当判定在系统中对于该记录版本没有潜在读取者时,例如在有时被称为垃圾收集的过程中被删除。在特定实现方式中,在系统中没有潜在读取者可通过维护系统中的活跃快照的快照时间戳的最小值并且将其与垃圾收集候选者的版本时间戳相比较来检测。
当查询尝试读取记录版本时,通过将该查询的快照时间戳与候选记录版本的版本时间戳相比较来检查记录的可见性。如果记录的版本时间戳高于查询的快照时间戳,则该特定记录版本通常应当不对该查询可见,因为该记录的所创建的版本是在该查询开始之后被提交的。否则,如果记录的版本时间戳不高于查询的快照时间戳,则该记录版本通常应当对该查询可见。
快照隔离实现中的一个潜在问题是以原子方式用事务的所指派的提交时间戳来更新该事务中的多个不同行的版本时间戳。在版本创建时,包含版本时间戳通常只有在包含写入事务在提交过程内接收到其提交时间戳之后才能被正确且最终地设置。然而,如果写入事务的版本被用其提交时间戳逐一更新,则这些版本中的一些可对另一快照可见,而其他的可能仍是不可见的。这种结果将不完全符合ACID属性中的原子性规则。
为了避免关于可见性原子性的这个潜在异常,对于每个写入事务可维护事务情境(transaction context)。当写入事务开始其第一个写入操作时,创建事务情境条目。在特定示例中,所有创建的行版本在其版本头部字段中存储到事务情境条目的指针。在提交时,事务情境条目被用写入事务的提交时间戳来更新,从而通过到该事务情境条目的指针对其他版本可用。在事务提交处理完成之后,在事务情境条目中写入的提交时间戳被异步传播到版本时间戳字段。该事务情境条目随后可被进行垃圾收集。利用对创建的版本的这种原子间接提交时间戳指派,在这个快照隔离实现下仍促进了可见性原子性。
图4描绘了图示出提供版本空间管理的事务情境的体系结构400。体系结构400包括存储五个活跃时间戳12、13、15、16和19的快照时间戳存储410。体系结构400还包括用于四个活跃写入事务T1、T2、T3、T4的事务情境存储420,其中每一者具有其自己的事务情境条目。记录链存储430保持三个数据库记录,记录1、记录2和记录3,每一者具有其自己的记录版本435的版本链。每个记录版本435包括版本时间戳440。
如图所示,从快照时间戳是12的快照的角度来看,V11和V21是可见的(因为它们的版本时间戳小于快照时间戳),但其他记录版本435是不可见的。V13、V22和V33还不具有其版本时间戳,因为他们的写入事务尚未被提交。版本V31和V32的时间戳大于快照时间戳(12),因此在快照中是不可见的。在此事务状态下,记录版本435存储到相应事务情境条目(T2和T3)的指针450。一旦例如T2提交,则事务管理器460的事务提交时间戳(如图所示是19)此时被拷贝到事务情境条目420,从而间接提供可见性原子性。注意,图4中的数据结构是提供来给出概念性概览的,但其实际实现可以是不同的。例如,取决于相应的表格是行存储还是列存储——在单个数据库系统中可支持这两者,记录版本的存储布局可以是不同的。
虽然读取语句在本公开的至少某些实现方式中不获取锁定,但写入事务通常获取对其更新记录的排它锁以确保并发写入操作的可串行化调度。如果记录的最新版本在获取排它记录锁之后对于快照不可见,则TSI下的事务可向终端用户抛出错误。然而,SSI下的语句可被配置为通过用事务提交时间戳的较新值替代其语句时间戳来重启该语句。在至少某些示例中,数据库对象在锁获取和验证之后被最终更新。在另外的示例中,锁表格根据其相应表格的位置被分区,或者与多节点死锁检测实现一起被分区,以检测在不同节点处执行的写入操作之间的依从性何时阻止事务提交。
表1提供了可用于描述分布式数据库事务协议的一组符号。
表1:记号
算法1示出了语句如何检查记录版本V是否应当对快照S可见(SSI下的语句或TSI下的事务)。对于可见性判决,首先,检查V的创建者事务的状态。如果其是中止或活跃,则V对于S来说不应当可见(第8至11行)。如果其是已提交,则V的CID被与STS(S)相比较。仅当STS(S)等于或大于V的CID时V对于S来说才可见(第3-7行)。
算法1可见性判决算法:检查记录版本V对于快照S来说是否应当可见
除了基本可见性规则以外,还提供以下扩展。如前所述,以及如算法1中所记载,至少某些实现方式提供被预提交的语句或事务状态,其中语句或事务的最终提交被视为存疑,并且可见性判决被延迟直到存疑状态被解决为止,例如通过语句或事务被提交来解决。如果V的状态是预提交(第12至17行),则相应记录版本的可见性判决被延后。预提交/存疑状态使得事务提交的子操作实际上是原子的,而不依赖于任何闭锁(latch)或锁定(lock)。
延迟可见性判决方案可导致这样的一种情形,即读取语句可能需要等待另一写入事务的提交完成。然而,这个等待情形通常是不常见的,因为其发生在读取语句尝试检查由与读取尝试同时提交的写入事务创建的记录版本的可见性时。为了进一步降低读取者等待存疑事务完成的可能性,所公开的分布式数据库事务协议的特定实现方式可包括对于永远不会可见的记录版本的早期剪除。
如上文所说明的,事务的存疑时段是通过将事务的状态设置为预提交而开始的。通过指派pCID,其中pCID通常被定义为小于以后要决定的其CID值,当事务状态被设置为预提交时,对于待处理的读取者语句永远不会可见的记录版本可被剪除,其中永远不会可见例如是因为查询是比写入操作更晚开始的,从而只应当查看在查询开始时可用的记录。更具体而言,如果STS(S)对于写入事务T和快照S小于或等于pCID(T),则STS(S)将也小于CID(T),因为pCID(T)小于由提交协议指派的CID(T)。从而,如果STS(S)≤pCID(T),则可判定被测试的版本V对于S来说不可见(算法1的第13至14行),而不再等待。
示例5—在源节点处提交发起时的DML操作的同步
如上所述,表格复制对于促进分布式数据库系统的实现可能是有用的。图5A图示了不包括数据复制的数据库环境500。环境500包括应用服务器505,该应用服务器505与节点510通信,节点510充当数据库服务器并且容宿着表格1和表格2。应用服务器505向节点510发送写入请求515和读取请求520。因为环境500包括单个节点510,所以环境500的性能与单个主机的资源绑定,从而在写入请求515或读取请求520的数目变得太大的情况下可能劣化。
图5B图示了提供多个数据库服务器节点535、540、545、550之间的数据的复制的环境525,其中每个节点与应用服务器530通信并且容宿表格1(或者其拷贝)和表格2(或者其拷贝)。应用服务器530向节点535发送写入请求555,节点535存储表格1和表格2的“源”版本。然而,应用服务器530可向节点535、540、545、550的任何一者发送读取请求560。
发送到节点535的写入请求555的结果被复制过程565传播到节点540、545、550。因为节点535是接收对于表格1和2的写入请求555的唯一节点并且在节点535处对这些表格的改变被复制到其他节点540、545、550,所以节点535对于表格1和2充当源节点。节点540、545、550对于表格1和2充当副本节点。
为了查询处理和其他在线分析处理(OLAP)操作,图5B的环境525与图5A的环境500相比提供负载平衡,因为读取请求560可被发送到源节点535和副本节点540、545、550的任何一者。
表格复制也可帮助数据库系统避免低效率的跨节点联接操作。图6A图示了具有应用服务器605的数据库系统600,该应用服务器605与容宿表格1的数据库服务器节点610和容宿表格2的数据库服务器节点615通信。应用服务器605对于表格1向节点610发送写入请求620和读取请求625。应用服务器605对于表格2向节点615发送写入请求620和读取请求625。诸如SQL联接操作630之类的访问表格1和2的操作必须访问节点610和615两者,这与只访问一个数据库服务器节点的操作相比可导致性能劣化。
图6B图示了与环境600大体类似的替换环境635。然而,表格2被利用复制过程640从节点615复制到了节点610。诸如SQL联接操作630之类的访问表格1和2两者的只读操作可简单地被路由到节点610,从而通过帮助避免跨节点操作而改善了性能。
如上所述,复制可被同步或异步地执行。异步表格复制(asynchronous tablereplication,ATR)可帮助减小由表格复制导致的性能劣化,但它实现和使用起来可能是复杂的。例如,因为复制是异步的,所以副本表格与其源表格相比可具有过时的状态。为了解决此问题,应用开发者可能需要区分其在这种异步复本上运行的工作负载或查询,与那些只在源节点上或者在同步复制下操作的副本上运行的工作负载或查询。
同步表格复制提供了更简单的使用模型,因为所有的副本都与其源表格具有相同的状态。然而,典型的同步表格复制实现方式向源事务添加了高性能开销,尤其是考虑到以下两个实现问题则更是如此。典型的同步表格复制协议对于每个DML语句将源表格与副本表格同步。同步表格复制以这种方式实现是因为同一事务中的后续读取操作可尝试从副本节点读取数据变化。例如,图7的事务执行场景包括在源节点上对于事务T1执行的DML操作DML1和DML2。查询1应当能够读取DML1的结果,因为查询1和DML1都属于同一事务T1。如果DML1被异步传播到副本,则可能出现这样的情况,即当查询1被分派到副本时,查询1可能看不到DML1的执行的结果,即使DML1是在源节点处作为同一事务的一部分执行的。(例如,查询1可在DML1之前到达副本节点。)虽然图7的示例事务包括两个DML语句,但一般而言,事务可包括任意数目的DML语句,数目最高可达取决于实现方式的阈值。另外,一般而言,事务可包括任意数目的查询,数目最高可达取决于实现方式的阈值。
另一个可劣化性能的实现问题源自于遵循源节点与其副本节点之间的完全两阶段提交协议来提交事务的典型同步表格复制。如图8中所示的传统两阶段提交协议在提交事务时涉及源节点与其每个副本节点之间的至少两个网络往返行程,如图8的协议700中所示,其分别图示了源节点704和副本节点708的执行时间线706、710。
DML语句DML1和DML2在方框714和724中在源节点704处被执行。这些DML语句分别在通信716和726中被同步发送到副本节点708。DML1在过程718中在副本节点708处被执行。DML2在过程728中在副本节点708处被执行。在副本节点708处执行DML1和DML2之后,副本节点708分别在通信720和730中向源节点704发送同步确认。在图8中,源节点704在执行DML2之前等待对于DML1的同步确认。与事务T1相关联的查询1在过程734中被源节点执行。注意,查询1是在DML1和DML2已在源节点704和副本节点708之间同步之后执行的,并且从副本节点708接收了同步确认。
当事务T1要被提交时,在步骤738中,源节点704通过发送同步准备提交请求740来使副本708准备提交事务。在接收到通知740后,副本节点708在方框742中准备提交事务,包括向持久性存储写入准备提交日志并且在副本节点708处将该事务标记为“存疑”。副本节点708随后向源节点704发送同步准备提交确认744。
当源节点704接收到确认744时,源节点704在方框748中对于该事务写入提交日志,包括将该提交日志写入到持久性存储。源节点704在方框752中向副本节点708发送同步通知,或者提交请求754。当通知754被副本节点708接收到时,副本节点708在方框756中对于该事务写入提交日志,包括将该提交日志写入到持久性存储并且在副本节点708处将该事务标记为“已提交”。副本节点708随后向源节点704发送同步提交确认758。在接收到提交确认758后,源节点704在方框762中向客户端(未示出)确认提交。
在传统的两阶段提交协议700中,每一个DML语句的执行要求源节点704和副本节点708之间的网络往返行程。作为提交过程的一部分要求两个额外的往返行程。这些网络通信可延迟事务处理,并且可增大源节点704处的网络和处理负担,这可能是不合需要的,尤其如果使用协议700的系统包括多个副本节点则更是如此。进一步的延迟源自于系统在方框762中等待向客户端确认提交,直到写入日志已在方框748、756中被写入到源节点704和副本节点708两者处的持久性存储为止。
这一节(示例5)中描述的示例提供了一种表格复制协议,其能够消除或减小典型同步表格复制实现的性能开销,同时仍提供向副本同步传播更新。也就是说,源节点和副本节点处的操作的同步不晚于事务被源节点提交之时。在某些实现方式中,本文描述的表格复制协议可被应用到对于给定的源表格包括多个副本节点的系统。此外,这些协议可被应用到具有多个源节点的系统,或者具有多个源节点和多个副本节点的系统。然而,为了论述的简单,本公开继续论述使用单个源节点和单个副本节点的示例。
根据此示例5的一个方面,源节点处的事务的DML语句被异步传播到副本节点,但它们在事务在源节点处被提交时是同步的。图9呈现了实现本公开的这个方面的示例协议800。实现协议800的系统具有源节点804和副本节点808,它们具有各自的执行时间线806和810。在方框814中,由源节点804维护的表格1上的DML语句DML1在源节点804处被执行。DML1被源节点804在通信816中异步发送到副本节点808。DML1在方框818处在副本节点808上被执行。
在过程822中,另一DML语句DML2在由源节点804维护的表格2上被执行。DML2被源节点804在通信824中异步发送到副本节点808。DML2在方框826处在副本节点808上被执行。因为通信816是异步的,所以源节点804在方框822中执行DML2之前不需要从副本节点808接收关于在方框818中DML1的执行完成的确认。
在可选的过程830中,作为与DML1和DML2相同的事务的一部分访问表格1的查询1在源节点804处被执行。根据这个示例5的一些实现方式,当查询1是与DML1和DML2相同的事务的一部分时(所谓的读取自己写入(read-own-write)场景),即使该事务尚未被提交,并且DML1和DML2可能在副本节点808尚未被执行,查询1在源节点804处也是可执行的。
在一些示例中,当被实现协议800的系统接收的事务中的查询访问被同一事务中的一个或多个DML语句更新的表格时,该查询被数据库客户端直接发送到源节点804(步骤842)。在其他示例中,该查询最初可被副本节点808接收,如可选方框834中所示。在此场景中,当最初在副本节点808处被接收到时,查询1等待直到同一事务中的待处理的DML语句DML1和DML2从源节点804异步到达并且在方框818和826中在副本节点808处被重放为止。一旦DML1和DML2已在副本节点808上执行,查询1就在可选方框838中在副本节点808处执行。
在一具体示例中,事务包括在DML语句被执行时递增的序列ID值。如果查询1当最初被副本节点808接收时与比副本节点808当前已知的序列ID高的序列ID相关联,则查询1在副本节点808处的执行可被延迟,直到副本节点808的序列ID通过对与查询1在同一事务中的更早DML语句的执行而赶上查询1的序列ID为止。
在其他实现方式中,副本节点808将查询1转发到源节点804,例如在可选的通信842中转发。在特定示例中,查询1的执行被延迟,等待同一事务的DML1和DML2在副本节点808上的执行。然而,如果超过了等待时间的某个预定阈值,则查询1被副本节点808在通信842中重路由到源节点804,并且查询1随后在可选方框830处被源节点804执行。该预定阈值可取决于特定实现方式并且可例如是约0.1毫秒、约0.25毫秒、约0.5毫秒、约0.75毫秒、约1毫秒、约1.5毫秒、约2毫秒、约5毫秒、约10毫秒或者约50毫秒,例如是0.1毫秒、0.25毫秒、0.5毫秒、0.75毫秒、1毫秒、1.5毫秒、2毫秒、5毫秒、10毫秒或50毫秒。在另外的实现方式中,该预定阈值可在约0.05毫秒到约50毫秒之间,约0.1毫秒到约10毫秒之间,约0.25毫秒到约5毫秒之间,约0.5毫秒到约2.5毫秒之间或者约0.1毫秒到约1毫秒之间,例如在0.05毫秒到50毫秒之间,0.1毫秒到10毫秒之间,0.25毫秒到5毫秒之间,0.5毫秒到2.5毫秒之间或者0.1毫秒到1毫秒之间。在其他实现方式中,该预定阈值具有某个其他值。
实现协议800的数据库环境通常被设计为规定例如查询1这样的查询能够看到在与该查询相同的事务内做出的改变(即,确保读取自己写入语义)。在特定示例中,对于事务维护更新的表格列表。每当查询开始时就检查表格列表。如果查询访问在同一事务中改变的表格,则该查询被路由到该表格的源节点804,或者查询的执行被延迟直到该事务的先前DML在目标副本节点处被重放(replay)为止。
在另一实现方式中,更新的表格列表被发送到客户端库的事务情境并且被缓存在该事务情境处。在查询将会访问在同一事务内改变的表格的情况下,客户端可将该查询转发到源节点804,而不是转发到副本节点808。此实现方式不仅帮助避免了查询访问可能过时的数据,而且它与让查询首先被发送到副本节点808只是为了之后被副本节点808发送到源节点804的情况相比可改善性能。
在至少某些实现方式中,更新的表格列表对应于用于获取、检查和释放表格锁的列表。例如,当表格被事务更新时,其可在该列表上被标记以便在该表格上获取锁,该锁可以是与其他事务共享的锁。因为该表格已经被记录在列表上,所以同一列表可用于判定查询是否将要访问已在同一情境(事务)内更新的表格。从而,在至少某些示例中,本公开的这个方面可利用数据库环境中的现有基础设施以便促进同步复制。在其他示例中,一单独的列表可用于跟踪什么表格被事务所更新,或者这些表格可以其他方式被指示为被事务所使用。例如,表格可被用一标志标记来指示出它们正被事务更新,或者可包括指示出什么事务当前正更新该表格的字段。
当包括DML语句DML1和DML2的事务要在源节点804处被提交时,在方框846,源节点804向副本节点808发送同步准备提交请求850。副本节点808在方框854中预提交该事务,包括向持久性存储写入预提交日志并且在副本节点808处将该事务标记为“存疑”。在替换实现方式中,事务在方框854中在副本节点808处被标记为“存疑”,但预提交日志不被写入到持久性存储。
在本公开的至少一些实现方式中,预提交日志条目与提交日志条目类似。在一具体示例中,预提交日志条目由写入集合提取器316和日志生成器324生成,并且被日志发送器328发送,其方式类似于参考图3对于源节点302处的写入操作和提交操作描述的类似。
在更具体的实现方式中,预提交日志条目除了DML语句被提交了这个事实外还可包括信息,例如时间戳。在特定示例中,该时间戳与预提交操作何时发生相关联。在复制期间,当操作被预提交时,其被使得对写入日志重放器可用,例如并行写入日志重放器344(图3)。然而,改变不可被其他数据库读取者查看,直到整个事务被提交为止。在本公开的一方面中,一旦每个成分DML语句已被执行并预提交,整个事务就可被提交。
一旦事务已被副本节点808预提交,副本节点808就向源节点804发送同步确认860。在接收到确认860之后,源节点804在方框864中提交事务,包括向持久性存储写入对于该事务的写入日志。在提交该事务之后,源节点804在方框868中向副本节点808发送同步提交请求872。在接收到提交请求872之后,副本节点808在方框876中提交该事务,包括向持久性存储写入提交日志并且在副本节点708处将该事务标记为“已提交”。在提交该事务之后,副本节点808向源节点804发送同步提交确认880,源节点804随后在方框884中向客户端(未示出)确认该提交。
图9所示的协议800中的提交过程——包括如上所述的预提交和提交阶段——与图8所示的两阶段提交过程700大体类似。应当明白,从源节点804向副本节点808异步发送DML语句可与其他提交方案结合使用。例如,示例6描述了可与向副本节点异步发送DML语句结合使用的替换提交协议。通过将示例5与示例6的提交方案相结合而获得的协议在示例7中描述。
在图9中,在准备提交请求850和确认860之间的准备提交步骤中的同步往返行程期间,副本节点将副本侧事务标记为存疑。如果被状态为存疑的事务改变的数据被该事务外的查询(读取操作)所访问,则查询执行被推迟,直到该事务的状态被改变为已提交或中止为止。如果事务要在源节点804处被提交,而不将副本侧事务标记为存疑,则有可能刚好在该事务在源节点804处被提交之后在副本节点808处开始的查询(在该事务之外)可能看不到在副本侧该事务的结果。可结合示例5使用的适当可见性方案在示例4中描述。
利用此示例5的协议可改善数据库性能,因为它不会对于每一个DML语句要求源节点804和副本节点808之间的同步。预提交过程可用作整个事务的同步点,这与典型的同步复制协议不同,典型的同步复制协议对于提交过程要求两个同步点,并且对于事务中的每个DML语句要求额外的同步点。如果希望,如图9所示,协议800可包括额外的同步点,例如在提交过程期间(提交请求872和确认880)。在提交过程期间使用额外的同步点在某些复制场景中可能是有用的,例如当副本节点不是被用于负载平衡而是被用于“高可用性数据”目的时或者除了被用于负载平衡以外还被用于“高可用性数据”目的时。
如果希望,源节点804和副本节点808之间的通信可被分组以进一步减轻网络通信对于在源节点804处提交事务或者在副本节点808上预提交或提交事务所需要的时间的影响。例如,并发的预提交请求850或并发的提交请求872可被源节点804分组成单个物理网络调用。类似地,来自副本节点808的预提交确认860或提交确认880可被分组成单个物理网络调用。
在图9中,虽然DML语句被异步传播到副本节点,但副本节点808处的预提交操作854(其将事务T1标记为存疑)不会执行,直到该事务的所有DML语句在副本节点808处被重放为止。该事务在源节点804处不提交,直到该事务在副本节点808处被预提交为止。从而,与完全异步复制相比,此示例5的协议可潜在增大事务提交延时。
然而,在实践中,延时的这个增大可能不会出现,或者可能不是显著的。例如,如图9中那样,如果事务中的读取查询(例如方框830中对查询1的执行)跟随在同一事务中的DML语句之后(例如,方框822中的源节点804上的DML2执行),则很有可能在正常执行的过程中,复制的DML语句将在查询1正在方框830中在源节点804处被执行的同时在副本节点808处被重放(在方框826中)。另外,在许多典型的客户端/服务器数据库应用模型中,在执行事务中的DML语句之后,DML执行结果经由网络调用被提供给客户端(未示出)。由于这个客户端/服务器通信可与源节点804和副本节点808之间的网络通信重叠,所以到方框846、850、854、860中的预提交处理之时,复制的DML语句可能已经在副本节点808处被重放。
在DML语句的执行结果在执行之后(并且在事务提交之前)被确认给客户端的上述场景中,作为异步DML复制的结果,副本节点808处的DML重放期间的差错将在源节点804处的DML操作的完成已经被确认给客户端之后被检测到。然而,因为差错最迟将在提交事务之前被检测到,所以如果在事务在副本节点808处重放期间发生差错则事务可被安全地回滚。
图10A呈现了根据此示例5的一实现方式在源节点处发生的动作的方法900的流程图。在方法900中,事务的一个或多个数据库操作被源节点异步发送到副本节点,并且源节点和副本节点之间的同步通信被用于在副本节点处预提交事务。
参考图10A,在步骤905中,源节点在由源节点维护的至少一个数据库表格上执行数据库操作。当在本文使用时,术语数据库表格指的是数据库的任何部分,无论是如何组织的。数据库操作可例如是与事务相关联的DML语句。方法900可被应用到维护多个表格的源节点。类似地,方法900可被应用到包括多个数据库操作的事务,或者包括数据库操作之前和/或之后的一个或多个查询的事务。
在步骤910中,源节点将数据库操作——例如DML语句——异步发送到副本节点。副本节点复制源节点的至少一个表格,但可复制源节点的多个表格。此外,数据库系统可包括多个源节点,并且副本节点可复制来自第一源节点的一个或多个表格和来自第二源节点的一个或多个表格。对于该事务中的任何额外数据库操作,源节点可反复重复步骤905和910。
在可选的步骤915中,源节点接收与该数据库操作在同一事务中的查询。在一个示例中,该查询是从数据库客户端接收的。在另一示例中,该查询是从副本节点接收的。例如,当客户端判定该查询将访问在与该查询相同的事务中改变的表格时,该查询可被客户端发送到源节点,而不是副本节点。类似地,例如当副本节点判定该查询将访问在与该查询相同的事务内改变的表格时,该查询可被副本节点发送到源节点。或者,副本节点可首先延迟该查询在副本节点处的执行,等待该查询所依从的DML语句的执行,然后如果该延迟超过了预定的阈值时间则将该查询转发到源节点。
在可选的步骤920中,如果查询被源节点接收到(访问被与该查询相同的事务所改变的表格的查询,例如读取该事务中的数据库操作的结果),则源节点执行该查询。
源节点在步骤925中向副本节点发送同步请求以准备提交事务。在步骤930中,源节点接收来自副本节点的同步预提交确认,指出事务在副本节点处被预提交,例如指出该事务中的DML语句在副本节点处被成功执行了。
源节点在步骤935中提交该数据库操作。在步骤940中,在源节点处提交该事务之后,源节点向客户端确认该提交。
在特定示例中(例如参见以下的示例6和7),在源节点处提交事务之后,源节点向客户端提供确认,而不等待来自副本节点的对于该事务被副本节点提交了的确认。例如,源节点可在源节点处提交事务之后,但是在向客户端发送提交确认之前或之后向副本节点发送异步提交请求。在这种示例中,在向数据库客户端提供确认之前,源节点不等待来自副本节点的对于事务被副本节点提交了的确认。
在其他示例中(例如像图9的协议800中那样),到客户端的确认是在源节点接收到来自副本节点的提交确认之后发送的。例如,在源节点处提交事务之后,源节点可向副本节点发送同步提交请求并且在接收到来自副本节点的同步提交确认之后提交该事务。
图10B提供了表示在此示例5的至少某些实现方式期间在副本节点处发生的动作的方法950的流程图。在方法950中,由源节点异步发送的事务的一个或多个数据库操作被副本节点接收,并且源节点和副本节点之间的同步通信被用于在副本节点处预提交事务。
在步骤955中,副本节点接收从源节点异步发送来的数据库操作。例如,数据库操作可以是来自包括一个或多个数据库操作(例如,DML语句)并且可选地包括数据库操作之前和/或之后的一个或多个查询的事务的DML语句。
在可选的步骤960中,副本节点例如从数据库客户端接收事务中的查询,其中该查询访问由与该查询相同的事务改变的表格。在特定实现方式中,副本节点检查该查询是否读取同一事务中的数据库操作的结果,并且如果是,则在可选的步骤965中向源节点发送该查询。例如,当副本节点判定该查询访问在与该查询相同的事务中改变的表格时,副本节点可将该查询转发到源节点。在另一示例中,副本节点检查该查询是否读取同一事务中的数据库操作的结果,并且如果是,则首先延迟该查询的执行,等待该事务中其结果将被该查询访问的(一个或多个)数据库操作(例如,(一个或多个)DML语句)的执行。如果该延迟超过预定的阈值时间,则副本节点在可选的步骤965中将该查询发送到源节点。
在步骤970中,副本节点在至少一个数据库表格的拷贝(副本)上执行该数据库操作,例如DML语句。对于该事务中的任何额外数据库操作,副本节点可反复重复步骤955和970。在可选的步骤975中,副本节点执行与这(一个或多个)数据库操作在同一事务中的查询,例如其执行被延迟(在检查该查询是否读取数据库操作的结果之后)等待在步骤970中数据库操作的执行的查询。
在步骤980中,副本节点接收来自源节点的同步预提交请求。副本节点在步骤985中预提交该事务,例如将该事务的(一个或多个)数据库操作写入到持久性存储中的预提交日志。作为预提交一部分,该事务可被副本节点标记为“存疑”。在另一实现方式中,在步骤985中,该事务在副本节点处被标记为“存疑”,但该事务不被写入到持久性存储中的预提交日志。
在步骤990中,副本节点向源节点发送同步预提交确认,指出该事务被副本节点成功预提交了,包括例如指出事务中的DML语句被副本节点成功执行了。
方法950可包括额外的步骤。在一个实现方式中,副本节点接收来自源节点的异步提交请求或提交通知。副本节点在接收到提交请求之后提交数据库操作,例如包括一个或多个DML语句的事务。例如,副本节点将关于该事务的提交日志写入到持久性存储并且将该事务标记为已提交。
在另一实现方式中,副本节点接收来自源节点的同步提交请求或提交通知。副本节点提交该事务。例如,副本节点将关于该事务的提交日志写入到持久性存储并且将该事务标记为已提交。在事务被提交之后,副本节点向源节点发送同步提交确认,指出该事务被副本节点成功提交了。
示例6—副本节点处的乐观提交
当复制被用于“高可用性数据”目的时,通常将使用传统的两阶段提交,或者提交时的源节点和副本节点的持久性存储的严格同步。这是因为,在高可用性数据应用中,即使源节点变得不可用,副本节点也应当能够继续服务客户端读取请求,以及可能有写入请求。然而,当表格复制被用于其他目的时,例如用于负载平衡(图5B),可以使用乐观方案,因为无需完全等待副本节点处的日志持久性I/O就可以决定源事务的提交。在一些实现方式中,取决于表格复制是用于高可用性数据(乐观提交模式关闭)还是用于负载平衡(乐观提交模式开启),提交事务的乐观方案可被选择性地启用(开启或关闭)。
例如,即使副本节点在将其提交日志写入到持久性存储之前崩溃,其也可简单地在重新激活时与源节点处的源表格重新同步,因为提交的日志已经在事务提交之前被安全地写入在源节点处。
参考图11的协议1000来描述这个乐观提交协议。在图11的协议中,用于事务的一个或多个数据库操作被从源节点复制到副本节点,并且在源节点不等待接收来自副本节点的提交确认的情况下,向数据库客户端确认该事务为已提交。如图所示,协议1000可遵循典型的同步复制协议,其中具有各自的执行时间线1006的源节点1004和副本节点1008在每一个DML语句之后是同步的。然而,如果希望,此示例6的乐观提交协议可结合其他DML复制方案使用。例如,此示例6的乐观提交协议可与示例5的异步DML复制协议相结合。这种结合在下文中在示例7中描述。
源节点1004和副本节点1008执行事务的一个或多个数据库操作。例如,如图11所示,用于事务T1的分别在表格1和2上的DML语句DML1和DML2在方框1014、1024中在源节点1004处被执行。这些DML语句分别在通信1016和1026中被从源节点1004同步发送到副本节点1008。DML1在过程1018中在副本节点1008处被执行。DML2在方框1028中在副本节点1008处被执行。在副本节点1008处执行DML1和DML2之后,副本节点1008分别在通信1020和1030中向源节点1004发送同步确认。
当事务T1要被提交时,在方框1038中,源节点1004通过发送同步预提交请求1040来使副本1008准备提交事务。在接收到预提交请求1040之后,副本节点1008在方框1042中使事务准备预提交,包括在副本节点1008处将该事务标记为“存疑”。在一些实现方式中,方框1042可包括向持久性存储写入预提交日志。在方框1042之后,副本节点1008向源节点1004发送同步预提交确认1044。
在预提交请求1040正被发送,并且副本节点1008正在方框1042中预提交事务期间,源节点1004继续在方框1038中提交事务。也就是说,与提交过程1038相关联的I/O开销(用于源节点1004处的持久性操作)与同步预提交请求1040的网络开销重叠,可选地与方框1042中副本节点1008的预提交过程的预提交I/O开销(用于副本节点1008处的本地持久性操作)重叠,并且与同步预提交确认1044的网络开销重叠。
如果希望,源节点1004和副本节点1008之间的通信可被分组以进一步减轻网络通信对于在源节点1004处提交事务或者在副本节点1008上预提交或提交事务所需要的时间的影响。例如,并发的预提交请求1040可被源节点1004分组成单个物理网络调用。类似地,来自副本节点1008的预提交确认1044可被分组成单个物理网络调用。
在源节点1004已在方框1038中提交了事务,并且从副本节点1008接收到了预提交确认1044之后,源节点1004在方框1048中向客户端(未示出)确认提交。随后,在方框1052中,源节点1004向副本节点1008发送异步提交请求1054。当异步提交请求1054被副本节点1008接收到时,副本节点1008在方框1056中对于该事务写入提交日志,包括将该提交日志写入到持久性存储并且在副本节点1008处将该事务标记为“已提交”。在其他实现方式中,异步提交请求1054被源节点1004在方框1048中向客户端提供提交确认之前发送或者与提供提交确认并行地发送。
与使用图8的协议700的系统,或者使用图9的协议800的系统相比,使用图11的协议1000的系统向客户端提供了事务提交的更早确认,因为其是在没有由协议700和800在最终同步提交阶段中招致的往返通信和日志持久性延迟的情况下发生的。一旦事务被源节点1004提交,这些改变就对访问源节点1004的读取者可用。这些改变在其被副本节点1008提交之后可被副本节点1008访问。
如上所述,副本节点1008处的事务由于预提交过程1042而被标记为存疑。如果事务要在源节点1004处被提交,而不将副本侧事务标记为存疑,则有可能刚好在该事务在源节点1008处被提交之后在副本节点1004处开始的查询(在该事务之外)可能看不到在副本侧该事务的结果。可结合示例6使用的适当可见性方案在示例4中描述。
在图11的协议1000中,如果查询(在该事务之外)在副本节点1008处开始预提交处理之前被副本节点1008接收,则诸如DML1和DML2之类的数据库操作的改变对于查询来说是不可见的,因为它们的对应事务状态仍被标记为活跃。(此场景不同于像示例5中那样处理同事务查询,在示例5中副本节点处的查询首先被检查以判定其是否将访问在与该查询相同的事务中改变的表格。如果是,则该查询可被发送到源节点,或者在副本节点处延迟执行直到相应的数据库操作(例如,DML语句)已在副本节点处被执行为止。)
在图11的示例中,对于在副本节点1008处接收的访问当前事务的经修改的记录的当前事务之外的查询,副本节点1008将等待,直到事务的状态被从活跃或存疑(对于当前事务)改变成已提交或中止,然后执行该查询(在当前事务之外),而不是读取可能过时的数据。或者,如果副本节点1008判定查询(在当前事务之外)将访问被标记为存疑(对于当前事务)的记录,则副本节点1008可将该查询转发到源节点1004来执行。或者,副本节点1008可在等待事务变得已提交或中止达预定阈值时间之后转发查询。
图12提供了描述根据此示例6的一实现方式在源节点处发生的动作的方法1100的流程图。在方法1100中,事务的一个或多个数据库操作在数据库环境内被从源节点复制到副本节点,并且在源节点不等待接收来自副本节点的提交确认的情况下,向数据库客户端确认该事务为已提交。
在步骤1105中,在由源节点维护的至少一个数据库表格上执行至少一个数据库操作。当在本文使用时,术语数据库表格指的是数据库的任何部分,无论是如何组织的。例如,数据库操作可以是包括一个或多个DML语句的事务中的一DML语句。事务也可包括一个或多个查询。在一些示例中,源节点维护多个表格,并且这些表格中的一个或多个可被复制到一个或多个副本节点。在一些情况中,所有的副本节点都复制源节点的相同的一个或多个表格。在其他情况中,不同的副本节点复制不同的源节点表格。
在步骤1110中,源节点将该数据库操作发送到副本节点。例如,源节点将该数据库操作同步发送到副本节点。在此情况下,源节点在通过执行下一数据库操作或预提交(一个或多个)数据库操作而继续之前等待关于副本节点已执行了该数据库操作的确认。对于该事务中的任何额外数据库操作,源节点可反复重复步骤1105和1110。
源节点在步骤1115中向副本节点发送同步预提交请求。副本节点执行预提交操作(例如,如上文参考图11所述),然后向源节点发送同步预提交确认。源节点在步骤1120中接收来自副本节点的同步预提交确认。
事务在步骤1125中被源节点提交,例如如上文参考图11所述。在步骤1130中,在源节点处提交该事务之后,源节点向数据库客户端发送提交确认,确认该事务的提交。
在可选的步骤1135中,在源节点处提交该事务之后,源节点向副本节点发送异步提交请求。虽然图12示出了步骤1135在步骤1130之后发生,但在至少一些示例中,步骤1135可在步骤1130之前发生或者与步骤1130并行发生。在这种示例中,在向数据库客户端提供确认之前,源节点不等待来自副本节点的对于事务被副本节点提交了的确认。
在可选的步骤1140中,第二数据库操作被源节点执行,例如访问被先前提交的数据库操作所改变的记录的数据库操作。例如,第二数据库操作可在源节点没有接收来自副本节点的提交通知的情况下被执行。
示例7–在源节点处的提交发起和副本节点处的乐观提交时带有DML操作的同步的复制
如果希望,示例5和6的协议可被结合,如图13的协议1200中所示。实现协议1200的系统包括源节点1204和副本节点1208,它们具有各自的执行时间线1206、1210。
在过程1214中,表格1上的DML语句DML1在源节点1204处被执行,然后在通信1216中被异步发送到副本节点1208。在方框1218中,DML1在副本节点1208上被执行。表格2上的另一DML语句DML2在方框1222中在源节点1204处被执行,然后在通信1224中被异步发送到副本节点1208。DML2在过程1226中在副本节点1208处被执行。
在可选的方框1230中,作为与DML1和DML2相同的事务的一部分的查询1在源节点1204处被执行。如上文针对示例5所述,在一些情况中,查询1是由源节点1204直接从数据库客户端接收的。在其他示例中,查询1被副本节点1208转发到源节点1204。例如,副本节点1208在可选的方框1234中接收查询1。在一些情况中,当副本节点1208判定查询将会访问在与该查询相同的事务中修改的表格时,副本节点1208例如在可选的通信1238中将该查询转发到源节点1204。在其他示例中,查询可首先被副本节点1208扣住,等待副本节点1208执行同一事务中该查询所依从的DML语句。在副本节点1208执行这些DML语句后,副本节点1208可例如在可选的过程1242中处理处理该查询。在其他示例中,如果查询在副本节点1208处等待了超过预定阈值的时间,则该查询被副本节点1208在可选的通信1238中转发到源节点1204。源节点1204随后在可选的方框1230中执行该同事务查询。
该预定阈值可取决于特定实现方式并且可例如是约0.1毫秒、约0.25毫秒、约0.5毫秒、约0.75毫秒、约1毫秒、约1.5毫秒、约2毫秒、约5毫秒、约10毫秒或者约50毫秒,例如是0.1毫秒、0.25毫秒、0.5毫秒、0.75毫秒、1毫秒、1.5毫秒、2毫秒、5毫秒、10毫秒或50毫秒。在另外的实现方式中,该预定阈值可在约0.05毫秒到约50毫秒之间,约0.1毫秒到约10毫秒之间,约0.25毫秒到约5毫秒之间,约0.5毫秒到约2.5毫秒之间或者约0.1毫秒到约1毫秒之间,例如在0.05毫秒到50毫秒之间,0.1毫秒到10毫秒之间,0.25毫秒到5毫秒之间,0.5毫秒到2.5毫秒之间或者0.1毫秒到1毫秒之间。在其他实现方式中,该预定阈值具有某个其他值。
协议1200可提供对查询和DML语句的改善的处理,因为数据库操作被异步传播。例如,源节点1204可执行DML2,而无需等待DML1与副本节点1208同步。类似地,查询1可被源节点1204执行,而无需等待DML1和DML2与副本节点1208的同步。
在方框1246,源节点1204准备提交包括DML1、DML2和查询1的事务。源节点1204在通信1250中向副本节点1208发送同步准备提交请求。副本节点1208在方框1254中预提交该事务,将该事务在副本节点1208处标记为“存疑”。在一些实现方式中,方框1254可包括让副本节点1208向持久性存储写入预提交日志。
副本节点1208在通信1260中向源节点1204发送同步预提交确认。在通信1250、1260和预提交过程1254正在发生的时段期间,源节点1204在方框1246中写入提交日志。使源1204处对写入日志的写入与副本节点1208处的预提交过程重叠可帮助减小由复制过程招致的延迟。
如果希望,源节点1204和副本节点1208之间的通信可被分组以进一步减轻网络通信对于在源节点1204处提交事务或者在副本节点1208上预提交或提交事务所需要的时间的影响。例如,并发的预提交请求1250可被源节点1204分组成单个物理网络调用。类似地,来自副本节点1240的预提交确认1260可被分组成单个物理网络调用。来自源节点1204的异步提交请求1272(下文描述)可被类似地分组来发送到副本节点1208。
在方框1264中,在提交过程1246已在源节点1204处完成,并且源节点1204已接收到来自副本节点1208的同步预提交确认1260之后,源节点1204向客户端(未示出)确认该事务的提交。在过程1268中,源节点1204使副本节点1208准备提交事务,包括通过在通信1272中发送异步提交请求。在一些示例中,方框1268发生在方框1264中向客户端确认提交之前或者与其并行发生。
副本节点1208在方框1276中提交该事务,包括通过向持久性存储写入提交日志并且在副本节点1208处将该事务标记为“已提交”。
除了通过不在每一个DML事务要求同步来加快源节点处的事务处理以外,协议1200还可通过包括单个同步点(预提交过程、通信1250和1260)作为事务提交过程的一部分来改善复制性能。此过程还允许了使事务的结果在源节点1204处可用(对于同一事务中或该事务之外的查询),而无需等待该事务在副本节点1208处被完全提交。当事务被副本节点1208提交时,可在副本节点1208处使复制的数据对于该事务之外的查询可用。因为副本节点1208将DML语句标记为存疑直到该事务被提交为止,并且因为如果该事务中的较早改变的结果不可见则该事务之外的查询不会在副本节点1208上执行,所以不会有读取请求从副本节点1208获得过时数据的危险。
图14A呈现了根据此示例7的一实现方式在源节点处发生的动作的方法1300的流程图。在方法1300中,事务的一个或多个数据库操作被从源节点异步发送到副本节点,源节点和副本节点之间的同步通信被用于在副本节点处预提交事务,并且该事务被向数据库客户端确认为已提交,而无需源节点等待接收来自副本节点的提交确认。
在步骤1308中,源节点在由源节点维护的至少一个数据库表格上执行数据库操作。当在本文使用时,术语数据库表格指的是数据库的任何部分,无论是如何组织的。数据库操作可例如是与事务相关联的DML语句。方法1300可被应用到维护多个表格的源节点。类似地,方法1300可被应用到包括多个数据库操作的事务,或者包括数据库操作之前和/或之后的一个或多个查询的事务。
在步骤1310中,源节点将数据库操作——例如DML语句——异步发送到副本节点。副本节点复制源节点的至少一个表格,但可复制源节点的多个表格。此外,数据库系统可包括多个源节点,并且副本节点可复制来自第一源节点的一个或多个表格和来自第二源节点的一个或多个表格。对于该事务中的任何额外数据库操作,源节点可反复重复步骤1305和1310。
在可选的步骤1312中,源节点接收与该数据库操作在同一事务中的查询。在一个示例中,该查询是从数据库客户端接收的。在另一示例中,该查询是从副本节点接收的。例如,当客户端判定该查询将访问在与该查询相同的事务中改变的表格时,该查询可被客户端发送到源节点,而不是副本节点。类似地,例如当副本节点判定该查询将访问在与该查询相同的事务内改变的表格时,该查询可被副本节点发送到源节点。或者,副本节点可首先延迟该查询在副本节点处的执行,等待该查询所依从的DML语句的执行,然后如果该延迟超过了预定的阈值时间则将该查询转发到源节点。
在可选的步骤1314中,如果查询被源节点接收到(访问被与该查询相同的事务所改变的表格的查询,例如读取该事务中的数据库操作的结果),则源节点执行该查询。
源节点在步骤1316中向副本节点发送同步请求以准备提交事务。在步骤1318中,源节点接收来自副本节点的同步预提交确认,指出事务在副本节点处被预提交了,例如指出该事务中的DML语句在副本节点处被成功执行了。
源节点在步骤1320中提交该数据库操作。在步骤1322中,在源节点处提交该事务之后,源节点向客户端确认该提交。
在特定示例中,在源节点处提交事务之后,源节点向客户端提供确认,而不等待来自副本节点的对于该事务被副本节点提交了的确认。例如,源节点可在向客户端发送提交确认之后在步骤1324中向副本节点发送异步提交请求。虽然步骤1324被示为在步骤1322中向数据库客户端提供确认之后发生,但在其他示例中,步骤1324可在步骤1322之前发生或与步骤1322并行发生。
图14B提供了表示在此示例7的至少某些实现方式期间在副本节点处发生的动作的方法1330的流程图。在方法1330中,从源节点异步发送到副本节点的一个或多个数据库操作被副本节点接收,源节点和副本节点之间的同步通信被用于在副本节点处预提交事务,并且事务被向数据库客户端确认为已提交,而无需源节点等待接收来自副本节点的提交确认。
在步骤1332中,副本节点接收从源节点异步发送来的数据库操作。例如,数据库操作可以是来自包括一个或多个数据库操作(例如,DML语句)并且可选地包括数据库操作之前和/或之后的一个或多个查询的事务的DML语句。
在可选的步骤1334中,副本节点例如从数据库客户端接收事务中的查询,其中该查询访问由与该查询相同的事务改变的表格。在特定实现方式中,副本节点检查该查询是否读取同一事务中的数据库操作的结果,并且如果是,则在可选的步骤1336中向源节点发送该查询。例如,当副本节点判定该查询访问在与该查询相同的事务中改变的表格时,副本节点可将该查询转发到源节点。在另一示例中,副本节点检查该查询是否读取同一事务中的数据库操作的结果,并且如果是,则首先延迟该查询的执行,等待该事务中其结果将被该查询访问的(一个或多个)数据库操作(例如,(一个或多个)DML语句)的执行。如果该延迟超过预定的阈值时间,则副本节点在可选的步骤1336中将该查询发送到源节点。
在步骤1338中,副本节点在至少一个数据库表格的拷贝(副本)上执行该数据库操作,例如DML语句。对于该事务中的任何额外数据库操作,副本节点可反复重复步骤1332和1338。在可选的步骤1340中,副本节点执行与这(一个或多个)数据库操作在同一事务中的查询,例如其执行被延迟(在检查该查询是否读取数据库操作的结果之后)等待在步骤1338中数据库操作的执行的查询。
在步骤1342中,副本节点接收来自源节点的同步预提交请求。副本节点在步骤1344中预提交该事务,例如作为由副本节点进行的预提交的一部分将该事务标记为“存疑”。在一些实现方式中,步骤1344可包括将该事务的(一个或多个)数据库操作写入到副本节点的持久性存储中的预提交日志。在步骤1346中,副本节点向源节点发送同步预提交确认,指出该事务被副本节点成功预提交了,包括例如指出事务中的DML语句被副本节点成功执行了。
在步骤1348中,副本节点接收来自源节点的异步提交请求。副本节点在步骤1350中提交该数据库操作。例如,副本节点将关于该事务的提交日志写入到持久性存储并且将该事务标记为已提交。
示例8—在表格复制重激活时维持跨表格事务一致性
本公开的某些示例可涉及在复制——例如在示例6中描述的在副本节点处具有乐观提交的同步表格复制——已被激活或重激活之后使副本系统与源系统同步,例如,在一些情形中,表格复制可被手动解除激活(例如为了执行维护)并且随后被重激活,或者可由于在表格复制期间发生的例外而被重启。
图15图示了如果表格被允许逐表格地递增式重激活则可能发展出来的潜在问题。图15图示了系统1400,其具有包含表格1和2的源系统1410和包含表格1和2的拷贝的副本系统1420,这些表格正被递增地同步。在源系统1410中,对表格1和表格2的改变在同步被解除激活之后已累积了。副本系统1420表明对于表格1的同步者已完成了提交对表格1’的改变,但对于表格2’的同步者仍在工作。如果副本系统1420在此时被访问,则表格1’和表格2’之间的联接操作可返回不一致的数据(与源系统1410处的表格1和表格2之间的相同联接操作相比)。
图16A提供了用于在表格复制的激活或重激活之后的重同步期间辅助维持由副本系统接收的读取操作中的一致性的示例方法1500的流程图。在步骤1510中,阻止复制日志重放,例如在示例1-7中描述的过程。在特定实现方式中,日志条目继续被源系统生成,并且可被发送到副本系统,即使日志条目被阻止被副本系统重放。
为了解决重激活时段期间的这个潜在不一致的问题,源系统和副本系统可利用单个内部事务重激活表格。这样,在重激活期间应用的改变可对于所有复制的表格同时变得可见。
在并行多线程过程中,源节点中的每个表格在步骤1515中被锁定。在步骤1520中,在并行多线程过程中,复制日志生成在每个源表格处被重激活。源表格在步骤1525中在并行多线程过程中被解除锁定。在步骤1530中获取快照时间戳。步骤1525和1530的顺序在方法1500的一些实现方式中可被颠倒。
在步骤1535中,副本表格与源表格选择性地同步。如上所述,在这个过程期间,副本日志可被(一个或多个)源节点生成,并且如果希望可被发送到(一个或多个)适当副本节点。然而,副本日志尚未被重放。
同步可以任何适当的方式执行。在一个具体示例中,同步是通过将每个源表格和其副本表格的行ID值(如示例3中所述)相比较来执行的。如果行ID值在源表格中存在,但在副本表格中不存在,则记录被拷贝到副本表格。如果行ID值在副本表格中存在,但在源表格中不存在,则具有该行ID值的记录被从副本表格去除。如果行ID值在源表格和副本表格中存在,则不采取动作。利用在步骤1530中获取的时间戳执行同步(例如,利用时间戳来选择对于复制日志重放忽略哪些事务,而改为利用同步来恢复)。从而,例如,对于具有不晚于同步时间戳的事务提交时间戳的任何事务,在表格的拷贝(副本表格)和源表格之间同步记录。
在步骤1540中,复制日志重放的继续开始在源主机处对于复制的数据库表格的拷贝发起。在各种实现方式中,发起是由源系统、副本系统或者与副本系统通信的另一系统执行的。
在复制日志重放期间,日志条目(写入日志和事务提交日志)仅在操作的时间戳晚于在步骤1525中获取的同步时间戳发生的情况下被重放。有利地,这可帮助防止事务被执行多次,或者错过的日志被播放,即使同步过程已经对复制的表格做出了适当的改变。
图16B提供了至少部分由副本主机实现的同步操作的方法1550。在步骤1555中,副本主机接收同步时间戳。在步骤1560中,至少部分基于该同步时间戳,在副本主机处复制的数据库表格的拷贝选择性地与源数据库表格同步。在步骤1565中,至少部分基于该同步时间戳,复制日志重放在副本主机处继续开始。例如,副本主机对于具有不早于该同步时间戳的更新时间戳或者具有晚于该同步时间戳的相应事务提交时间戳的任何条目,执行DML重放器日志的条目。副本主机也可对于晚于该同步时间戳的任何事务提交时间戳执行事务日志的任何条目。
如方法1550中所述,对于复制的表格阻止副本日志重放,直到同步过程完成为止。在至少一个实现方式中,在同步期间,复制的表格在同步正被执行期间仍可接收读取请求。然而,读取请求将看到表格的未同步版本,因此不同表格上的联接操作仍将在与彼此一致的表格版本上操作(虽然它们与源表格中可用的数据相比可能是过时的)。一旦同步完成,联接操作就将能够访问表格的同步版本。
图17提供了系统1600的示图,图示了副本节点的DML和事务日志队列1605、1610,图示了图17的方法1600可如何辅助避免多个日志重放或错过的日志的重放。DML日志队列1605被示为具有多个DML语句1620、1630、1640、1650,并且事务日志队列被示为具有多个事务提交操作1625、1635、1645、1655。在图16中,箭头指示写入操作与其相应的事务提交操作之间的关系。
在此示例中,副本表格和源表格以等于11的时间戳1615同步。在图17的方法1600的一个方面中,如果关联的时间戳大于或等于同步时间戳1615,则写入操作被重放,因为那些语句将在同步完成之后发生。如果提交操作的时间戳大于同步时间戳1615,则写入操作也被重放,即使写入操作本身的时间戳小于同步时间戳。注意,在示例实现方式中,写入操作的时间戳始终小于其相应事务提交操作的时间戳。
写入操作1620和1630将不被重放,因为它们的写入时间戳小于11并且它们的提交时间戳不大于11。写入操作1640将被重放,即使其写入时间戳小于11,因为其提交操作1645的时间戳大于11。写入操作1650将被重放,因为其写入时间戳大于11。事务提交操作被重放,如果其时间戳大于同步时间戳的话。在图17的示例中,对于TX条目1645和TX 1655的事务提交操作被重放。
在一具体实现方式中,如果写入操作的时间戳小于同步时间戳,则写入操作被扣住,直到相应的提交日志被接收并分析为止。如上所述,如果提交操作的时间戳小于同步时间戳,则写入操作不被重放。如果提交时间戳大于同步时间戳,则写入操作被重放。
这样,事务由同步时间戳来划分。一些更新(较早的更新)是通过同步进行的复制,而其他更新(较晚的更新,或者从大约获取同步时间戳的时间起的更新)通过复制日志的回放被复制。避免了错过的事务和事务的双重回放。另外,由于同步时间戳实际上定义了单个内部事务,所以读取者看到表格的一致视图(全都被更新或者全都未被更新)。
示例9—替换场景
在上述的许多示例中,单个源节点与单个副本节点复制数据库表格。更一般而言,本文描述的协议可用于源节点和n个副本节点之间的1对n复制,其中n是2或更多,n个副本节点的每一者存储数据库表格的拷贝(副本)。在一些实现方式中,n是20、50、100或更多个节点。该协议也可用于n对1复制,其中分布式源系统的至少一部分(例如一个或多个选择的表格,或者其一些部分)具有多个源节点并且被复制到单个副本节点。该协议也可结合m-n复制使用,其中分布式源系统的至少一部分(例如一个或多个选择的表格,或者其一些部分)被复制到多个副本节点。
在上述的许多示例中,在源节点和副本节点之间复制数据库表格。如上所述,术语数据库表格指的是数据库的任何部分,无论是如何组织的。这样,本文描述的协议可用于系统(全数据库的)复制,其中“数据库表格”实际上是整个数据库系统。类似地,当“数据库表格”是整个数据库系统的限定部分时,例如数据库系统中的多个表格之一,则这些协议也可逐表格地应用。在这个情境中,表格复制可逐表格地选择性应用,使得一些表格被复制,而其他的不被复制。
在另外的实现方式中,数据库表格可被分区,例如被分区在多个源节点、多个副本节点或者多个源节点和多个副本节点之间。在一些情况中,源节点和副本节点的一者或两者持有表格的一分区,另一者持有整个表格。在其他情况中,源和副本都持有表格的分区,这些分区可以是相同或不同的。
在上述的许多示例中,源节点与副本节点复制数据。术语“源节点”和“副本节点”表示在表格复制过程中的角色。取决于配置,给定的节点对于一些表格复制操作(例如,对于第一表格或第一组表格)可以是源节点并且对于其他表格复制操作(例如,对于第二表格或第二组表格)可以是副本节点。
示例10—计算系统
图18描绘了适当的计算系统1700的一般化示例,其中可实现描述的创新。计算系统1700并不打算暗示对于本公开的使用范围或功能的任何限制,因为这些创新可在多种多样的通用或专用计算系统中实现。
参考图18,计算系统1700包括一个或多个处理单元1710、1715和存储器1720、1725。在图18中,这个基本配置1730被包括在虚线内。处理单元1710、1715执行计算机可执行指令。处理单元可以是通用中央处理单元(central processing unit,CPU)、专用集成电路(application-specific integrated circuit,ASIC)中的处理器或者任何其他类型的处理器。在多处理系统中,多个处理单元执行计算机可执行指令来增大处理力。例如,图18示出了中央处理单元1710以及图形处理单元或协处理单元1715。有形存储器1720、1725可以是可由(一个或多个)处理单元访问的易失性存储器(例如,寄存器、缓存、RAM)、非易失性存储器(例如,ROM、EEPROM、闪存等等)或者两者的某种组合。存储器1720、1725以适合于由(一个或多个)处理单元1710、1715执行的计算机可执行指令的形式存储实现本文描述的一个或多个创新的软件1780。
计算系统1700可具有额外的特征。例如,计算系统1700包括存储装置1740、一个或多个输入设备1750、一个或多个输出设备1760和一个或多个通信连接1770。诸如总线、控制器或网络之类的互连机制(未示出)互联计算系统1700的组件。通常,操作系统软件(未示出)为在计算系统1700中执行的其他软件提供操作环境,并且协调计算系统1700的组件的活动。
有形存储装置1740可以是可移除或不可移除的,并且包括磁盘、磁带或盒式磁带、CD-ROM、DVD或者可用于以非暂态方式存储信息并且可在计算系统1700内被访问的任何其他介质。计算系统1700存储用于软件1780实现本文描述的一个或多个创新的指令。
(一个或多个)输入设备1750可以是诸如键盘、鼠标、笔或轨迹球之类的触摸输入设备、语音输入设备、扫描设备或者向计算系统1700提供输入的另一设备。(一个或多个)输出设备1760可以是显示器、打印机、扬声器、刻录机或者从计算系统1700提供输出的另一设备。
(一个或多个)通信连接1770使得能够通过通信介质与另一计算实体通信。通信介质以经调制的数据信号的形式输送诸如计算机可执行指令、音频或视频输入或输出或者其他数据之类的信息。经调制的数据信号可以是如下信号:该信号的特性中的一个或多个被以在该信号中编码信息的方式来设置或改变。作为示例而非限制,通信介质可使用电的、光的、RF或其他载体。
可在计算机可执行指令(例如程序模块中包括的那些)在目标真实或虚拟处理器上的计算系统中执行的一般情境中描述创新。一般而言,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、库、对象、类、组件、数据结构等等。根据各种实施例中的需要,程序模块的功能可被组合或分割在程序模块之间。用于程序模块的计算机可执行指令可在本地或分布式计算系统内执行。
术语“系统”和“设备”在本文中被可互换地使用。除非上下文明确地另有指示,否则两个术语都不暗示对计算系统或计算设备的类型的任何限制。一般地,计算系统或计算设备可以是本地的或分布式的,并且可包括专用硬件和/或通用硬件与实现本文描述的功能的软件的任何组合。
为了演示起见,详细描述使用像“判定”和“使用”这样的术语来描述计算系统中的计算机操作。这些术语是对计算机执行的操作的高级别抽象,并且不应当与人类执行的动作混淆。与这些术语相对应的实际计算机操作依据实现方式而有所变化。
示例11—云计算环境
图19描绘了描述的技术可在其中实现的示例云计算环境1800。云计算环境1800包括云计算服务1810。云计算服务1810可包括各种类型的云计算资源,例如计算机服务器、数据存储仓库、联网资源,等等。云计算服务1810可位于中央(例如,由企业或组织的数据中心提供)或者是分布式的(例如,由位于不同位置的各种计算资源提供,例如不同的数据中心和/或位于不同的城市或国家)。
云计算服务1810被各种类型的计算设备(例如,客户端计算设备)所利用,例如计算设备1820、1822和1824。例如,计算设备(例如,1820、1822和1824)可以是计算机(例如,桌面型或膝上型计算机)、移动设备(例如,平板计算机或智能电话)或者其他类型的计算设备。例如,计算设备(例如,1820、1822和1824)可利用云计算服务1810来执行计算操作(例如,数据处理、数据存储等等)。
示例12—实现
虽然公开的一些方法的操作为了方便演示是按特定先后顺序描述的,但应当理解这种描述方式涵盖了重排列,除非由下文记载的具体语言要求特定的排序。例如,顺序描述的操作在一些情况中可被重排列或者被同时执行。另外,为了简单起见,附图可能没有示出公开的方法可结合其他方法使用的各种方式、
公开的任何方法可实现为存储在一个或多个计算机可读存储介质上并在计算设备(例如,任何可用的计算设备,包括智能电话或者其他包括计算硬件的移动设备)上执行的计算机可执行指令或者计算机程序产品。有形计算机可读存储介质是可在计算环境内访问的任何可用的有形介质(例如,一个或多个光介质盘,比如DVD或CD,易失性存储器组件(比如DRAM或SRAM),或者非易失性存储器组件(比如闪存或硬盘驱动器))。作为示例,参考图18,计算机可读存储介质包括存储器1720和1725,以及存储装置1740。术语计算机可读存储介质不包括信号和载波。此外,术语计算机可读存储介质不包括通信连接(例如,1770)。
用于实现公开的技术的任何计算机可执行指令以及在公开的实施例的实现期间创建和使用的任何数据可被存储在一个或多个计算机可读存储介质上。计算机可执行指令可以是例如专用软件应用或者经由基于web浏览器或其他软件应用(例如远程计算应用)访问或下载的软件应用的一部分。这种软件可例如在单个本地计算机(例如,任何适当的市售计算机)上执行或者利用一个或多个网络计算机在网络环境中(例如,经由互联网、广域网、局域网、客户端-服务器网络(比如云计算网络)或其他这种网络)执行。
为了清晰,只描述了基于软件的实现方式的某些选择的方面。省略了本领域公知的其他细节。例如,应当理解,公开的技术不限于任何具体的计算机语言或程序。例如,公开的技术可由以C++、Java、Perl、JavaScript、Adobe Flash或任何其他适当的编程语言编写的软件来实现。类似地,公开的技术不限于任何特定的计算机或者任何特定类型的硬件。适当的计算机和硬件的某些细节是公知的并且不需要在本公开中详细记载。
此外,任何基于软件的实施例(包括例如用于使得计算机执行任何公开的方法的计算机可执行指令)可通过适当的通信手段来上传、下载或远程访问。这种适当的通信手段包括例如互联网、万维网、内联网、软件应用、线缆(包括光缆)、磁通信、电磁通信(包括RF、微波和红外通信)、电子通信或者其他这种通信手段。
公开的方法、装置和系统不应当被解释为以任何方式作出限制。反而,本公开针对各种公开的实施例的所有新颖且非显而易见的特征和方面,无论是单独的还是与彼此发生各种组合和子组合。公开的方法、装置和系统不限于任何特定方面或特征或者其组合,并且公开的实施例也不要求任何一个或多个特定优点存在或者问题被解决。
来自任何示例的技术可与在任何一个或多个其他示例中描述的技术相结合。鉴于公开的技术的原理可应用到的许多可能实施例,应当认识到例示的实施例是公开的技术的示例并且不应当被理解为对公开的技术的范围的限制。更确切地说,公开的技术的范围包括由所附权利要求的范围和精神所覆盖的范围。
Claims (20)
1.一种方法,至少部分由包括处理单元和存储器的源节点实现,所述源节点与副本节点通信,所述源节点存储至少一个数据库表格并且所述副本节点存储所述至少一个数据库表格的拷贝,所述方法用于将所述至少一个数据库表格从所述源节点复制到所述副本节点,所述方法包括:
在所述源节点处在所述至少一个数据库表格上执行数据库操作;
将所述数据库操作异步发送到所述副本节点;
向所述副本节点发送同步准备提交请求;
接收来自所述副本节点的同步准备提交确认,其中所述准备提交确认指出所述数据库操作在所述副本节点处被执行了;并且
在所述源节点处提交与所述数据库操作相关联的事务。
2.如权利要求1所述的方法,其中,所述数据库操作包括DML语句。
3.如权利要求1所述的方法,还包括,在所述源节点处提交所述事务之后,向数据库客户端确认所述事务的提交。
4.如权利要求3所述的方法,还包括,在所述源节点处提交所述事务之后,
向所述副本节点发送提交通知;并且
接收来自所述副本节点的提交确认,所述提交确认指出所述事务被所述副本节点提交了。
5.如权利要求4所述的方法,其中,向所述数据库客户端确认所述事务的提交发生在接收到来自所述副本节点的提交确认之后。
6.如权利要求3所述的方法,还包括,在所述源节点处提交所述事务之后,向所述副本节点发送异步提交通知。
7.如权利要求1所述的方法,还包括,在所述源节点处提交所述事务之后,向数据库客户端确认所述事务的提交,而不等待接收来自所述副本节点的提交确认。
8.如权利要求1所述的方法,其中,所述事务包括读取所述数据库操作的结果的查询,所述方法还包括在提交所述事务之前在所述源节点处执行所述查询。
9.如权利要求1所述的方法,其中,所述事务包括读取所述数据库操作的结果的查询,所述方法还包括在提交所述事务之前:
从所述副本节点接收所述查询;并且
在所述源节点处执行所述查询。
10.一种计算机系统,包括副本节点,所述副本节点包括处理单元和实现数据库复制系统的一部分的存储器,所述副本节点与源节点通信,所述源节点存储至少一个数据库表格,所述副本节点存储所述至少一个数据库表格的拷贝,所述副本节点被配置为执行一种用于生成所述至少一个数据库表格的拷贝的方法,所述方法包括:
接收从所述源节点异步发送来的数据库操作;
在所述副本节点处在所述至少一个数据库表格的拷贝上执行所述数据库操作;
接收来自所述源节点的同步通知以准备提交包括所述数据库操作的事务;
在所述副本节点处预提交所述事务;并且
向所述源节点发送同步准备提交确认,所述准备提交确认指出所述事务被所述副本节点预提交了。
11.如权利要求10所述的计算机系统,还包括,作为所述预提交的一部分,在所述副本节点处将所述事务标记为存疑。
12.如权利要求10所述的计算机系统,其中,所述事务还包括查询,所述方法还包括:
接收所述查询;
检查所述查询是否读取所述数据库操作的结果;并且
在所述数据库操作已被所述副本节点执行之后执行所述查询。
13.如权利要求10所述的计算机系统,其中,所述事务还包括查询,所述方法还包括:
接收所述查询;
检查所述查询是否读取所述数据库操作的结果;并且
将所述查询转发到所述源节点。
14.如权利要求13所述的计算机系统,其中,所述转发是在所述数据库操作在阈值时间段内没有被所述副本节点执行的情况下被执行的。
15.如权利要求10所述的计算机系统,其中,作为所述预提交的一部分,所述事务被标记为存疑,所述方法还包括:
接收来自所述源节点的提交通知;并且
在所述副本节点处提交所述事务,其中所述事务被标记为已提交。
16.如权利要求15所述的计算机系统,还包括向所述源节点发送同步提交确认,所述提交确认指出所述事务被所述副本节点提交了。
17.如权利要求15所述的计算机系统,其中,所述提交通知被所述源节点异步发送。
18.一个或多个存储计算机可执行指令的有形计算机可读存储介质,所述计算机可执行指令用于使得由其编程的源节点执行一种方法,所述源节点包括处理单元和存储器并且存储至少一个数据库表格并与存储所述至少一个数据库表格的拷贝的副本节点通信,所述方法用于将所述至少一个数据库表格复制到所述副本节点,所述方法包括:
在所述源节点处在所述至少一个数据库表格上执行数据库操作;
将所述数据库操作发送到所述副本节点;
向所述副本节点发送同步准备提交请求;
接收来自所述副本节点的同步准备提交确认,所述准备提交确认指出与所述数据库操作相关联的事务被所述副本节点预提交了;
在所述源节点处提交所述事务,其中在所述源节点处提交所述事务可在不等待接收来自所述副本节点的同步准备提交确认的情况下开始;并且
在不等待接收来自所述副本节点的提交确认的情况下,向数据库客户端发送提交确认,从所述源节点发送的所述提交确认指出所述事务被所述源节点提交了。
19.如权利要求18所述的一个或多个有形计算机可读存储介质,所述方法还包括,在所述源节点处提交所述事务之后,向所述副本节点异步发送提交请求。
20.如权利要求18所述的一个或多个有形计算机可读存储介质,其中,所述事务是第一事务,所述方法还包括在所述源节点上执行访问所述第一事务的结果的第二事务,而不等待接收来自所述副本节点的对于所述第一事务的提交确认。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/975,365 US10795881B2 (en) | 2015-12-18 | 2015-12-18 | Table replication in a database environment |
US14/975,365 | 2015-12-18 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106991113A true CN106991113A (zh) | 2017-07-28 |
CN106991113B CN106991113B (zh) | 2021-12-28 |
Family
ID=57471645
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611128646.3A Active CN106991113B (zh) | 2015-12-18 | 2016-12-09 | 数据库环境中的表格复制 |
Country Status (3)
Country | Link |
---|---|
US (2) | US10795881B2 (zh) |
EP (1) | EP3182300B1 (zh) |
CN (1) | CN106991113B (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110110304A (zh) * | 2019-03-29 | 2019-08-09 | 东软集团股份有限公司 | 表单扩展方法、装置、存储介质及电子设备 |
CN110309122A (zh) * | 2018-03-28 | 2019-10-08 | 腾讯科技(深圳)有限公司 | 获取增量数据的方法、装置、服务器和存储介质 |
CN111797092A (zh) * | 2019-04-02 | 2020-10-20 | Sap欧洲公司 | 在数据库系统内提供次级索引的方法和系统 |
CN112835885A (zh) * | 2019-11-22 | 2021-05-25 | 北京金山云网络技术有限公司 | 一种分布式表格存储的处理方法、装置及系统 |
CN112966047A (zh) * | 2021-03-05 | 2021-06-15 | 浪潮云信息技术股份公司 | 一种基于分布式数据库的复制表功能实现方法 |
CN113168404A (zh) * | 2019-03-15 | 2021-07-23 | 华为技术有限公司 | 用于在分布式数据库系统中复制数据的系统和方法 |
WO2022017347A1 (zh) * | 2020-07-24 | 2022-01-27 | 阿里巴巴集团控股有限公司 | 分布式数据库系统及数据处理方法 |
CN115168367A (zh) * | 2022-09-07 | 2022-10-11 | 太极计算机股份有限公司 | 一种大数据的数据配置方法和系统 |
WO2023246236A1 (zh) * | 2022-06-24 | 2023-12-28 | 北京奥星贝斯科技有限公司 | 分布式数据库的节点配置方法、事务日志同步方法和节点 |
Families Citing this family (44)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11615115B2 (en) | 2010-12-23 | 2023-03-28 | Mongodb, Inc. | Systems and methods for managing distributed database deployments |
US11544288B2 (en) | 2010-12-23 | 2023-01-03 | Mongodb, Inc. | Systems and methods for managing distributed database deployments |
US10795881B2 (en) | 2015-12-18 | 2020-10-06 | Sap Se | Table replication in a database environment |
US10572510B2 (en) | 2015-12-21 | 2020-02-25 | Sap Se | Distributed database transaction protocol |
US10585876B2 (en) * | 2016-04-07 | 2020-03-10 | International Business Machines Corporation | Providing snapshot isolation to a database management system |
US10552413B2 (en) | 2016-05-09 | 2020-02-04 | Sap Se | Database workload capture and replay |
US10671496B2 (en) | 2016-05-31 | 2020-06-02 | Mongodb, Inc. | Method and apparatus for reading and writing committed data |
US10621050B2 (en) | 2016-06-27 | 2020-04-14 | Mongodb, Inc. | Method and apparatus for restoring data from snapshots |
US10298702B2 (en) | 2016-07-05 | 2019-05-21 | Sap Se | Parallelized replay of captured database workload |
US10365852B2 (en) * | 2016-07-29 | 2019-07-30 | Vmware, Inc. | Resumable replica resynchronization |
US9858151B1 (en) * | 2016-10-03 | 2018-01-02 | International Business Machines Corporation | Replaying processing of a restarted application |
US10671642B2 (en) * | 2016-11-11 | 2020-06-02 | International Business Machines Corporation | Copying data changes to a target database |
US10592528B2 (en) | 2017-02-27 | 2020-03-17 | Sap Se | Workload capture and replay for replicated database systems |
US10824644B2 (en) * | 2017-03-07 | 2020-11-03 | Mcafee, Llc | Aggregate, index based, synchronization of node contents |
US11573947B2 (en) | 2017-05-08 | 2023-02-07 | Sap Se | Adaptive query routing in a replicated database environment |
CN107368569B (zh) * | 2017-07-11 | 2020-08-11 | 人人行科技股份有限公司 | 数据差异对比方法和装置、存储介质以及处理器 |
CN109471902A (zh) * | 2017-09-08 | 2019-03-15 | 阿里巴巴集团控股有限公司 | 一种数据库切换方法、装置、设备及系统 |
WO2019089601A1 (en) | 2017-10-31 | 2019-05-09 | Ab Initio Technology Llc | Managing a computing cluster interface |
US10042879B1 (en) * | 2017-11-13 | 2018-08-07 | Lendingclub Corporation | Techniques for dynamically enriching and propagating a correlation context |
US10664465B2 (en) | 2018-04-03 | 2020-05-26 | Sap Se | Database change capture with transaction-consistent order |
US11327857B2 (en) * | 2018-04-04 | 2022-05-10 | Netapp Inc. | Faster replay of metadata and data operations using inode number based dependency graph |
US10698892B2 (en) | 2018-04-10 | 2020-06-30 | Sap Se | Order-independent multi-record hash generation and data filtering |
US11403319B2 (en) | 2018-06-01 | 2022-08-02 | Hewlett Packard Enterprise Development Lp | High-availability network device database synchronization |
US11599557B2 (en) * | 2018-06-12 | 2023-03-07 | Open Text Corporation | System and method for persistence and replication of changes to a data store |
US11093493B1 (en) * | 2018-09-28 | 2021-08-17 | Amazon Technologies, Inc. | Dynamically switching between query and scan for optimizing table reads |
CN109614440A (zh) * | 2018-10-25 | 2019-04-12 | 深圳壹账通智能科技有限公司 | 基于大数据的数据同步方法及相关设备 |
CN111382199A (zh) * | 2018-12-29 | 2020-07-07 | 中兴通讯股份有限公司 | 一种数据库同步复制的方法和装置 |
US11249983B2 (en) * | 2019-04-02 | 2022-02-15 | International Business Machines Corporation | Transaction change data forwarding |
US11200230B2 (en) | 2019-08-09 | 2021-12-14 | Couchbase, Inc. | Cost-based optimization for document-oriented database queries |
CN110659328B (zh) * | 2019-08-30 | 2022-04-29 | 中国人民财产保险股份有限公司 | 数据查询方法、装置、设备及计算机可读存储介质 |
US11288112B1 (en) | 2019-09-30 | 2022-03-29 | Amazon Technologies, Inc. | Enforcing data loss thresholds for performing updates to mirrored data sets |
US11144407B1 (en) * | 2019-09-30 | 2021-10-12 | Amazon Technologies, Inc. | Synchronous database geo-mirroring using delayed visibility write operations |
US11263236B2 (en) * | 2019-11-18 | 2022-03-01 | Sap Se | Real-time cross-system database replication for hybrid-cloud elastic scaling and high-performance data virtualization |
US11709752B2 (en) | 2020-04-02 | 2023-07-25 | Sap Se | Pause and resume in database system workload capture and replay |
US11615012B2 (en) | 2020-04-03 | 2023-03-28 | Sap Se | Preprocessing in database system workload capture and replay |
CN111666338B (zh) * | 2020-05-26 | 2023-08-15 | 中国工商银行股份有限公司 | 数据复制方法、控制节点及电子设备 |
WO2022029236A1 (en) * | 2020-08-06 | 2022-02-10 | Leanxcale, S.L. | System for conflict less concurrency control |
US11681687B2 (en) | 2020-08-31 | 2023-06-20 | Couchbase, Inc. | Executing transactions on distributed databases |
US11468032B2 (en) * | 2020-09-22 | 2022-10-11 | Snowflake Inc. | Concurrent transaction processing in a database system |
US11436212B2 (en) | 2020-09-22 | 2022-09-06 | Snowflake Inc. | Concurrent transaction processing in a database system |
US11182260B1 (en) * | 2021-03-02 | 2021-11-23 | International Business Machines Corporation | Avoiding recovery log archive access in database accelerator environments |
CN113792340B (zh) * | 2021-09-09 | 2023-09-05 | 烽火通信科技股份有限公司 | 一种用于数据库逻辑日志审计的方法及装置 |
WO2024081139A1 (en) * | 2022-10-12 | 2024-04-18 | Oracle International Corporation | Consensus protocol for asynchronous database transaction replication with fast, automatic failover, zero data loss, strong consistency, full sql support and horizontal scalability |
CN117453750B (zh) * | 2023-12-21 | 2024-03-15 | 平凯星辰(北京)科技有限公司 | 数据处理方法、装置、电子设备及存储介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020194015A1 (en) * | 2001-05-29 | 2002-12-19 | Incepto Ltd. | Distributed database clustering using asynchronous transactional replication |
CN101334748A (zh) * | 2007-06-27 | 2008-12-31 | 株式会社日立制作所 | 异步远程复制系统及其控制方法 |
CN101388759A (zh) * | 2007-09-10 | 2009-03-18 | 中兴通讯股份有限公司 | 实现数据的异步复制到同步复制的转换方法和系统 |
US20090313311A1 (en) * | 2008-06-12 | 2009-12-17 | Gravic, Inc. | Mixed mode synchronous and asynchronous replication system |
US20110225121A1 (en) * | 2010-03-11 | 2011-09-15 | Yahoo! Inc. | System for maintaining a distributed database using constraints |
US8903779B1 (en) * | 2013-03-06 | 2014-12-02 | Gravic, Inc. | Methods for returning a corrupted database to a known, correct state |
US20150149426A1 (en) * | 2013-11-22 | 2015-05-28 | Kyu Hwan Kim | Transaction commit operations with thread decoupling and grouping of i/o requests |
Family Cites Families (71)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5452445A (en) * | 1992-04-30 | 1995-09-19 | Oracle Corporation | Two-pass multi-version read consistency |
US6205449B1 (en) | 1998-03-20 | 2001-03-20 | Lucent Technologies, Inc. | System and method for providing hot spare redundancy and recovery for a very large database management system |
US7290056B1 (en) | 1999-09-09 | 2007-10-30 | Oracle International Corporation | Monitoring latency of a network to manage termination of distributed transactions |
US7177866B2 (en) | 2001-03-16 | 2007-02-13 | Gravic, Inc. | Asynchronous coordinated commit replication and dual write with replication transmission and locking of target database on updates only |
US6662196B2 (en) * | 2001-03-16 | 2003-12-09 | Iti, Inc. | Collision avoidance in bidirectional database replication |
US7334004B2 (en) * | 2001-06-01 | 2008-02-19 | Oracle International Corporation | Consistent read in a distributed database environment |
US7293028B2 (en) | 2001-06-08 | 2007-11-06 | Sap Ag | Cache-conscious concurrency control scheme for database systems |
US7305421B2 (en) | 2001-07-16 | 2007-12-04 | Sap Ag | Parallelized redo-only logging and recovery for highly available main memory database systems |
AU2002313583A1 (en) | 2001-08-01 | 2003-02-17 | Actona Technologies Ltd. | Virtual file-sharing network |
US6845384B2 (en) * | 2003-08-01 | 2005-01-18 | Oracle International Corporation | One-phase commit in a shared-nothing database system |
JP4704893B2 (ja) | 2005-11-15 | 2011-06-22 | 株式会社日立製作所 | 計算機システム及び管理計算機とストレージシステム並びにバックアップ管理方法 |
US8510404B2 (en) | 2006-04-03 | 2013-08-13 | Kinglite Holdings Inc. | Peer to peer Synchronization system and method |
KR20080063041A (ko) | 2006-12-29 | 2008-07-03 | 삼성전자주식회사 | 사용자 인터페이스 방법 및 장치 |
US7975138B2 (en) | 2007-07-18 | 2011-07-05 | Oracle International Corporation | Systems and methods for mutually authenticated transaction coordination messages over insecure connections |
JP5223457B2 (ja) * | 2008-05-22 | 2013-06-26 | 富士通株式会社 | 分散トランザクションの2相コミットプロトコルにおけるインダウト状態の解決方法 |
US8332354B1 (en) | 2008-12-15 | 2012-12-11 | American Megatrends, Inc. | Asynchronous replication by tracking recovery point objective |
US8356007B2 (en) | 2010-10-20 | 2013-01-15 | Microsoft Corporation | Distributed transaction management for database systems with multiversioning |
US8838919B2 (en) * | 2010-08-30 | 2014-09-16 | Oracle International Corporation | Controlling data lag in a replicated computer system |
US8385314B1 (en) | 2010-10-04 | 2013-02-26 | Sprint Spectrum L.P. | Method and system for modifying a data-synchronization interval based on number of terminals being served in the coverage area |
US9336262B2 (en) | 2010-10-05 | 2016-05-10 | Sap Se | Accelerated transactions with precommit-time early lock release |
US9009182B2 (en) | 2010-10-05 | 2015-04-14 | Sap Se | Distributed transaction management with tokens |
KR101843337B1 (ko) | 2010-10-28 | 2018-03-30 | 삼성전자주식회사 | 디스플레이 모듈 및 디스플레이 시스템 |
US9063969B2 (en) | 2010-12-28 | 2015-06-23 | Sap Se | Distributed transaction management using optimization of local transactions |
US8442962B2 (en) | 2010-12-28 | 2013-05-14 | Sap Ag | Distributed transaction management using two-phase commit optimization |
US9460176B2 (en) | 2010-12-29 | 2016-10-04 | Sap Se | In-memory database for multi-tenancy |
US9519555B2 (en) * | 2011-05-23 | 2016-12-13 | Microsoft Technology Licensing, Llc | Synchronous replication in a distributed storage environment |
US8868492B2 (en) * | 2011-06-15 | 2014-10-21 | Oracle International Corporation | Method for maximizing throughput and minimizing transactions response times on the primary system in the presence of a zero data loss standby replica |
US8713046B2 (en) | 2011-11-08 | 2014-04-29 | Sybase, Inc. | Snapshot isolation support for distributed query processing in a shared disk database cluster |
US8935205B2 (en) | 2011-11-16 | 2015-01-13 | Sap Ag | System and method of performing snapshot isolation in distributed databases |
US8671085B2 (en) | 2011-12-09 | 2014-03-11 | Microsoft Corporation | Consistent database recovery across constituent segments |
US8918436B2 (en) | 2011-12-22 | 2014-12-23 | Sap Ag | Hybrid database table stored as both row and column store |
US8782100B2 (en) | 2011-12-22 | 2014-07-15 | Sap Ag | Hybrid database table stored as both row and column store |
US8768927B2 (en) | 2011-12-22 | 2014-07-01 | Sap Ag | Hybrid database table stored as both row and column store |
US10073537B2 (en) | 2012-03-12 | 2018-09-11 | Samsung Electronics Co., Ltd. | User interface device and electronic apparatus having the same |
US20130275468A1 (en) | 2012-04-17 | 2013-10-17 | Juchang Lee | Client-side caching of database transaction token |
US9037677B2 (en) | 2012-04-17 | 2015-05-19 | Sap Se | Update protocol for client-side routing information |
US8700660B2 (en) | 2012-04-17 | 2014-04-15 | Sap Ag | Client-side statement routing for partitioned tables |
US8793276B2 (en) | 2012-04-17 | 2014-07-29 | Sap Ag | Client-side statement routing in distributed database |
US9465829B2 (en) | 2012-04-30 | 2016-10-11 | Sap Se | Partial merge |
US9165010B2 (en) | 2012-04-30 | 2015-10-20 | Sap Se | Logless atomic data movement |
US9171020B2 (en) | 2012-04-30 | 2015-10-27 | Sap Se | Deleting records in a multi-level storage architecture |
US10162766B2 (en) | 2012-04-30 | 2018-12-25 | Sap Se | Deleting records in a multi-level storage architecture without record locks |
US11010415B2 (en) | 2012-04-30 | 2021-05-18 | Sap Se | Fixed string dictionary |
US9465844B2 (en) | 2012-04-30 | 2016-10-11 | Sap Se | Unified table query processing |
US20140019643A1 (en) | 2012-07-12 | 2014-01-16 | Samsung Electronics Co., Ltd. | Smart scheduled sync method for sync applications |
US9571215B2 (en) | 2012-07-18 | 2017-02-14 | Intel Corporation | Measuring time offsets between devices with independent silicon clocks |
US9779220B1 (en) | 2012-09-28 | 2017-10-03 | EMC IP Holding Company LLC | Obscuring data using on-the-fly retokenizable tokens |
US9635093B2 (en) | 2012-11-28 | 2017-04-25 | Sap Ag | Slave side transaction ID buffering for efficient distributed transaction management |
US9805074B2 (en) | 2012-11-28 | 2017-10-31 | Sap Ag | Compressed representation of a transaction token |
US9098522B2 (en) | 2012-11-29 | 2015-08-04 | Sap Se | Version garbage collection using snapshot lists |
US9501502B2 (en) | 2012-11-30 | 2016-11-22 | Sap Ag | Locking protocol for partitioned and distributed tables |
US9760596B2 (en) | 2013-05-13 | 2017-09-12 | Amazon Technologies, Inc. | Transaction ordering |
US9317549B2 (en) | 2013-06-25 | 2016-04-19 | Optumsoft, Inc. | Constraint-based consistency with snapshot isolation |
US9720992B2 (en) | 2013-11-22 | 2017-08-01 | Sap Se | DML replication with logical log shipping |
US10444990B2 (en) | 2013-11-22 | 2019-10-15 | Sap Se | Fast restart of applications using shared memory |
US9720949B2 (en) | 2013-11-22 | 2017-08-01 | Sap Se | Client-side partition-aware batching of records for insert operations |
US9558229B2 (en) | 2013-11-26 | 2017-01-31 | Sap Se | Transaction private log buffering for high performance of transaction processing |
US10042910B2 (en) | 2014-02-24 | 2018-08-07 | Sap Se | Database table re-partitioning using two active partition specifications |
US10055440B2 (en) | 2014-02-24 | 2018-08-21 | Sap Se | Database table re-partitioning using trigger-based capture and replay |
US9483516B2 (en) | 2014-03-14 | 2016-11-01 | Sap Se | Multi-version concurrency control across row store and column store |
US9779127B2 (en) * | 2014-03-31 | 2017-10-03 | Wal-Mart Stores, Inc. | Integrating database management system and external cache |
CN105468659B (zh) | 2014-09-28 | 2019-01-04 | 阿里巴巴集团控股有限公司 | 一种数据同步方法及装置 |
US9830223B1 (en) * | 2015-01-26 | 2017-11-28 | Intel Corporation | Methods for repairing a corrupted database to a new, correct state |
US10085684B2 (en) | 2015-03-10 | 2018-10-02 | The University Of Chicago | State identification in data with a temporal dimension |
US10268743B2 (en) | 2015-06-19 | 2019-04-23 | Sap Se | Distributed database transaction protocol |
US9569473B1 (en) * | 2015-12-08 | 2017-02-14 | Gravic, Inc. | Method of controlling whether an uncompleted transaction applied against a database goes forward using either synchronous or asynchronous replication, or using either encrypted replication or unencrypted replication |
US10795881B2 (en) | 2015-12-18 | 2020-10-06 | Sap Se | Table replication in a database environment |
US10572510B2 (en) | 2015-12-21 | 2020-02-25 | Sap Se | Distributed database transaction protocol |
US10235440B2 (en) | 2015-12-21 | 2019-03-19 | Sap Se | Decentralized transaction commit protocol |
US10498625B1 (en) | 2016-10-14 | 2019-12-03 | Amazon Technologies, Inc. | Distributed testing service |
US10977227B2 (en) | 2017-06-06 | 2021-04-13 | Sap Se | Dynamic snapshot isolation protocol selection |
-
2015
- 2015-12-18 US US14/975,365 patent/US10795881B2/en active Active
-
2016
- 2016-12-01 EP EP16002568.0A patent/EP3182300B1/en active Active
- 2016-12-09 CN CN201611128646.3A patent/CN106991113B/zh active Active
-
2020
- 2020-08-27 US US17/005,085 patent/US11327958B2/en active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020194015A1 (en) * | 2001-05-29 | 2002-12-19 | Incepto Ltd. | Distributed database clustering using asynchronous transactional replication |
CN101334748A (zh) * | 2007-06-27 | 2008-12-31 | 株式会社日立制作所 | 异步远程复制系统及其控制方法 |
CN101388759A (zh) * | 2007-09-10 | 2009-03-18 | 中兴通讯股份有限公司 | 实现数据的异步复制到同步复制的转换方法和系统 |
US20090313311A1 (en) * | 2008-06-12 | 2009-12-17 | Gravic, Inc. | Mixed mode synchronous and asynchronous replication system |
US20110225121A1 (en) * | 2010-03-11 | 2011-09-15 | Yahoo! Inc. | System for maintaining a distributed database using constraints |
US8903779B1 (en) * | 2013-03-06 | 2014-12-02 | Gravic, Inc. | Methods for returning a corrupted database to a known, correct state |
US20150149426A1 (en) * | 2013-11-22 | 2015-05-28 | Kyu Hwan Kim | Transaction commit operations with thread decoupling and grouping of i/o requests |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110309122B (zh) * | 2018-03-28 | 2022-12-30 | 腾讯科技(深圳)有限公司 | 获取增量数据的方法、装置、服务器和存储介质 |
CN110309122A (zh) * | 2018-03-28 | 2019-10-08 | 腾讯科技(深圳)有限公司 | 获取增量数据的方法、装置、服务器和存储介质 |
CN113168404A (zh) * | 2019-03-15 | 2021-07-23 | 华为技术有限公司 | 用于在分布式数据库系统中复制数据的系统和方法 |
CN113168404B (zh) * | 2019-03-15 | 2022-07-22 | 华为云计算技术有限公司 | 用于在分布式数据库系统中复制数据的系统和方法 |
CN110110304B (zh) * | 2019-03-29 | 2023-10-27 | 东软集团股份有限公司 | 表单扩展方法、装置、存储介质及电子设备 |
CN110110304A (zh) * | 2019-03-29 | 2019-08-09 | 东软集团股份有限公司 | 表单扩展方法、装置、存储介质及电子设备 |
CN111797092A (zh) * | 2019-04-02 | 2020-10-20 | Sap欧洲公司 | 在数据库系统内提供次级索引的方法和系统 |
CN112835885A (zh) * | 2019-11-22 | 2021-05-25 | 北京金山云网络技术有限公司 | 一种分布式表格存储的处理方法、装置及系统 |
CN112835885B (zh) * | 2019-11-22 | 2023-09-01 | 北京金山云网络技术有限公司 | 一种分布式表格存储的处理方法、装置及系统 |
WO2022017347A1 (zh) * | 2020-07-24 | 2022-01-27 | 阿里巴巴集团控股有限公司 | 分布式数据库系统及数据处理方法 |
CN112966047B (zh) * | 2021-03-05 | 2023-01-13 | 上海沄熹科技有限公司 | 一种基于分布式数据库的复制表功能实现方法 |
CN112966047A (zh) * | 2021-03-05 | 2021-06-15 | 浪潮云信息技术股份公司 | 一种基于分布式数据库的复制表功能实现方法 |
WO2023246236A1 (zh) * | 2022-06-24 | 2023-12-28 | 北京奥星贝斯科技有限公司 | 分布式数据库的节点配置方法、事务日志同步方法和节点 |
CN115168367B (zh) * | 2022-09-07 | 2022-11-25 | 太极计算机股份有限公司 | 一种大数据的数据配置方法和系统 |
CN115168367A (zh) * | 2022-09-07 | 2022-10-11 | 太极计算机股份有限公司 | 一种大数据的数据配置方法和系统 |
Also Published As
Publication number | Publication date |
---|---|
US20170177658A1 (en) | 2017-06-22 |
US10795881B2 (en) | 2020-10-06 |
US20200394182A1 (en) | 2020-12-17 |
EP3182300B1 (en) | 2018-08-15 |
CN106991113B (zh) | 2021-12-28 |
EP3182300A1 (en) | 2017-06-21 |
US11327958B2 (en) | 2022-05-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106991113A (zh) | 数据库环境中的表格复制 | |
US11914572B2 (en) | Adaptive query routing in a replicated database environment | |
US10990610B2 (en) | Synchronization on reactivation of asynchronous table replication | |
CN102037463B (zh) | 使用全局确认的提交进行分布式事务的基于日志的复制 | |
US10248709B2 (en) | Promoted properties in relational structured data | |
EP3391249B1 (en) | Replication of structured data records among partitioned data storage spaces | |
CN112424762A (zh) | 在多部署数据库中转移连接 | |
EP3391244A1 (en) | Replication control among redundant data centers | |
JP4136615B2 (ja) | データベースシステム及びデータベースのアクセス方法 | |
CN108431808A (zh) | 对分区的数据存储空间当中的结构化数据记录的提醒处理 | |
US10936576B2 (en) | Replicating storage tables used to manage cloud-based resources to withstand storage account outage | |
CN109783578A (zh) | 数据读取方法、装置、电子设备以及存储介质 | |
CN112800060A (zh) | 数据处理方法、装置、计算机可读存储介质及电子设备 | |
JP2016161980A (ja) | データベースシステム、データベースサーバ、データベースサーバプログラム、データベースクライアント及びデータベースクライアントプログラム | |
Hu | Exploiting laziness for improving performance in data replication management | |
Jain | Dgraph: synchronously replicated, transactional and distributed graph database | |
Chairunnanda | Multi-Master Replication for Snapshot Isolation Databases | |
Jensen et al. | A Highly Available Grid Metadata Catalog | |
Choy | Efficient Transaction Processing for Short-Lived Transactions in the Cloud |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |