用于数据复制的依赖性感知的事务批处理的制作方法

文档序号:11851410阅读:230来源:国知局
用于数据复制的依赖性感知的事务批处理的制作方法与工艺

于2013年7月25日提交的申请号为13/951,281、标题为“Client and Server Integration for Replicating Data(用于复制数据的客户机和服务器集成)”的美国专利申请的全部内容出于所有目的通过引用而在此并入,如同在此完全阐述一样。

技术领域

本公开一般涉及数据管理,并且更具体地,涉及数据复制。



背景技术:

本部分描述的方法可以被实行,但不一定是以前已经被构思或实行的方法。因此,除非在此另外指示,否则在本部分所描述的方法对于本申请的权利要求来说不是现有技术并且不会因为被包含在本部分中而被承认是现有技术。

计算机系统可以被配置为存储和检索大量数据。通常,计算机系统依靠数据库系统来执行该功能。复制是将来自源数据库的数据复制到另一个数据库系统的过程,该另一个数据库系统在此被称为目标数据库。

复制的一种方法是物理复制方法。在物理复制方法中,对源数据库上的数据块做出的改变被做出到目标数据库上的那些数据块的复制品。复制数据的另一种方法是逻辑复制方法。在逻辑复制方法中,在源数据库上修改数据的数据库命令在目标数据库上被重新执行。尽管执行相同的数据库命令保证改变在记录级别上被复制,但是改变没有在数据块级别上被复制。

通常,使用事务处理对数据库系统做出改变。事务是改变数据的操作的集合。在数据库系统中,操作由一个或多个数据库命令指定。提交事务是指使得对于事务的改变是永久的。在事务处理中,原子地做出对于事务的所有改变。当事务被提交时,或者所有改变被提交,或者事务被回滚(roll back)。

可扩展性描述复制系统应对越来越多的数据的能力。提高可扩展性的一种进程包括复制客户机将单独的事务并行地应用到目标数据库(“单个事务并行性”)。单个事务并行性包括相当大的开销,诸如往返客户机服务器通信和语句解析。此外,当数据包括事务之间的许多依赖性时,由于直到事务依赖的所有事务被提交后该事务才能被执行,因此并行性被降低。

提高可扩展性的另一种进程包括将邻近的事务分组成批事务并且并行地应用批事务(“邻近批并行性”)。邻近批并行性通过在一个语句中批处理多个改变来帮助降低开销。然而,邻近批并行性增加依赖性以致并行性被进一步降低。

提高可扩展性的另一种进程包括使用某个划分标准来拆分事务(“划分的并行批处理”)。单独的事务使用诸如垂直划分(例如,基于表名)和/或水平划分(例如,基于表内的行范围)之类的技术被划分。不同事务的类似划分被分组成批事务,批事务被并行地应用。在划分的并行批处理中,划分方案必须被手动指定,并且必须被手动更新以适应模式改变和/或工作负载改变。另外,划分的并行批处理要求隐含的假设,即批彼此不冲突。此外,由于事务被拆分,因此划分的并行批处理损害事务的底层的原子性。

基于前述内容,开发允许用于数据复制的依赖性感知的事务批处理的方法是期望的。

附图说明

在附图中:

图1A-B是描绘了用于在目标数据库和源数据库之间复制数据的客户机和服务器集成的系统的实施例的框图;

图2是描绘了被配置为并行地生成和应用批事务的复制客户机的实施例的框图;

图3A-F示出了依赖性图的实施例;

图4A-D示出了依赖性图及其生成的实施例;

图5A-E示出了批事务及其生成的实施例;

图6是示出了用于复制的进程的实施例的流程图;

图7是示出了用于处理改变记录的进程的实施例的流程图;

图8是示出了用于分配批事务的进程的实施例的流程图;

图9示出了计算机系统,在该计算机系统上可以实现一个或多个实施例。

具体实施方式

描述了用于数据复制的依赖性感知的事务批处理。在下面的描述中,出于解释的目的,阐述了许多具体细节以便于提供对本发明的深入理解。然而,对于本领域技术人员将显而易见的是,可以在没有这些具体细节的情况下实践本发明。在其他实例中,众所周知的结构和设备以框图形式被示出以避免不必要地使本发明模糊。

总体概述

描述了用于数据复制的依赖性感知的事务批处理。复制客户机被配置为并行地在目标数据库上复制源数据库事务。复制客户机处理未决事务以生成依赖性图。依赖性图包括未决事务之间的事务间依赖性关系。如在此使用的,术语“事务间依赖性”是指一个事务对一个或多个其他事务的依赖性。依赖性图被用于生成批事务。每个批事务包括未决事务中的一个或多个未决事务。批事务由多个应用过程并行地应用到目标数据库。

依赖性图被用于将事务分组以使得依赖的事务被分组在一起并且由相同的应用过程应用。在一个实施例中,批事务中的事务除了依赖已经被提交的事务之外不依赖任何外部事务。这允许应用过程执行批事务而不用等待或以其他方式依靠与另一过程的通信。在一个实施例中,依赖性感知的事务批处理生成不具有对未提交的事务的外部依赖性的批事务,从而允许高的并行度。

在一个实施例中,生成批事务还基于事务相似度。相似度分数可以被用于评价一起执行两个或多于两个事务的效率。例如,相似度分数可以基于两个事务之间的共享的操作类型的数量。如在此所使用的,术语“操作类型”是指对特定数据库表的一个或多个列的特定集合执行的特定数据库操作。当事务共享共同的操作类型时,有可能使用数组操作来一起应用共同的操作类型的操作。如在此所使用的,术语“数组操作”是指使得数据库服务器执行相同类型的两个或多于两个操作的操作命令。

在批事务内,批事务中的操作可以被重新排序以在不违反任何批内依赖性的情况下利用数组操作。如在此所使用的,术语“批内依赖性”是指批事务中的任何操作对批事务中的一个或多个其他操作的依赖性。如果依赖于第二事务的事务在被分配到某一应用过程的批事务中与第二事务被分组在一起,则该应用过程可以通过将事务间依赖性当作批内依赖性来分解事务间依赖性。

复制

图1A-B是描绘了用于在目标数据库和源数据库之间复制数据的客户机和服务器集成的系统的实施例的框图。图1A是描绘了被配置为生成复制数据的系统的实施例的框图。源数据库服务器102被配置为维护源数据库。在一个实施例中,源数据库服务器102被配置为将对源数据库做出的数据库改变记入日志。

提取客户机104被配置为提取复制数据106。复制数据106包含足够的信息以确定在源数据库上执行的动作,该动作包括被操作影响的数据记录(多个数据记录)以及源事务被提交的顺序。在一个实施例中,提取客户机104处理对源数据库做出的记入日志的数据库改变以提取逻辑复制数据106。在一个实施例中,提取客户机104不能直接访问源数据库。可替代地,提取客户机104可以是源数据库服务器102的模块和/或可以与源数据库服务器102共享一个或多个计算资源。

复制数据106包含描述源数据库服务器102在源数据库上执行的操作和/或事务的改变记录。改变记录可以包括表示现有记录和新记录之间的差别的数据。例如,改变记录可以是包含关于对数据库的改变的信息的逻辑改变记录(LCR)。在一个实施例中,LCR被扁平化(flattened)或以其他方式被格式化以便于存储和/或传输。

在一个实施例中,复制数据106包括以提交的顺序在源数据库上执行的事务的所有改变记录。复制数据106可以可替代地包括在源数据库上执行的事务的子集。提取客户机104可以被配置为捕获在源数据库上执行的操作和/或事务。例如,提取客户机104可以生成包含数据库操作的日志、结构和/或文件。复制数据可以包括一个或多个文件或其他数据,它们可以出于复制的目的被特别地生成,或者可替代地作为审计或记录文件被生成。在一个实施例中,复制数据106驻留在源数据库外在源数据库服务器102上。可替代地和/或附加地,提取客户机104可以在网络上传输复制数据106。例如,提取客户机104可以将复制数据106写入到网络位置。可替代地和/或附加地,提取客户机104可以生成包含复制数据106的复制数据流。例如,提取客户机104可以为在线目标数据库服务器提取复制数据。

图1B是描绘了用于在目标数据库上执行复制的系统的实施例的框图。目标数据库服务器110被配置为维护目标数据库。复制客户机108和目标数据库服务器110被集成以便于在目标数据库上的复制。复制客户机108不能直接访问目标数据库。然而,复制客户机108可以是目标数据库服务器110的模块和/或可以与目标数据库服务器110共享一个或多个计算资源。

复制客户机108被配置为读取包含在复制数据106中的改变记录并且经由目标数据库服务器110将相应的改变应用到目标数据库。改变记录可以从包含数据库操作的文件中、从网络位置中或通过数据流来读取。在一个实施例中,改变记录包括以提交的顺序在源数据库上执行的所有事务。例如,复制客户机108可以读取来自网络位置的复制数据106。可替代地和/或附加地,复制客户机108可以接收来自包含复制数据106的复制数据流的改变记录。在一个实施例中,复制客户机108在将改变记录传输到目标数据库服务器110之前,不创建中间对象或以其他方式格式化改变记录。例如,复制客户机108可以直接从提取客户机104接收复制数据106。

复制客户机108可以经由诸如SQL接口之类的目标数据库服务器110的公共接口与目标数据库服务器110通信。可替代地和/或附加地,复制客户机108可以与目标数据库服务器110集成以绕过公共接口。

并行复制系统

图2是描绘了被配置为并行地生成和应用批事务的复制客户机的实施例的框图。复制客户机200被配置为在目标数据库上复制源数据库事务。

复制客户机200被配置为读取复制数据106。复制数据106包括在源数据库上执行的多个事务的多个改变记录。复制数据106可以是存储的复制数据,诸如日志文件、通过网络位置访问的远程文件和/或其他存储的复制数据。复制数据106还可以作为与源数据库服务器相关联的数据流由复制客户机200接收。在一个实施例中,复制数据106包括以提交的顺序在源数据库上执行的所有事务,并且每个事务以提交改变记录而终止以反映源数据库中事务的提交。

复制客户机200处理复制数据106以识别事务间依赖性并且生成事务间依赖性数据,诸如依赖性图。事务间依赖性数据或依赖性图被用于生成包括一个或多个单独的事务的批事务。下文以更多细节描述事务间依赖性数据和依赖性图。

用于识别依赖性的任何进程可以被使用。在用于识别依赖性的进程中常常存在精确度和资源消耗之间的折衷。在一个实施例中,复制客户机200通过基于复制数据106的改变记录计算散列(hash)值来计算事务间依赖性。散列值可以被使用以便于下游操作,诸如识别批内依赖性以用于对批事务中的操作重新排序。下文参照生成依赖性图(图4A-D)以及对批事务重新排序(图5A-E)以更多细节描述依赖性计算的示例。

复制客户机200还包括调度过程204。调度过程204被配置为生成一个或多个批事务。批事务基于依赖性图被生成。当依赖事务和它所依赖的事务被分组到相同的批事务中时,被分批的事务之间的依赖性被分解为一个或多个批内依赖性。批内依赖性由被分配了特定批事务的应用过程208-210处理。批内依赖性可以被处理而不用等待或以其他方式依靠另一应用过程208-210。

在一个实施例中,调度过程204被配置为生成包括至少一个未决事务的改变记录的至少一个批事务212-214。批事务212包括单个事务Ti。批事务214包括多个事务Tj、Tk和Tm。对于小的事务,批处理可以通过最小化往返通信、依赖性操作以及与提交单独事务有关的其他更新来帮助改善性能。批处理还可以通过实现跨多个事务的数组操作的执行来提高对事务重新排序的效率,这将在下文中以更多细节描述。数组操作通常比单独执行快并且降低开销,诸如重做或生成的其他日志数据。

调度过程204还被配置为将批事务212-214分配到一个或多个应用过程208-210。当应用过程208-210被分配了批事务212-214时,应用过程执行批事务。应用过程208-210可以对批中的一个或多个改变记录重新排序以生成和执行重新排序后的批事务。在一个实施例中,被生成以计算事务间依赖性的依赖性数据被保留以供应用过程208-210用来确定批内依赖性。例如,应用过程208-210可以使用批内依赖性以对批事务重新排序。

当应用过程208-210已处理完分配的批事务212-214时,应用过程208-210通知调度过程204处理已完成和/或应用过程208-210是空闲的可以执行新的批事务。在一个实施例中,在应用过程208-210执行批事务212-214后,批事务212-214中的单独事务/多个单独事务被提交。在这种情况下,直到整个批事务212-214的执行完成后,单独事务/多个单独事务的影响才会对其他应用过程208-210可见。在批事务212-214的执行完成后,事务间依赖性数据可以被更新以反映单独事务被提交。

依赖性图

事务间依赖性数据被用于执行依赖性感知的事务批处理。在一个实施例中,事务间依赖性数据包括依赖性图。依赖性图包括多个未决事务之间的至少一个事务间依赖性关系。每个事务间依赖性关系指示第一事务依赖于第二事务。如在此所使用的,术语“依赖性图”是指识别至少一个事务间依赖性关系的任何数据集合。尽管参照一个或多个依赖性图实施例示出了边和节点以说明所描述的系统和方法,但是以任何其他形式的、未决事务之间的任何事务间依赖性的存储在本公开的范围内。

在一个实施例中,依赖性图包括一个或多个节点,每个节点表示一个未决事务。指示第一事务依赖于第二事务的事务间依赖性关系被表示为从第一节点到第二节点的有向边,其中第一节点表示第一事务而第二节点表示第二事务。图3A示出依赖性图的实施例。依赖性图300包括未决事务T5-T13之间的事务间依赖性关系。

当第一事务直接地依赖于第二事务时,第一事务的一个或多个操作依赖于第二事务的一个或多个操作。事务T11直接地依赖于事务T8和事务T10。事务T9直接地依赖于事务T7。事务T8直接地依赖于事务T5和事务T6。

事务还可以间接地依赖于另一事务。在这种情况下,第一事务的操作不依赖于第二事务的特定操作。然而,第一事务可以直接地依赖于另一事务,另一事务直接地依赖于第二事务。在图3A示出的示例中,事务T11间接地依赖于事务T5和事务T6。

图3B示出了依赖性图300的可替代的视图。依赖性图300被重新排列以示出不依赖于任何外部未决事务的未决事务的子图。子图302包括未决事务T9和T7。子图304包括未决事务T11、T10、T8、T5和T6。子图306包括事务T12。子图308包括事务T13。子图302-308中的每个子图包含在不用等待外部的未决事务先被提交的情况下可以被应用的未决事务。

相似度数据

在一个实施例中,相似度数据也被用于执行依赖性感知的事务批处理。相似度分数可以为两个或多于两个事务生成。两个或多于两个事务之间的相似度分数可以基于由该两个或多个两个事务的改变记录共享的操作类型。当批事务中的事务包括共享共同的操作类型的改变记录时,数组操作可能使得批事务的执行更有效率。

在一个实施例中,成本函数被用于确定相似度分数。成本函数可以被用于比较分开执行两个或多于两个事务的估计成本和作为单个批事务执行这些事务的估计成本。下面的成本函数可以被用于确定执行事务T的估计的成本,其中:operation_types(T)是事务T中唯一的操作类型的数量;change_records(T)是事务T中改变记录的数量;以及K1和K2是常数:

Cost(T)=K1*operations_types(T)+K2*change_records(T)。

在一个实施例中,基于以下两个估计成本来确定是否将事务Ti和事务Tj合并到批事务中:

[1]作为分开的事务执行事务Ti和事务Tj的估计成本:Cost(Ti)+Cost(Tj);以及

[2]一起执行事务Ti和事务Tj的估计成本:

Cost(Ti+Tj)。

单独的事务的成本可以被存储以供以后使用。尽管描述了两个事务Ti+Tj的成对比较,但是成本函数Cost(∑T)可以被一般化以计算执行任何数量的事务的估计成本。

在一个实施例中,通过用执行批事务的成本节约([1]-[2])除以分开执行事务的成本([1])来计算相似度分数:

Similarity(Ti,Tj)=(Cost(Ti)+Cost(Tj)-Cost(Ti+Tj))÷(Cost(Ti)+Cost(Tj))。

在一个实施例中,为未决事务生成相似度数据。例如,相似度数据可以被表示为在表示未决事务的节点之间的无向边。图3C示出了相似度数据的实施例。图310包括事务间依赖性关系以及相似度数据。事务间依赖性关系被示为来自依赖事务的有向边,而相似度数据被示为事务对之间的无向边。

相似度数据可以被加权或不加权。当相似度数据被加权时,权重可以根据基于一个或多个成本函数计算出的相似度分数。相似度权重WT6,T9基于为事务T6和事务T9计算出的相似度分数。相似度权重WT9,T13基于为事务T9和事务T13计算出的相似度分数。

尽管示出了对于两对事务的相似度数据,但是可以对于每对未决事务计算相似度数据。例如,当新的未决事务被添加到依赖性图时,可以在新的未决事务和现有的未决事务之间计算相似度分数。可替代地,当确定要在批事务中包括的一个或多个事务时可以生成相似度分数。

当相似度数据不被加权时,相似度分数可以被用于确定两个事务是否应当被链接。例如,当一对未决事务之间的相似度分数超出阈值时相似度数据可以包括无向的、不加权的边。

当前正在执行的事务

如上文所描述的,事务间依赖性数据(例如,依赖性图)包括对于未决事务的事务间依赖性关系。未决事务还可以依赖于当前正在执行的事务和/或已完成的事务。当决定未决事务是否可以被调度时,由于已完成的事务已经在目标数据库中提交,因此不需要考虑对于已完成的事务的依赖性。然而,必须考虑对于当前正在执行的事务的依赖性。

为了生成在不用等待批事务外面的事务的情况下可以被执行的批事务,批事务中的事务不能直接地或间接地依赖于任何当前正在执行的事务,因为当前正在执行的事务不能被添加到分批的事务——它已经被分配到另一应用过程,并且因此不再是未决的。

直到当前正在执行的事务完成时,依赖于当前正在执行的事务的未决事务才应当被调度。在一个实施例中,从调度过程将事务分配到应用过程的时间开始到应用过程通知调度过程事务完成的时间结束,事务被认为是当前正在执行的。可替代地,从事务或者独自地或者在批事务中被分配到应用过程后的某一时间点开始和/或到应用过程通知批调度过程事务完成之前的某一时间点结束,事务可以被认为是当前正在执行的事务。

依赖性图包括关于当前正在执行的事务的依赖性的信息。例如,依赖性图可以直接地包括指定未决事务和当前正在执行的事务之间的依赖性关系的有向边。图3D示出了依赖性图的实施例。依赖性图320包括未决事务T5-T13以及当前正在执行的事务T2和T4。未决事务T6直接地依赖于当前正在执行的事务T2,而未决事务T13直接地依赖于当前正在执行的事务T4。依赖性图包括依赖性关系,如从T13到T4和从T6到T2的有向边所示。当前正在执行的事务T2和T4被标记以指示它们的当前正在执行的状态。

在一个实施例中,依赖性图包括用来标记直接地依赖于当前正在执行的事务的未决事务的信息。图3E示出了依赖性图的实施例。依赖性图330包括与依赖性图320中示出的相同的未决事务和依赖性。尽管当前正在执行的事务T2和T4没有包括在依赖性图330中,但是事务T6和T13被标记以指示它们直接地依赖于一个或多个当前正在执行的事务。

在一个实施例中,依赖性图包括用来标记直接地或间接地依赖于当前正在执行的事务的未决事务的信息。图3F示出了依赖性图的实施例。依赖性图340包括与依赖性图320和依赖性图330中示出的相同的未决事务和依赖性。尽管当前正在执行的事务T2和T4没有包括在依赖性图340中,但是事务T6、T8、T11和T13被标记以指示它们直接地或间接地依赖于一个或多个当前正在执行的事务。

在一个实施例中,图染色技术被用于追踪直接地和/或间接地依赖于当前正在执行的事务的未决事务。这样的事务不应当被添加到批事务,因为它们在被应用之前必须等待当前正在执行的事务完成。例如,通过为与直接地和/或间接地依赖于当前正在执行的事务的事务对应的数据依赖性图中的所有节点染色,对应于被染色的节点的事务可以从作为添加到批事务的备选事务的考虑中被立刻排除。

基于散列值检测依赖性

依赖性可以用任何方式被检测。在一个实施例中,散列函数被用于检测依赖性。散列值被用于确定第一事务中的任何操作是否依赖于第二事务中的操作,并且因此第一事务是否依赖于第二事务。散列值还可以被用于确定事务内依赖性,这将在下文中以更多细节描述。

基于被操作影响的一个或多个列的值以及相应的列/多个列的约束识别符(“CID”)来计算出散列值。换句话说,散列函数FN(value,CID)被应用到每个操作的一个或多个值和列。当列不影响依赖性计算时,CID将不分配到该列。当两个列以可能包含依赖性的方式相关时,这些列被赋予相同的约束识别符。

例如,在图5A中,表X 502包括列504-506、EMP_NO和ROOM_NO,其中EMP_NO是表X的主键。表Y 508包括列510-512、PARKING和EMP_NO,其中PARKING是表Y的主键,而EMP_NO是指向表X的外键。由于表Y中的每个条目因外键列512而潜在地依赖于表X中的条目,因此列512和列504被分配相同的约束识别符A。如果我们将行EMP_NO=“1”、ROOM_NO=“105”插入到表X,并且之后将行PARKING=“34”、EMP_NO=“1”插入到表Y,则第二操作依赖于第一操作。因为对于第一操作和第二操作计算出的散列值会包括FN(1,A),所以这会被检测到。

图5A-E中给出附加的操作示例。附加地,在2013年7月25日提交的申请号为13/951,281、标题为“Client and Server Integration for Replicating Data(用于复制数据的客户机和服务器集成)”的美国专利申请中以更多细节描述了检测依赖性的散列值的计算,在此出于所有目的通过引用并入该专利申请的全部内容,如同在此完全阐述一样。

生成事务间依赖性

提供了生成事务间依赖性的非限制性的示例。图4A-D示出了处理未决事务的改变记录的实施例。图4A示出了事务A-D的集合。事务A-D各自包括改变记录的集合。当每个改变记录被读取时,对改变记录执行操作以确定对应于该改变记录的数据库操作类型。例如,散列函数可以被应用于改变记录。在图4A中,对于每个事务的每个改变记录显示了示例的散列值。

当每个事务的改变记录被读取时,散列值被计算,并且事务的事务识别符基于该散列值被存储在散列表410中。图4B示出了处理事务A后的散列表410。当散列函数被应用于事务A的每个改变记录时,每个改变记录的散列值是[3]或[5]。在处理事务A的改变记录后,散列表410包括对于散列值[3]和[5]的事务A的识别符。如果在散列表410中存在散列表冲突,那么改变记录与在至少一列中的相同的值相关联,并且对应于当前改变记录的事务潜在地依赖于对于该特定的散列值的、已经在散列表中的一个或多个事务。

图4C示出了处理了图4A中示出的所有事务后的散列表420。因为对于事务D的一个或多个改变记录的散列值是[1],并且因为对于事务B的一个或多个改变记录的散列值是[1],并且因为事务B在事务D之前,所以事务D依赖于事务B。类似地,因为与事务D相关联的一个或多个散列值和与事务A相关联的一个或多个散列值[3]和[5]相同,并且因为事务A在事务D之前,所以事务D依赖于事务A。

图4D示出了对于事务A-D的依赖性图。依赖性图430包括表明事务D依赖于事务A和B的事务间依赖性关系。在一个实施例中,依赖性图430还包括对于事务A-D中的每对事务的相似度数据,其中事务A-D是未决事务。

生成批事务

基于诸如依赖性图信息之类的事务间依赖性数据通过增加一个或多个未决事务来生成批事务。可选择地,相似度数据还可以被用于选择未决事务。

在一个实施例中,批事务被生成以使得一个或多个批事务能够被执行而不用等待在批事务外部的事务。这降低了跨过程通信。在另一个实施例中,一个或多个批事务不严格地遵循忽略外部依赖性,诸如当跨过程通信成本较低时。用于建立批事务的规则和参数是灵活的。在一个实施例中,用于建立批事务的规则和参数可以被预先设定、手动修改、自动确定和/或动态确定。

在一个实施例中,通过首先选择要增加的一个或多个事务的初始集合来生成批事务。附加的事务可以基于依赖性关系和/或诸如相似度之类的其他因素被添加。在一个实施例中,当确定一个或多个事务的初始集合时,依赖于当前正在执行的事务的事务都不被考虑为备选事务。在一个实施例中,附加的事务通过评估备选事务被添加,该备选事务依赖于当前在批事务中的事务。没有依赖性关系的备选事务也可以被选择。

在一个实施例中,未决事务迭代地被添加到批事务;在第一事务或事务的第一集合被添加后,其他备选事务在它们与已经添加的事务的关系方面被评估。未决事务的迭代选择可以基于一个或多个贪婪函数,该一个或多个贪婪函数为备选事务评分并且添加下一个最佳事务和/或事务的组。可替代地和/或附加地,未决事务一起被评估并且未决事务的最优集合被选出。

在一个实施例中,未决事务基于依赖性图的边被选择以添加到批事务。例如,可以通过选择独立的未决事务来建立批事务,该独立的未决事务具有依赖于它的最长的记录链。可以通过寻找祖先直到到达依赖于多个事务的事务来遍历依赖性图。如果到达了依赖于多个事务的父事务,然而父事务所依赖的其他事务的子树可以被添加到该事务,那么整个子树可以作为备选事务被评估。在一个实施例中,如果子树不包含依赖于当前正在执行的事务的任何事务,那么子树中的事务作为备选事务被评估以作为组被添加或者作为组被忽略。

存在许多方法评估待添加到特定批事务的备选事务。这些考虑中的一些包括但不限于:

事务相似度;

图深度;

子树大小;

事务大小;

批大小;以及

事务年龄。

可以为一个或多个未决事务计算事务分数。事务分数可以被用于确定哪些未决事务应当被添加到批事务。例如,事务分数可以基于依赖性边(或任何其他事务间依赖性关系)和/或相似度边(或任何其他相似度数据)来计算。当新的未决事务被添加到依赖性图时,可以基于新的未决事务数据重新计算和/或修改一个或多个事务分数。类似地,在未决事务被分配到批事务后,当未决事务从依赖性图中被移除时,一个或多个事务分数可以被重新计算和/或修改。

在一个实施例中,对于依赖于一个或多个当前正在执行的事务的未决事务不计算事务分数。当该一个或多个当前正在执行的事务完成时,对于这样的未决事务可以计算事务分数。

对批事务重新排序

批事务包括来自一个或多个事务的数据库操作。批事务的数据库操作可以被重新排序以最优化数据库操作在目标数据库中的应用。例如,当执行重新排序后的事务时,重新排序可以被执行以最大化数组操作的使用。数组操作通过合并相同操作类型的操作来改善数据库性能。

当对批事务内的操作重新排序时,必须考虑批内依赖性。例如,批事务中的第一操作可能基于批事务内的第二操作。为了满足批内依赖性,第二操作必须在第一操作之前执行。

在重新排序中,改变记录的有序分组基于操作类型和批内依赖性被确定。除非基于批内依赖性的分割被确定,否则共享操作类型的改变记录被分组到一起。改变记录的组可以使用数组操作被执行。

因为当两个操作对相同的列操作时它们是相同的操作类型,所以列数据可以被散列。在一个实施例中,列被分配了用于生成依赖性数据的识别符。在一个实施例中,主键列被分配了散列后的约束识别符。

图5A-E示出了在重新排序的中间阶段中的批事务的实施例。尽管与关系数据库相关的结构被示出,但是重新排序的步骤可以被应用到任何数据库。图5A示出了关系数据库中的表的实施例。TABLE_X 502和TABLE_Y 508是关系数据库中的表。TABLE_X 502包括两列:X_PRIMARY 504和列“值(VALUE)”506。X_PRIMARY 504是对于TABLE_X 502的主键列。X_PRIMARY 504中的值唯一地识别TABLE_X 502的行。

TABLE_Y 508包括两列:Y_PRIMARY 510和X_FOREIGN 512。Y_PRIMARY 510是对于TABLE_Y 508的主键列。Y_PRIMARY 510中的值唯一地识别TABLE_Y 508的行。X_FOREIGN 512是外键列。X_FOREIGN 512中的值通过TABLE_X 502的X_PRIMARY 504中的主键值来识别TABLE_X 502的行。

约束识别符514-518被分配到关系数据库中的多个列。在一个实施例中,约束识别符514-518被分配到具有可以影响事务间和事务内依赖性的约束的列,诸如包含主键、外键和唯一索引的列。约束识别符514-518还可以包括一个或多个用户表达的约束和/或应用约束。约束识别符514-518可以基于数据库的模式或与数据库相关联的其他元数据被生成。

在一个实施例中,约束识别符被分配相同的值以反映依赖性。例如,列X_FOREIGN 512的约束识别符518被分配了与列X_PRIMARY 504的约束识别符514相同的值“A”。

依赖性数据对于与诸如插入(添加)、删除或者更新(或以其他方式修改)行(或数据)的操作之类的操作对应的一个或多个改变记录被生成。改变记录包含用于删除的列的旧值、用于插入的新值以及用于更新(或现有数据被修改的情况)的旧值和新值二者。对于更新,如果列没有被修改,那么改变记录可以包含旧值,但是不包含对于列的新值。对于约束中的列基于改变记录中的列值生成依赖性数据。对于更新,依赖性数据可以对于旧值和新值二者被生成(如果对于约束列在改变记录中没有旧值是可用的,那么对于该列的旧值可以被使用)。在一个实施例中,对于每个改变记录的依赖性数据包括至少一个散列值。通过用与列相关联的约束识别符514-518对诸如上文描述的值之类的列值进行散列来生成每个散列值。

图5B示出了一个或多个事务的批520的实施例。批520包括操作R1-R12。操作R1-R12可以来自被分组到批520中的单个事务或者多个事务。在重新排序过程期间,操作R1-R12可以以由数据库服务器接收的格式和/或存储对于操作R1-R12的等价信息的任何其他格式被存储为改变记录。改变记录和/或操作可以从一种格式被转换到另一种格式以便于数据库服务器操作。只要术语操作和改变记录是指相同的底层数据,这些术语可以可互换地被使用。

图5C示出基于至少一个值的改变以及与在操作R1-R12中的每个操作中的一个或多个列相关联的至少一个约束识别符生成的依赖性数据的实施例。基于与约束识别符相关联的至少一个列中的至少一个列值来为操作生成依赖性数据520。在一个实施例中,通过将函数FN应用到列中值的改变和与该列相关联的约束识别符来为操作R1-R12生成依赖性数据520。在一个实施例中,函数FN是散列函数,并且依赖性数据包括与一个或多个操作相关联的散列值。

例如,操作R5将行(2,1)插入到TABLE_Y中,其中值2被插入到列Y_PRIMARY 510中,而值1被插入到列X_FOREIGN中。对于操作R5的相应的依赖性数据520包括第一依赖性值FN(2,B)和第二依赖性值FN(1,A)。对于第一依赖性值,函数FN被应用到插入到列Y_PRIMARY 510中的值“2”以及与列Y_PRIMARY 510相关联的约束识别符值“B”。对于第二依赖性值,函数FN被应用到插入到列X_FOREIGN 512中的值“1”以及与列X_FOREIGN 512相关联的约束识别符值“A”。

在一个实施例中,依赖性数据520由数据库服务器在计算事务间依赖性时预先生成。预先生成的依赖性数据520被保留以用于为重新排序一个或多个事务的批以及批间事务计算事务内依赖性。例如,由应用读取器生成以计算事务间依赖性的数据可以被保留以供应用过程208-210使用。例如,在调度过程204之后和/或在调度过程204计算和/或使用事务间依赖性来确定至少一个批之后,应用过程208-210可以使用数据来计算事务内依赖性以对一个或多个事务的批内的改变记录重新排序。

图5D示出了操作的有序分组的实施例。操作R1-R12被分组到多个有序组524中。操作R1-R12基于每个改变记录的操作类型被分组。例如,操作可以通过匹配改变记录的至少一部分来被分组,其中改变记录的一部分指示操作类型。

在一个实施例中,操作类型包括被操作影响的列集合。例如,组3包括对包含X_VALUE 506的列集合执行的更新操作,而组5包括对包含X_PRIMARY 504的列集合执行的更新操作。被用于分组的特定操作类型可以包括对相同表的相同列集合的相同操作。

在一个实施例中,除非基于依赖性数据的分割被确定,否则共享操作类型的操作被分组到一起。在一个实施例中,当共享操作类型的一个或多个操作还共享依赖性数据值时,基于依赖性数据的分割被确定。在一个实施例中,当组内的操作共享至少一个散列值时,分割被确定。共享的依赖性数据值可以指示潜在的依赖性。

例如,操作R1、R2、R4、R6、R9和R10共享相同操作类型,即插入到表X 502中。因为基于依赖性数据522的分割被确定,所以这些操作被分成两组:组1和组5。例如,如依赖性数据522所示,操作R4和R9共享依赖性数据值FN(3,A)。

有序分组524的顺序可以至少部分地基于一个或多个事务的批中的原始操作顺序。在一个实施例中,依赖性数据还可以被用于确定组的顺序。例如,如依赖性数据522所示,操作R8与操作R9共享依赖性数据值FN(3,A),从而指示依赖性。为了解决该依赖性,操作R9被放置在组5中,组5是在包含R8的组4后出现的组。

共享的依赖性数据值可以指示潜在的依赖性。附加的处理可以确定潜在的依赖性是否与为了执行一个或多个事务的批而必须满足的事务内依赖性相关联。在一个实施例中,附加逻辑被用于确定在依赖性数据值被共享时分割是否是合适的。用于基于依赖性值的分割的一个或多个规则可以被实现以检测和处理事务内依赖性。

作为非限制性的示例,批520的操作R3、R5和R11共享依赖性数据值FN(1,A)FK,其中“FK”指示依赖性值基于与TABLE_X 502的主键列X_PRIMARY 504相关联的外键约束被生成。通过追踪具有信息“FK”的依赖性值的源,确定操作R3、R5和R11可以被放置在相同的组中而不违反任何事务内依赖性,因为到TABLE_Y 508中的插入操作不彼此依赖。

图5E示出了操作的重新排序后的批的实施例。重新排序后的批526包括来自批520的多个重新排序后的操作。操作基于有序分组524被排序。在一个实施例中,分组被配置为最大化组中的操作和/或改变记录的数量。当重新排序后的批526由数据库服务器执行时,数据库服务器可以对重新排序后的批526内的连续操作使用数组操作。尽管图5E示出了与有序分组524分开的重新排序后的批526,但是即使没有生成分开的事务结构,在由数据库服务器执行时有序分组524也可以被看作重新排序后的事务。

复制进程

图6是示出了用于复制的进程的实施例的流程图。过程600可以由一个或多个计算设备执行。例如,进程的一个或多个步骤可以由计算机系统900执行。在一个实施例中,进程由诸如复制客户机200之类的复制系统执行。

在框602中,多个改变记录被读取。多个改变记录对应于多个事务。在一个实施例中,多个改变记录从包括改变记录的复制数据源中读取,该改变记录对应于应用到目标数据库服务器的事务。复制数据源可以是从中可以读取复制数据的文件、网络位置、数据流或者任何其他源。

在框604中,事务间依赖性数据被生成。在一个实施例中,事务间依赖性数据是依赖性图。事务间依赖性数据包括多个未决事务之间的至少一个事务间依赖性关系。每个事务间依赖性关系指示第一事务依赖于第二事务。

在框606中,批事务基于事务间依赖性数据被生成。批事务包括多个未决事务中的至少一个未决事务。

在框608中,批事务被分配到应用过程。应用过程是被配置为并行地应用批事务的多个应用过程中的一个应用过程。在一个实施例中,批事务响应于来自空闲应用过程的关于其状态的通知而被生成并且被分配到该空闲应用过程。在一个实施例中,在批事务被分配到空闲应用过程后,事务间依赖性数据被更新以指示批事务中的事务当前正在执行和/或不再是未决的。

处理改变记录

图7是示出了用于处理改变记录的进程的实施例的流程图。过程700可以由一个或多个计算设备执行。例如,进程的一个或多个步骤可以由计算机系统900执行。在一个实施例中,进程由诸如复制客户机200的调度过程204之类的复制系统的调度过程执行。

在框702中,从多个改变记录中读取下一个改变记录。在一个实施例中,下一个改变记录是从包括被应用到目标数据库服务器的事务的复制数据源中读取的。

在框704中,为当前的改变记录生成改变记录依赖性数据。在一个实施例中,诸如通过图4A-4D中示出的进程之类地通过将散列函数应用到当前的改变记录来生成改变记录依赖性数据。

在判定框706中,确定了改变记录是否为事务的提交记录。如果确定了改变记录不是提交记录,则处理返回到框702。否则,如果确定了改变记录是提交记录,则处理继续到框708。

在框708中,对应于最后的提交记录的事务被添加到事务间依赖性数据。例如,当事务依赖于一个或多个其他未决事务时,一个或多个事务间依赖性关系被添加以指示这些依赖性。当事务间依赖性数据是依赖性图时,通过添加对应于事务的节点将事务添加到依赖性图。如果事务依赖于任何其他未决事务,则从该事务到其他未决事务的一个或多个有向依赖性边被添加。在一个实施例中,新近提交的事务和其他未决事务之间的相似度数据也被生成。

分配事务

图8是示出了用于分配批事务的进程的实施例的流程图。过程800可以由一个或多个计算设备执行。例如,进程的一个或多个步骤可以由计算机系统900执行。在一个实施例中,进程由诸如复制客户机200的调度过程204之类的复制系统的调度过程执行。

在框802中,接收到应用过程空闲的通知。空闲的应用过程是被配置为并行地应用批事务的多个应用过程中的一个应用过程。在一个实施例中,通知还充当空闲的应用过程执行完分配到它的在先批事务的指示。响应于这样的通知,事务间依赖性数据(例如,依赖性图)被更新以指示在先批事务的事务已完成。可替代地,对应于完成在先批事务的分开的通知可以被接收,并且依赖性图可以基于该分开的通知被更新。

在框804中,批事务响应于接收到应用过程空闲的通知而被生成。通知指示应用过程准备好处理新的批事务和/或请求新的批事务来处理。可替代地,在接收到来自任何空闲的应用过程的任何通知之前,一个或多个批事务可以被生成。

在框806中,批事务被分配到空闲的应用过程。

在框808中,事务间依赖性数据(例如,依赖性图)被更新以指示批事务中的事务当前正在执行和/或不再是未决的。

复制系统配置

本文描述的用于依赖性感知的事务批处理的技术适用于在客户机侧复制和服务器侧复制二者中部署。客户机侧复制是指传统的复制客户机。服务器侧复制是指复制客户机的一个或多个元件(包括但不限于复制客户机200中示出的元件)与目标数据库服务器集成的情况下的复制。例如,服务器侧复制可以包括与目标数据库服务器集成的复制客户机以绕过用于一个或多个操作的诸如SQL命令接口之类的公共接口。

对于客户机侧复制,通过对事务进行批处理以使得每个事务不依赖于任何未提交的事务,同步应用过程以考虑事务间依赖性的需求被消除。此外,对于通过同步连接与目标数据库服务器交互的复制客户机来说,往返时间由于依赖性感知的事务批处理提高的效率而降低。

在一个实施例中,用于依赖性感知的事务批处理的技术的步骤的至少一部分可以在服务器侧执行。在2013年7月25日提交的申请号为13/951,281、标题为“Client and Server Integration for Replicating Data(用于复制数据的客户机和服务器集成)”的美国专利申请中描述了服务器侧复制的一个示例,在此出于所有目的通过引用并入该专利申请的全部内容,如同在此完全阐述一样。

依赖性感知的事务批处理具有提供比先前的解决方案更高级别的并发性的潜力。减少的同步通信还使得解决方案可部署在诸如Oracle Real Application Clusters(Oracle真正应用集群)(RAC)之类的共享盘数据库系统上。共享盘数据库包括被配置为访问单个数据库的多个数据库实例。

在一个实施例中,不同的应用过程与共享盘数据库的不同数据库实例相关联。当依赖性感知的事务批处理技术在共享盘数据库上部署时,可扩展性被提高,从而允许高吞吐量复制。本文提供的作为应用到多个实例数据库配置的技术不限于Oracle RAC,并且可以应用到任何专用的和/或标准化的共享盘数据库架构。

解决方案也可部署在诸如容器数据库管理系统之类的综合数据库系统上。在容器数据库管理系统中,容器数据库管理多个可插入数据库。每个可插入数据库可以独立于其他可插入数据库在容器数据库中打开或关闭。容器数据库管理系统可以被实现为共享盘数据库。

数据库概述

本文描述的实施例可以在数据库管理系统(DBMS)的背景中被使用。DBMS管理数据库。DBMS可以包括一个或多个数据库服务器。数据库包括在诸如一组硬盘之类的永久性存储机构上存储的数据库数据和数据库字典。数据库数据可以被存储在一个或多个数据容器中,每个数据容器包含一个或多个记录。每个记录内的数据被组织到一个或多个域中。在关系DBMS中,数据容器被称为表,记录被称为行,字段被称为列。在面向对象的数据库中,数据容器被称为对象类,记录被称为对象,在本文还被称为对象记录,并且字段被称为属性。其他数据库架构可以使用其他术语。

数据库用户通过向数据库服务器提交命令来与DBMS的数据库服务器交互,该命令使得数据库服务器对数据库中存储的数据执行操作。用户可以是在与数据库服务器交互的客户机上运行的一个或多个应用。数据库命令可以是以遵循数据库语言的语法的数据库语句的形式。用于表达数据库命令的一种示例语言是结构化查询语言(SQL)。SQL数据定义语言(“DDL”)指示被发送到DBMS以定义数据库结构,诸如表、视图或复杂数据类型。SQL数据操纵语言(“DML”)指令被发送到DBMS以管理在数据库结构内存储的数据。

尽管上文描述的示例是基于Oracle的SQL,但是本文提供的技术不限于Oracle的SQL、SQL的任何专用形式、SQL的任何标准化的版本或形式(ANSI标准)或者数据库命令或数据库语言的任何特定形式。此外,出于简化本文所包含的解释的目的,数据库命令或计算机指令的其他形式可以被描述为执行动作,诸如创建表、修改数据以及设置会话参数。然而,应当理解的是数据库命令本身不执行动作,而是DBMS在执行数据库命令时执行相应的动作。

硬件概述

图9是示出了计算机系统900的框图,本发明的实施例可以在计算机系统900上实现。计算机系统900包括用于传送信息的总线902或其他通信机构,以及用于处理信息的、与总线902耦接的处理器904。计算机系统900还包括用于存储由处理器904执行的信息和指令的、耦接到总线902的主存储器906,诸如随机访问存储器(RAM)或其他动态存储设备。主存储器906还可以被用于在由处理器904执行的指令的执行期间存储临时变量或其他中间信息。计算机系统900还包括用于为处理器904存储静态信息和指令的、耦接到总线902的只读存储器(ROM)908或其他静态存储设备。诸如磁盘或光盘之类的存储设备910被提供并且被耦接到总线902以用于存储信息和指令。

计算机系统900可以经由总线902被耦接到诸如阴极射线管(CRT)之类的显示器912以用于向计算机用户显示信息。包括字母数字和其他键的输入设备914被耦接到总线902以用于向处理器904传送信息和命令选择。另一种类型的用户输入设备是用于向处理器904传送方向信息和命令选择以及用于控制显示器912上的光标移动的光标控制器916,诸如鼠标、跟踪球或光标方向键。该输入设备通常具有允许设备在平面上指定位置的在两个轴——第一轴(例如,x)和第二轴(例如,y)上的两个自由度。

为了实现本文描述的技术,本发明涉及计算机系统900的使用。根据本发明的一个实施例,响应于处理器904执行包含在主存储器906中的一个或多个指令的一个或多个序列,这些技术由计算机系统900执行。这些指令可以从诸如存储设备910之类的另一个机器可读介质被读取到主存储器906中。包含在主存储器906中的指令的序列的执行使得处理器904执行本文所描述的过程步骤。在可替代的实施例中,硬连线电路可以替代软件指令或与软件指令结合使用以实现本发明。因此,本发明的实施例不限于硬件电路和软件的任何特定的结合。

如在此所使用的术语“机器可读介质”是指参与提供数据的任何介质,该数据使得机器以特定的方式操作。在使用计算机系统900实现的实施例中,例如在向处理器904提供指令以用于执行中涉及各种机器可读媒介。这样的介质可以采取许多形式,包括但不限于存储媒介和传输媒介。存储媒介包括非易失性媒介和易失性媒介。非易失性媒介包括例如光盘或磁盘,诸如存储设备910。易失性媒介包括动态存储器,诸如主存储器906。传输媒介包括同轴线缆、铜线和光纤,这些传输媒介包含包括总线902的线。传输媒介还可以采取声波或光波的形式,诸如在无线电波和红外数据通信期间生成的那些声波或光波。所有这些媒介必须是有形的,以使得由媒介承载的指令能够被将指令读取到机器中的物理机制检测。

常见形式的机器可读媒介包括例如软盘、柔性盘、硬盘、磁带或任何其他磁介质、CD-ROM、任何其他光介质、穿孔卡片、纸带、具有孔的图案的任何其他物理介质、RAM、PROM和EPROM、FLASH-EPROM、任何其他存储器芯片或记忆卡、如在下文中所描述的载波、或者计算机可以从中读取的任何其他介质。

将一个或多个指令的一个或多个序列承载到处理器904以用于执行可以涉及各种形式的机器可读媒介。例如,指令可以初始地被承载在远程计算机的磁盘上。远程计算机可以将指令加载到它的动态存储器并且使用调制解调器通过电话线发送指令。计算机系统900的本地的调制解调器可以接收电话线上的数据并且使用红外传输器将数据转换成红外信号。红外检测器可以接收红外信号中承载的数据而合适的电路可以将数据放置在总线902上。总线902将数据承载到主存储器906,处理器904从主存储器906检索(retrieve)指令并且执行指令。由主存储器906接收的指令可以可选择地或者在处理器904执行之前或者在处理器904执行之后被存储在存储设备910上。

计算机系统900还包括耦接到总线902的通信接口918。通信接口918提供耦接到网络链路920的双向数据通信,网络链路920被连接到本地网络922。例如,通信接口918可以是综合业务数字网(ISDN)卡或者调制解调器以提供到相应类型的电话线的数据通信连接。作为另一示例,通信接口918可以是局域网(LAN)卡以提供到兼容的LAN的数据通信连接。无线链路也可以被实现。在任何这样的实施方式中,通信接口918发送和接收承载表示各种类型的信息的数字数据流的电信号、电磁信号或光信号。

网络链路920通常通过一个或多个网络提供到其他数据设备的数据通信。例如,网络链路920可以通过本地网络922提供到主机计算机924或到由网络服务提供商(ISP)926操作的数据装置的连接。ISP926又通过现在通常被称为“因特网”928的全球分组数据通信网提供数据通信服务。本地网络922和因特网928都使用承载数字数据流的电信号、电磁信号或光信号。通过各种网络的信号和在网络链接920上并通过通信接口918的信号是传输信息的载波的示例性形式,所述信号承载到计算机系统900的数字数据以及来自计算机系统900的数字数据。

计算机系统900可以通过网络(多个网络)、网络链路920和通信接口918来发送消息和接收包括进程代码的数据。在因特网示例中,服务器930可以通过因特网928、ISP 926、本地网络922和通信接口918来传送用于应用程序的请求的代码。

接收的代码可以在处理器904接收时由其执行和/或存储在存储设备910或者其他非易失性存储中以用于以后执行。以这种方式,计算机系统900可以以载波的形式获取应用代码。

扩展和替代物

在上述说明书中,参考可以根据实施方式而不同的许多具体细节描述了本发明的实施例。因此,本发明是什么以及申请人意图将什么作为本发明的唯一且排他的指示物是以权利要求发布的具体形式从本申请中发布的一组权利要求,包括任何后续补正。用于包含在权利要求中的术语的本文明确阐述的任何定义应当决定在权利要求中使用的这些术语的含义。因此,在权利要求中没有明确表述的限制、元件、性质、特征、优势或属性都不应当以任何方式限制这些权利要求的范围。因此,说明书和附图应被视为是说明意义上的而不是限制意义上的。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1