数据复制中的分区计算和变化传播的结构转让专利

申请号 : CN200410032452.4

文献号 : CN1551555B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : R·P·辛格C·纳拉牙南

申请人 : 微软公司

摘要 :

本发明涉及数据复制中分区计算和变化传播的结构,提供了在使用数据复制品的数据源/数据目标环境中同步的方便。当多个目标请求与源同步时,处理选择同步的第一目标使得第一目标数据和源数据之间的差异被确定并被保持在分区更新中。在更新第一目标之后,同步进程仅对由保持的数据所确定并由保持的数据所更新的将受分区变化影响的剩余目标继续。

权利要求 :

1.一种在使用复制品的客户/服务器环境中便于同步的系统,其特征在于,所述系统包括:接收器组件,它从第一复制品接收与数据中的分区更新相关的信息,其中所述分区表示数据的子集,所有接收同一数据子集的复制品被认为是处于同一分区中并分配相同的分区标识符;

确定组件,它传播分区更新并且在其它客户同步之前确定哪个其它客户将受分区变化影响;以及更新组件,当由客户同步时,用包括生成标识符的生成表映射包括生成标识符的生成分区表,以追踪哪一生成已传播至当前复制品以及哪一生成代表本地变化,把确定为受分区变化影响的每一个客户用生成加以更新,以方便跨多个客户的分区一致性。

2.如权利要求1所述的系统,其特征在于,所述与分区更新相关的信息以复制元数据的形式接收。

3.如权利要求2所述的系统,其特征在于,所述复制元数据包括多个表,它们代表复制元数据、生成元数据、分区元数据、生成分区元数据、当前变化元数据以及过去变化元数据的数据中至少一种数据。

4.如权利要求1所述的系统,其特征在于,将所述客户的分区和第一复制品对齐使得正在更新的行被更新。

5.如权利要求1所述的系统,其特征在于,将所述客户的分区和第一复制品对齐使得正在更新的行被更新,并且使用过滤器来扩充以从联接的表中获取相关的行。

6.如权利要求5所述的系统,其特征在于,所述行使用过滤器来扩充,该过滤器为联合过滤器,该扩充计算依照基于集的查询。

7.如权利要求5所述的系统,其特征在于,所述过滤器是动态行过滤器。

8.如权利要求1所述的系统,其特征在于,所述分区更新包含元数据的目标复制品,该元数据是为其它受分区变化影响的客户的同步所保持的成员资格信息。

9.如权利要求8所述的系统,其特征在于,所述保持的成员资格信息包括变化行的行标识符和其它客户的各自复制品的分区身份之间的映射。

10.如权利要求8所述的系统,其特征在于,所述保持的成员资格信息包括行删除和行更新中至少一种,需要有关过去成员资格的行信息。

11.如权利要求1所述的系统,其特征在于,所述分区更新依照同步标记来传播,使得只有在过去同步中未更新的其它客户得到更新。

12.如权利要求1所述的系统,其特征在于,所述分区更新使用变化跟踪逻辑跟踪,当第一复制品的行为被更新、插入和删除行中至少一种时,该跟踪逻辑处理分区中的变化。

13.如权利要求1所述的系统,其特征在于,所述系统还包括一种变化枚举机制,枚举与其它客户同步中其它客户中的分区更新中的变化,处理自从最后一次同步以来其它客户中出现的变化。

14.如权利要求13所述的系统,其特征在于,通过选择同步标记比会话的协商同步标记更新的行来枚举删除和分区更新。

15.如权利要求14所述的系统,其特征在于,从反映该行的过去的变化的元数据中选择所述的行。

16.如权利要求13所述的系统,其特征在于,通过选择同步标记比会话的协商同步标记更新的行来枚举插入和分区更新。

17.如权利要求16所述的系统,其特征在于,从反映该行的当前变化的元数据选择所述的行。

18.如权利要求1所述的系统,其特征在于,所述系统还包括把同步标记分配给来自第一复制品传播的变化,该同步标记为生成标识符的形式。

19.一种基于服务器的系统,其特征在于,所述系统包含权利要求1所述的系统。

20.一种网络,其特征在于,所述网络包含权利要求1所述的系统。

21.一种在使用复制品的客户/服务器环境中便于同步的方法,其特征在于,所述方法包括:从第一复制品接收与数据中的分区更新相关的信息,其中所述分区表示数据的子集;

给被认为是处于同一分区中的接收同一数据子集的复制品分配相同的分区标识符;

传播该分区更新,并在由其它客户同步之前确定哪个其它客户将受分区变化影响;

在由客户同步时,用包括生成标识符的生成表映射包括生成标识符的生成分区表,以追踪哪一生成已传播至当前复制品以及哪一生成代表本地变化,并用生成来更新确定为受分区变化影响的客户,以方便跨多个客户的分区一致性。

22.如权利要求21所述的方法,其特征在于,所述与分区更新相关的信息以复制元数据的形式接收。

23.如权利要求22所述的方法,其特征在于,所述复制元数据包括多个表,它们代表复制元数据、生成元数据、分区元数据、生成分区元数据、当前变化元数据以及过去变化元数据中至少一种数据。

24.如权利要求21所述的方法,其特征在于,所述方法还包括将客户的分区和第一复制品对齐的步骤,使得正在更新的行被更新。

25.如权利要求21所述的方法,其特征在于,所述方法还包括将客户的分区和第一复制品对齐的步骤,使得正在更新的行被更新,并且使用过滤器来扩充以从联接表中获得相关行。

26.如权利要求25所述的方法,其特征在于,所述行使用过滤器来扩充,该过滤器为联合过滤器,该扩充计算依照基于集的查询。

27.如权利要求25所述的方法,其特征在于,所述过滤器是动态行过滤器。

28.如权利要求21所述的方法,其特征在于,所述分区更新包括元数据的局部复制品,该元数据是为与受分区变化影响的其它客户同步所保持的成员资格信息。

29.如权利要求28所述的方法,其特征在于,所述保持的成员资格信息包括变化行的行标识符和其它客户各自复制品的分区身份之间的映射。

30.如权利要求28所述的方法,其特征在于,所述保持的成员资格信息包括行删除和行更新中至少一种,需要有关过去成员资格的行信息。

31.如权利要求21所述的方法,其特征在于,所述分区更新依照同步标志值来传播,使得仅在最后一次同步时未被更新的其它客户得以更新。

32.如权利要求21所述的方法,其特征在于,所述分区更新采用跟踪逻辑来跟踪,当第一复制品的行是被更新、插入、和删除行中至少一种时,该跟踪逻辑处理分区中的变化。

33.如权利要求21所述的方法,其特征在于,所述方法包括采用变化枚举机制枚举与其它客户同步时其它客户中的变化的步骤,该变化枚举机制处理自从最后一次同步以来其它客户中出现的变化。

34.如权利要求33所述的方法,其特征在于,通过选择其同步标志比会话的协调同步标志更新的行来枚举删除和分区更新。

35.如权利要求34所述的方法,其特征在于,从反映该行的过去变化的元数据中选择所述行。

36.如权利要求33所述的方法,其特征在于,通过选择其同步标志比会话的协商同步标志更新的行来枚举插入和分区更新。

37.如权利要求36所述的方法,其特征在于,从反映该行的当前变化的元数据中选择所述行。

38.如权利要求21所述的方法,其特征在于,所述方法还包括把同步标记分配给来自第一复制品传播的变化的步骤,该同步标记为生成标识符的形式。

39.如权利要求21所述的方法,其特征在于,所接收的信息是复制元数据的形式,该元数据是为与其它客户同步所保持的成员资格信息。

40.一种使用复制品便于数据收集的同步的系统,其特征在于,所述系统包括:一种用于从第一复制品接收与数据中的分区更新相关的信息的接收器组件,其中所述分区表示数据的子集,所有接收同一数据子集的复制品被认为是处于同一分区中并分配相同的分区标识符;

一种确定组件,用于传播该分区更新并且在其它目标数据收集同步之前确定哪个其它目标数据收集将受分区变化影响;以及一种更新组件,在由目标数据收集同步时,用包括生成标识符的生成表映射包括生成标识符的生成分区表,以追踪哪一生成已传播至当前复制品以及哪一生成代表本地变化,把确定为受分区变化影响的每一个目标数据收集用生成加以更新,以方便跨多个目标数据收集的分区一致性。

41.如权利要求40所述的系统,其特征在于,与分区更新相关的信息以复制元数据的形式接收。

说明书 :

数据复制中的分区计算和变化传播的结构

技术领域

[0001] 本发明牵涉网络数据结构,尤其是跨全异系统更新这类基于网络的数据。
[0002] 发明背景
[0003] 全球通信网络如因特网的出现方便了信息通过公司以全异数据库的形式的广泛分发,全异数据库通常被不同地理位置的单独公司实体或分支办公室所使用。将这类不同种类的数据源合并入同类数据库迄今为止造成了重大的系统密集进程,导致许多系统进程的重复。
[0004] 全异数据库可以通过复制的方法来收敛——复制是一个进程,将数据和数据库对象从一个数据库复制并分发到另一个数据库中,然后在数据库之间同步信息以保持一致性。
[0005] 合并复制是一种困难的复制类型。合并复制能力使得未连接和移动用户可以脱机运行应用程序,然后周期性地重新连接来与主数据库同步。当连接或未连接时可能对源(也称为发行者)和目标(也称为用户)上的复制的数据作出自治的改变,然后当站点被连接时合并站点之间的更新。采用合并复制,服务器捕捉源数据库和目标数据库中递增数据变化,并根据预配置的准则或通过使用定制分解器来协调冲突,以分解冲突。
[0006] 合并复制通常用于支持源和/或目标上的复制数据的自治变化。数据可以在计划的时间或者根据需求在服务器之间同步。更新在多于一个服务器上独立完成(如不承诺协议),所以同一数据可以由源或由多于一个目标来更新。因此,当合并数据更改时会出现冲突。合并复制包括冲突分解的缺省和定制选项,可以在配置合并源时定义。当出现冲突,合并代理调用冲突分解器来确定哪一数据将被接受并传播至其它目标站点。合并重复中可用的选项包括水平和垂直过滤源数据,包括使用联合过滤器和动态过滤器;使用交替同步伙伴;优化同步来提高合并性能;使复制数据有效来确保同步;以及使用可连接的预约数据库。
[0007] 合并复制支持水平、动态以及联合过滤器,所有的过滤器都使管理员可以创建要复制的数据的分区(或表)。复制的数据的过滤可以供至少下述使用:网络上发送的数据量的最小化;目标复制品所需的存储空间量的减少;根据个别目标复制品需求定制数据源和应用程序;以及冲突的避免或缓解,因为各自的数据分区可以发送至不同的目标复制品。即使合并复制允许多个复制品更新同一数据,使复制品接收不相交集的数据的过滤能确保对单个目标的两个复制品不会更新相同的数据值。
[0008] 传统上,合并复制支持保持源复制品的分区与目标复制品一致的技术。然而,现有算法由于在源和目标复制品之间需要并发同步会话,因此导致系统的重大性能退化。在常规服务器中,合并复制必须支持十分复杂的分区技术来使目标复制品可以仅接收源复制品的数据的一个子集。这些技术需要在源复制品上有高数量的CPU周期,从而通过增加维护目标数据库复制所需的同时同步数,造成扩展网络的瓶颈。密集硬件和软件处理器函数与“分区计算”算法相关联,该算法准备了为保持目标复制品的分区与源复制品的分区相一致所需的变化列表。
[0009] 在常规分区计算方法中,当客户请求与服务器的数据库同步时,服务器的分区计算函数包括计算尚未同步的行的分区成员资格,来确定两数据库之间的差异。由于客户数据库通常是驻留在服务器上的全部数据库的一个子集,计算函数还包括了充分复审源复制品上的所有可能潜在地需要传播至目标复制品的当前变化,然后确定哪一变化与目标复制品有关。例如,根据目标复制品过滤器标准合格的行属于目标复制品,并且必须在目标复制品上被更新或插入。已更新并且不再符合过滤器标准的行不再属于目标复制品,因此必须删除。这表明,在源复制品上的更新可以作为删除操作传播到目标复制品。更进一步,如果有联合过滤器,已更新并且当前属于目标复制品的行可能需要扩展来从联合的表中获取相关行。
[0010] 从性能和伸缩度看,“每一同步会话分区计算”方法的消极方面如下。常规系统负担着冗余处理,因为对每一变化,不管是否有分区更新,常规同步会话需要估算变化的行是否属于目标复制品。如果行在每一同步会话之前改变,每一随后的同步会话都要通过为该行建立新的分区成员资格元数据来再次评估该行是否属于目标复制品。关于行的之前的分区成员资格的知识在同步会话之间不加记忆。这导致每一同步会话的冗余处理。为以示例说明常规系统的进程密集方面,考虑具有1,000个目标复制品的网络。如果源确定一行已改变并请求向目标复制品发行,该1,000个目标复制品进行同步使其更新。如果该行再一次改变,随之而来的是另1,000个同步会话,并且这一进程得以重复直到该行改变1,000次。最后,所有同步会话将必须为该行执行一个1,000,000的组合总数的分区计算函数。
[0011] 常规系统展示了不良的并发行为;因为对于每一行变化,需要每一目标复制品执行其自身的估算。在源和目标系统之间有多重同时同步情况下,将出现同时执行分区计算的多重实例,导致源服务器上的高CPU消耗。
[0012] 准备为保持目标复制品的分区与源复制品的分区相一致所需要的变化列表的分区计算算法往往是任意给定同步会话中执行的最CPU和查询密集函数。如果用于定义复制数据集的过滤不是最优的,并发分区计算函数的性能将更进一步降低源服务器的能力。
[0013] 更快的硬件和更有效的复制配置可以将这一问题处理到一定程度。但是即使在完美设计并调谐的应用程序中,每一发行者服务器具有与其能够有效处理的同时用户合并进程数相关的上限。
[0014] 对于该问题的一个解决方案是调整源合并进程的时间,使进程交错。如果所有目标目前在其工作日的开始或结束时连接来合并变化,可以要求合并进程在一天的非繁忙时间执行。如果在目标执行合并进程时没有控制,可以定义上限来限制允许同时合并的目标的数量。
[0015] 另一减少源服务器上的需求的方法是跨更多源扩展处理负载。常用的技术是以重新发行等级使用几个服务器。例如,如果一个单个服务器当前作为国家中所有销售代表的源,可以添加另外两个服务器来分发与其关联的负载,其中,中央发行者向东部和西部用户发行数据,东部用户向东海岸的销售代表重新发行数据,西部用户向西海岸的销售代表重新发行数据。
[0016] 然而,没有一个常规解决方案提供具有成本效益并且有效的结构,来着眼与大量同步相关的问题。常规系统在网络上传播不相关的元数据。由于即使在同步会话计算分区之后也没有保持的成员资格元数据,所有源复制品的变化都被认为是与向目标复制品的传播相关。这一方法引起伸缩问题,因为如果大量目标复制品向源复制品传播变化,所考虑的变化的列表将增加。而且,如果源复制品在与目标复制品的一个同步会话过程中记录任何附加的元数据,可能需要传播该元数据至另一目标复制品。因此,当前方法的伸缩特性未达到所期望的。本领域需要在同步会话中将所考虑并且在网络上传播的元数据量最小化。根据当前技术支持许多并发同步会话的不足之处,需要在每一同步会话的执行中消除昂贵的分区计算函数。
[0017] 发明概述
[0018] 以下描述了本发明的简化概述,来提供本发明的某些方面的基本理解。本概述并不是本发明的广泛综述,目的不是确定本发明的重点/关键要素,或描绘本发明的范围。其唯一目的是以简化的形式描述本发明的一些概念,作为后文详细描述的序言。
[0019] 本发明为分区计算提供了新的结构,并且通过合并复制使得并发同步会话数可以较大程度地按比例放大,来支持需要大量并发同步会话的推广应用。根据本发明的一个方面,介绍了一种新的算法,来保持目标的数据分区与源的数据分区相一致。当出现变化时,该结构进行操作,使得通过使用简单的查询集来计算这些变化的分区成员资格。第一同步的分区成员资格的预计算允许源复制品和目标复制品的随后同步会话之间的变化的有效传播。
[0020] 本发明的一个显著的方面是,计算分区成员资格的处罚在行更改的实际时刻就引发,而不是在源复制品和目标复制品之间的每个同步会话中匆忙计算行的分区成员资格。该方法允许在每一同步会话中消除分区计算,因为分区信息在第一会话更新时预计算,并对随后的同步会话保持。
[0021] 因此,这里揭示并请求权利的本发明的一个方面包括了在使用数据复制的客户/服务器环境中方便同步的结构。当多个客户请求与服务器同步时,对第一选择用于同步的客户进行处理,使得采用保持的元数据来计算并记录数据库中的分区成员资格行。在更新第一客户后,仅对剩余的如由保持的元数据确定为受该更新影响的客户继续同步进程。
[0022] 本发明的新的方面允许仅当行第一次变化时进行处理(与“每一同步会话分区计算”类似),但是其后,保持该分区成员资格的信息。与揭示的结构相反,常规结构“忘记”成员资格信息,因而需要为每一同步会话计算该信息。根据本发明的方面,在随后的同步会话中,使用保持的成员资格信息将源复制品的变化传播至目标复制品,来估算变化是否与剩余目标相关。而且,如果同一行多次变化,尽管未牵涉更新(可能是更新的最常见的情况),则在第一次之后甚至也不会进行分区计算。这是因为保持的成员资格信息将有效直到有更新为止,所以甚至随后的同步也可以继续使用同一保持的成员资格信息。
[0023] 当在目标上更新行时,该行的成员资格信息被更新。再者,如果有联合过滤器,已更新的并且当前属于目标复制品的行可能需要扩充,来从联合表中获取相关行。计算的一个重要方面是使用简单基于集的查询来完成。即使有无数分区,该基于集的查询的性能仍能缩放良好,只要变化的行仅属于所有分区的一个小子集,或者最好的情况,属于恰好一个分区的良好分区数据的一个小子集。
[0024] 变化行的保持的成员资格信息本质上是变化行的行标识符到有资格接收该行的目标复制品的分区身份的映射。插入和更新需要重新估算分区成员资格,也需要完成被称为扩充的进程,来获取相关的行。即,扩充着眼于那些由于父行更新而分区成员资格发生变化的子行,并且必须重新估算它们的分区标识符。
[0025] 关于删除和更新,过去成员资格的信息将被保持,因此在下一同步会话中,有简便的方法来得知这些行是否需要从目标复制品中删除。
[0026] 为完成以上及相关目标,这里结合以下描述以及附图描述了本发明某些说明性的方面。然而,这些方面仅指示了各种可采用本发明的原理的方法的少数方法,并且本发明试图包含所有这样的方面及其等效方面。结合附图根据以下详细描述,将更清楚本发明的其它优点和新特性。
[0027] 附图的简要描述
[0028] 图1描述了本发明的系统结构图。
[0029] 图2描述了本发明的复制进程的流程图。
[0030] 图3描述了用于计算目标的成员资格元数据的计算算法所使用的元数据表的相互关系。
[0031] 图4描述了使用过滤和扩充的样本更新模式。
[0032] 图5描述了分区更新的一个示例,在该分区更新中,用户数据从一个雇员重新分配到另一个雇员。
[0033] 图6描述了用于执行所揭示的结构的可操作的计算机的结构图。
[0034] 图7描述了符合本发明的样本计算环境的示例性结构图。
[0035] 发明的详细描述
[0036] 定义
[0037] 以下术语贯穿整个描述使用,这里提供了其定义来帮助理解本发明的不同方面。
[0038] 源复制品:变化发源的数据组。
[0039] 目标复制品:变化传播到的数据组。
[0040] 局部复制品:从源发行至目标,包含源复制品的数据的子集的数据组。
[0041] 分区:数据的子集,所有接收同一数据子集的复制品被认为是处于同一分区中并分配相同的分区标识符。
[0042] 分区重对齐:导致目标复制品中行的分区成员资格变化的更改。例如,如果一个分区复制品中的行的成员资格预言为使用WHERE子句,则任何更新一列至不同值的行更改将构成分区重对齐。例如,如果在表Customers上使用过滤器“where state=‘WA’”,则一行中列“state”的值的变化将导致该行的分区重对齐。
[0043] 之前值:恰好在更新操作之前的值。
[0044] 之后值:恰好在更新操作之后的值。
[0045] 行过滤器:允许表中行的一个子集从源发行至目标的过滤器。行过滤器使用查询的WHERE子句并且限制包含在基于特定标准的分区中的行。
[0046] 联合过滤器:当一个表的过滤器是基于发行中的另一个表时,个允许跨表关系可以在复制过滤器的定义中使用的过滤器。联合过滤器定义了同步会话中将要强迫执行的两表之间的一种关系;它类似于在两表之间指定一种联接。联合过滤器命名了两个表,并指定了联接条件来代表两表之间的关系。联接条件通常的形式为TABLE1.COLUMN1=TABLE2.COLUMN2。
[0047] 动态过滤器:使用了函数来从目标复制品中检取值,然后根据该值来过滤数据的行过滤器。该过滤器被定义一次,但是具有资格的合成集对每一目标复制品来说可以不同,并允许目标复制品仅接收为其需求而定制的数据的子集。
[0048] 同步:将从源到目标复制品的数据集收敛成最终收敛状态的进程。
[0049] 同步标记:确定两个复制品的不同步程度的实体。通常模拟为描述最后两个复制品同步的时间的“逻辑时钟实体”。
[0050] 冲突检测:同步中出现的进程,查询源复制品和目标复制品的元数据来确定更改是否冲突。
[0051] 冲突分解:同步中出现的进程,一旦出现冲突能确定该冲突中的优胜者和失败者。
[0052] 现在参考附图来描述本发明,整个附图中使用相同的数字标识相同的元件。在以下描述中,为了解释,提出大量的特定细节来提供对本发明的彻底理解。然而,可能很明显,本发明可以不使用这些特定细节来实践。在其它实例中,以结构图的形式展示了众所周知的结构和装置以便于描述本发明。
[0053] 如在本应用中使用的,术语“组件”和“系统”参考计算机相关实体,在执行中可以是硬件、硬件和软件的组合、软件或执行中的软件。例如,组件可以是,但不限于,运行在处理器上的进程、处理器、对象、可执行、执行线程、程序和/或计算机。作为说明,运行在服务器上的应用程序和该服务器都可以是组件。一个或多个组件可以驻留在进程和/或执行线程中,并且组件可以在一个计算机上本地化和/或在两个或更多计算机之间分布。
[0054] 现在参考图1,说明了本发明的系统结构图。以下讨论从系统操作中源和多重目标先前已同步的点开始。每一目标分别对其各自的数据库作了改变,现在重新与源建立通信来请求数据库同步。
[0055] 服务器(或源)100从N个客户(或目标)接收同步请求。源100包括中央处理单元(CPU)102用来处理同步请求并控制所有的源系统操作。CPU 102与源(或主)数据库104相接口,来储存多个目标使用的数据库入口。这样,源数据库104,也称为源复制品,实质上包含了潜在需要发行至N个目标的信息。
[0056] 在从N个目标接收到多重同步请求后,源100选择第一目标106来同步。第一目标106包括储存所有与目标106相关的数据库入口的第一目标数据库108,包括在最后一次同步之后最近的变化。因此,在第一目标数据库108上储存了与源100的主数据库104的数据不同的数据。
[0057] 在选择第一目标106之后,源100确定在先前与目标数据库108的同步会话之后完成的数据库更新集,以查明源数据库104和目标数据库108之间的数据差异(或变化)。源100包括分区计算算法110,该算法生成变化数据的分区,分区仅定义与第一目标106相关的变化。该分区作为成员资格元数据保持在源100上,并指示在先前同步进程之后变化的目标数据库108的那些行入口。成员资格元数据114储存在源100上,用于与随后的剩余的目标2...N的同步会话一起使用。
[0058] 在第一目标通过第一复制品数据112与源100同步之后,第一目标106的同步完成。
[0059] 现在需要通过合并复制将第一目标106的更新数据库信息传播至一些或所有等候同步的目标2...N。根据本发明的一个方面,随后的目标同步不需要执行所有在第一目标106的同步中执行的计算操作,而是受益于第一同步保持的成员资格元数据114。因此,使用成员资格元数据114来生成复制品用于下载至目标2...N。这使源100相比常规结构大量地节省了处理时间,因为常规结构需要为所有随后的同步重新计算分区成员资格。更重要地,由于分区计算在实际更新时执行而不是在同步时执行,其昂贵的成本将摊销到大量同步会话中。这一技术在大量同步会话相对源复制品并发运行的重负载下仍能伸缩良好。
[0060] 在操作中,源100选择具有第二目标数据库118的第二目标116来同步。源100获取与第二目标116相关联的过滤标准,并根据第二目标116的分区成员资格精确地确定哪一变化与向第二目标116的传播相关。
[0061] 同步进程继续剩余的N个目标,使得源100使用成员资格元数据来与具有第N个数据库124的第N个目标122同步。获取、分析第N个目标122的过滤标准,并且如果需要的话,将其应用到成员资格元数据114中来生成变化集126用于下载至第N个目标122。如果确定保持在给定复制品上的同步元数据安全用于清除(如,根据基于保留的政策,即,不允许在一段给定持续时间内未同步的复制品进行随后的同步),相应的分区成员资格元数据也确定为安全用于清除。
[0062] 注意,虽然本描述是在客户/服务器的环境的情况下提供的,但本发明可应用于对任意需要同步的同质数据收集。同样,本发明可应用在点对点计算环境中。例如,当有至少两个需要与源数据收集同步的目标数据收集时,数据收集可以根据这里描述的新方面来同步。
[0063] 现在参考图2,说明了本发明的复制进程的流程图。为简化解释的目的,虽然可把方法示为或描述为一系列行动,但可以认为并理解成本发明不受行动顺序的限制,因为根据本发明,有些行动可能与这里示出并描述的其它行动不同顺序和/或并发出现。例如,本领域的技术人员可以认为并理解成方法可以作为选择作用一系列相互相关的状态或事件来表示,如在状态图表中。而且,可以不需要所有示出的行动来实现符合本发明的方法。
[0064] 在200,多个目标1...N请求与源同步。在202,源选择第一目标来同步。可以用多种方法来确定选择进程,包括但不限于,首先请求同步的目标,以及使用请求同步的目标的优先级方案。一旦选择了第一目标,源确定第一目标数据库中的变化行集来建立其当前状态,如204所示。在206,源使用用于检查的分区计算算法确定源数据库和第一目标数据库之间的差异,来确定哪一变化将要传播至剩下的目标2...N中所选择的目标。在208,分区计算算法以一个或多个元数据表的形式创建第一成员资格元数据,并在源上储存成员资格元数据。在210,第一分区复制品下载至第一目标用于更新。一旦完成更新,第一目标的同步完成。
[0065] 在212,源选择下一用于同步的目标。在214,源获取下一目标的过滤器标准来确定同步是否恰恰被请求用于第一目标的该特定数据集的下一目标。如果是的话,在216,源同时使用过滤器标准和第一成员资格元数据来创建第二分区复制品用于下一目标(或第二目标)。在218,下载第二分区复制品,并且在220,执行分区更新来完成下一目标的同步进程的这一部分。进程循环回212的输入来选择下一目标来同步。
[0066] 进程继续直至所有请求同步的目标接收第一目标的变化信息,在这之后,同步跨所有其它目标继续第二目标的改变的数据,依此类推,直到目标N。
[0067] 现在参考图3,说明了用于计算目标的成员资格元数据的计算组件使用的元数据表300的相互关系。主要使用了六个表来捕捉目标数据库中的变化信息。分区元数据表302(表示为PartitionsMetadata)通过三个其它表来映射:当前变化元数据表306(表示为CurrentChangesPartitionMapping)、过去变化元数据表306(表示为PastChangesPartitionMapping)、以及生成分区元数据表308(表示为GenerationPartitionMapping)。GenerationPartitionMapping表308映射至生成元数据表310(表示为GenerationMetadata),表310也通过行元数据表312(表示为RowMetadata)映射。应该理解成可以根据特定的实现来使用任何合适数量的表和/或元数据。
[0068] 使用的用于计算复制品上行的分区成员资格的三个元数据包括:相异分区(使用PartitionsMetadata表302),标识目标复制品的分区;行的当前分区成员资格(使用CurrentChangesPartitionMapping表304);以及,行的过去分区成员资格(使用PastChangesPartitionMapping表306)。当前和过去成员资格信息允许分区更新向其它目标复制品的更有效传播。优选保持行先前所属的分区的相关知识,因为这允许“删除”的传播。删除是在目标复制品中不再需要的数据(或行)。
[0069] PartitionsMetadata表302持续跟踪过滤器函数的有意思的估算。如果目标复制品与源复制品同步,并且相标识目标复制品的相异分区当前不在分区表302中,则创建具有“分区值”的新入口,并分配新partition_id参数。当第一次选择新目标来同步时,每一入口在PartitionsMetadata表302中采用各自的分区值登记,并被分配一个新partition_id。
[0070] 如果动态过滤器对Employee(雇员)的表达式是“当TerritoryID=fn_EmployeeTerritory()时”,则fn_EmployeeTerritory列添加至PartitionsMetadata表302中。当对Employee行作出变化,使用单个基于集查询来计算变化行所属的所有分区,该查询使用过滤器表达式作为联接子句将Employee与PartitionsMetadata表302相连接,将fn_EmployeeTerritory()替换为PartitionsMetadata.fn_EmployeeTerritory。
[0071] 只要每一变化行仅属于所有partition_id的一个小子集,或者最好的情况,属于恰好一个partition_id的良好分区数据的一个小子集,即使有大量登记的,partition_id,该基于集的查询的性能也可以伸缩良好。
[0072] CurrentChangesPartitionMapping表304跟踪给定的行的向其相关分区的当前映射。因此,表304包括该表中的partition_id列,该列为从PartitionsMetadata表302派生的一个值。CurrentChangesPartitionMapping表304的row_id列包含复制所使用的给定行的唯一标识符。
[0073] PastChangesPartitionMapping表306跟踪给定行向其可能属于的任意分区的任意过去映射。因此,表306包括partition_id列,该列是从分区表302派生的一个值。表306的row_id列包含了复制使用的给定行的唯一标识符。同步标记列(synch_anchor列)逻辑上包含行的分区映射何时变化的信息。在分区更新时捕捉同步标记允许同步进程将分区更新从源100仅传播至从源和目标最后一次同步之后尚未接收到这些变化的目标。在样本数据中,为简化,sync_anchor列将使用UTC时间(订正世界时坐标)形式的值或者格林威治平均时间值。
[0074] 生成分区表308包括generation_id列,该列是分配给一组变化的同步标记。当变化从目标传播至源100时,在源100给变化分配新generation_id。由于作为该生成的一部分的行属于一个相异分区P1,GenerationPartitionMapping表308包括partition_id列,用于映射到目标的partition_id P1。然而,注意,通常来说,生成可以映射到多于一个分区标识符。这与partition_id为特定值“-1”的生成不同。当属于另一相异分区P2的不同目标复制品与源100同步时,生成映射消除P1生成。partition_id的特殊的-1值表明生成是全局的,因此与所有分区相关。
[0075] 生成表310包括generation_id用于为每一生成分配唯一的生成ID。生成分区表308包括generation_id,映射该表310,并追踪哪一生成已传播至当前复制品,哪一生成代表本地变化。它允许同步进程派生需要为给定会话考虑的相关生成的列表。
[0076] RowMetadata表312在一行接一行的基础上跟踪复制元数据,并且包含关于行何时通过使用逻辑时钟来代表时间而发生变化的信息。表312也包含了哪一复制品贡献给该行的这一版本的信息,以及列的当前版本的信息。生成分区表308和RowMetadata表312都映射到生成表310。
[0077] 以下是表1,总结了不同的元数据表及其相应功能。
[0078] 表1 元数据表及总结
[0079]元数据表名称 目的
RowMetadata 在一行接一行的基础上跟踪复制
元数据,并包含关于行何时发生变化
(采用逻辑时钟来代表时间)的信息
以及行和列版本矢量。
GenerationMetadata 跟踪哪一生成已传播至当前复制
品,哪一生成代表本地变化;允许同
步进程派生需要为已知会话所考虑的
相关生成的列表
PartitionsMetadata 包含代表目标复制品的每一分区
值的相异入口
GenerationPartitionMapping 包含GenerationMetadata表中的哪
一生成与哪一分区相关的映射信息
[0080]CurrentChangesPartitionMapping 包含哪一变化当前与哪一分区相
关的元数据
PastChangesPartitionMapping 包含哪一变化先前与哪一分区相
关的元数据
[0081] 用于变化的有效传播的生成分区
[0082] 本发明的一个新方面也便于在变化传播中所使用的最优化。合并复制当前使用“生成”的概念来逻辑上将从源传播至目标复制品的变化分组。GenerationMetadata表310跟踪哪一生成已传播到当前复制品,哪一生成代表本地变化。生成分区也允许同步进程派生需要为给定会话考虑的相关生成的列表。
[0083] 当在源复制品上发生变化时,源为表上的集变化分配一个生成值,该生成值是一个逻辑时钟实体。如果从可能被中断的先前同步会话,或者通过具有不同源复制品的同步会话接收到变化组,分组概念允许目标复制品能够有效地标识。本质上,当前不在目标复制品中的生成值的列表反映了与从源向目标的传播需要考虑的相关的变化。如果目标复制品从源复制品接收数据的一个子集,如,目标复制品,则满足复制品的分区标准的变化是传播至目标的唯一变化。
[0084] 然而,合并复制的当前版本仍需要将源复制品上的现有的所有生成的信息传播到目标复制品,而不管这些生成包含的变化是否与目标复制品相关。这是由于没有元数据跟踪作为源复制品处生成的一部分的变化是否与有意义的分区相关。
[0085] 标识行的分区成员资格的分区组允许从源向目标复制品的生成传播的效率。由于变化集已映射到分区标识符,作为行的分组的生成也可以映射到分区标识符。因此,当目标复制品对在源复制品上可用的特定分区感兴趣时,包含与目标复制品不相关的分区中的变化的生成值能够快速地在计算相关变化集中消除。除提供计算效率之外,该算法也具有更好的网络性能特征,因为只有与目标分区相关的生成在网络上传播。
[0086] 现在参考图4,说明了使用过滤和扩充的样本更新模式。该示例的前提是重定位的雇员。更新进程包括将重定位的雇员的用户数据重新分配给另一雇员。在该示例中,客户信息至少包括用户信息、用户订单信息以及用户订单细节。分区表是Employees分区表400,采用EmployeeID参数唯一地标识了重定位的雇员。在该示例中,表400至少包括三列:
FirstName列、LastName列以及TerritoryID列。如果Employees分区的动态联合过滤器表达式为“当TerritoryID=fn_EmployeeTerritory()时”,则fn_EmployeeTerritory列被添加到雇员分区元数据表400。
[0087] 当新分区第一次达到同步时,新分区使用其各自的分区值在表400中注册入口,并被分配一个新partition_id。当对Employees表400的行的值作出变化,使用单个基于集的查询来计算变化行所属的所有分区,该查询使用过滤器表达式作为联接子句来将雇员和雇员分区元数据表400相联接。然后,函数调用fn_EmployeeTerritory()由PartitionsMetadata.fn_EmployeeTerritory替换。
[0088] 例如,如果Employees分区表400中的TerritoryID列被估算为美国的51个不同地理区域,Employees分区表400将为这些51个不同值的每一个分配一个唯一的分区身份。如果目标与源100同步,并且标识目标复制品的相异分区不在Employees表400中,则使用相异的“分区值”创建一个新入口并被分配一个新partition_id。
[0089] 下表(表2)是Employees PartitionsMetadata表400的一个样本,没有雇员的姓和名的列。最后一列提供了样本数据的解释,但不是该模式所必须的部分。
[0090] 表2 样本PartitionsMetadata表
[0091]Partition_id fn_EmployeeTerritory 表的解释(非本模式
的部分)
1 “WA” PartitionID=1与华
盛顿地域相应
2 “CA” PartitionID=2与加
利福尼亚地域相应
3 “OR” PartitionID=3与俄
勒冈地域相应
...... ...... ......
[0092] 只有每一变化行仅属于所有partition_id的一个小子集,或者最好的情况,属于恰好一个partition_id的良好分区的数据的一个小子集,即使有大量注册的partition_id,该基于集的查询的性能仍能够伸缩良好。
[0093] 如上所述,所有客户信息都需要和雇员一起传播。采用联合过滤器,通过定义将在同步进程中使用的跨表关系来方便这一进程。在样本模式中,Employees表400中行的分区成员资格采用Employees表400上的“行过滤器”定义来预测。Customers表404中行的分区成员资格基于Employees表400中采用Employees和Customers之间的联合过滤器定义402预测的行的成员资格。Orders表408中行的成员资格基于Customers表404中采用Customers和Orders之间的联合过滤器定义预言的行的成员资格。同样,Order Details表412中行的成员资格基于Orders表408中采用Orders和Order Details之间的联合过滤器定义预言的行的成员资格。
[0094] 因此,第一联合过滤器402定义了Employees表400和Customers表404之间的跨表关系(Customers.EmployeeID=Employees.EmployeeID)。Customers表404与唯一标识用户的CustomerID相关联,并至少包括映射到Employees表400的EmployeeID列,以及其它与用户帐号信息,如姓名、地址、邮政编码以及联系电话和信息相关的列。第二联合过滤器406定义了Customers表404和Orders表408之间的表关系(Orders.CustomerID=Customers.CustomerID)。Orders表408与唯一标识Customers表404的订单信息的OrderID相关联,并至少包括映射到Customers表404的CustomerID列。表408包括其它与用户订单,如运送信息、税率以及货运收费相关的信息列。
[0095] 第三联合过滤器410定义了Orders表408和Order Details表412之间的表关系(OrderDetails.OrderID=Orders.OrderID)。Order Details表412与唯一标识Orders表408的订单细节信息的OrderDetailID相关联,并至少包括映射到Orders表408的OrderID列。表412包括将Order Details表412映射到产品表416的ProductID列。表412也包括提供所定购的产品的信息的Quantity列和UnitPrice列。因此,OrderDetails表412需要来自Products表416的UnitPrice信息。
[0096] 第四联合过滤器416定义了Order Details表412和Products表416之间的表关系(OrderDetails.ProductID=Products.ProductID)。Products表416与唯一的ProductID相关联,并进一步包括ProductName和UnitPrice列。
[0097] 因此,扩充算法与联合过滤器一起便于所有与客户购买的产品、购买产品的订单细节、包括细节和特定产品的订单以及定购产品的用户相关的信息连同EmployeeID一起的传播。
[0098] 使用以下在图5中描述的样本数据,在Customers表404上的分区更新导致Customers行的过去和当前映射被重新计算。然后,根据Customers表404和Orders表408之间的联合过滤器406,父分区成员资格已变化的所有Orders行将被重新估算各自的过去和当前分区映射。根据Orders表408和Order Details表412之间的联合过滤器410,父分区成员资格已变化的所有Order Details行都被重新估算各自的过去和当前分区映射。最后,根据Order Details表412和Products表416之间的联合过滤器414,父分区成员资格已变化的所有Products行都被重新估算各自的过去和当前分区映射。然后,该算法终止,因为Products表416没有任何子行。当扩充算法终止,元数据表精确地反映了行的分区成员资格。在行从源复制品传播到目标复制品之前不需要进一步的分区计算。
[0099] 为反映这一算法,为子表生成的数据库景象参考为其直接父表生成的景象。在样本模式中,Customers景象参考Employees景象。同样,Orders景象参考Customers景象。同样,Order Details景象参考Orders景象。顶层父景象,在本示例中为Employees表
400,使用PartitionsMetadata表302来估算行的分区成员资格,进一步使用样本中过滤列(TerritoryID)的值。
[0100] 为说明目的,为样本模式使用以下景象定义。
[0101] Employees表的景象定义(view partition Employees)
[0102] 从 Employees,PartitionsMetadata 中, 在 PartitionsMetadata.fn_EmployeeTerritory=Employees.TerritoryID时,选择[Employees].*,partition_id=PartitionsMetadata].[partition_id]。
[0103] Customers表的景象定义(view partition Customers)
[0104] 从 Customers.[view_partition_Employees]Employees 中, 在 Customers.EmployeeID = Employees.EmployeeID 时, 选 择 [Customers].*,partition_id =[Employees].[partition_id]。
[0105] Orders表的景象定义(view partition Orders)
[0106] 从 [Orders],[view_partition_Customers][Customers] 中, 在 (Orders.CustomerID=Customers.CustomerID)时,选择[Orders].*,partition_id=[Customers ].partition_id。
[0107] Order Details表的景象定义(view partition OrderDetails)
[0108] 从 [Order_Details],[view_partition_Orders][Orders] 中, 在 (Order_Details.OrderID= Orders.OrderID)时,选 择 [Order_Details].*,partition_id=[Orders].partition_id。
[0109] 子行的分区成员资格由通过变化行集的景象选择变化行集来确定。所有从“之前”值计算所得的过去分区映射保持在PastChangesPartitonMapping表306中,所有当前分区映射保持在CurrentChangesPartitionMapping表304中。
[0110] 下表(表3)是CurrentChangesPartitionMapping表304的样本,反映了作为同步更新的一部分的变化,雇员Joe从CA地域迁移到WA地域。最后一列仅作解释作用,并非本模式所必须的部分。
[0111] 表3 CurrentChangesPartitionMapping表的样本
[0112]row_id partition_id 表的解释(不是模式
的部分)
R1 1 R1行与Territory=
“WA”的雇员“Joe”
相对应
R2 2 R2行与Territory=
“CA”的雇员“Mary”
相对应
R3 3 R3行与Territory=
“OR”的雇员“Jane”
相对应
...... ...... ......
[0113] 以下是表4,为PastChangesPartitionMapping表306的样本,表示Joe先前分配给CA地域。最后一行提供了样本数据的解释,但并非本模式的必须部分。
[0114] 表4 PastChangesPartitionMapping表的样本
[0115]Row_id Partition_id 同步标记 表的解释(不
是模式的部分)
R1 2 星期二,2002 行R1与地域
年10月8日,上 曾经是“CA”直
午10:27 到星期二,2002
年10月8日,上
午10:27为止的
雇员“Joe”相对

Row_id Partition_id 同步标记 表的解释(不
是模式的部分)
R2 3 星期一,2002 行R2与地域
年10月7日,上 曾经是“OR”直
午12:25 到星期一,2002
年10月7日,上
午12:25的雇员
“Mary”相对应
...... ...... ...... ......
[0116] 现在参考图5,说明了用户数据从一个雇员重新分配到另一个雇员的示例分区更新。对“Joe”的EmployeeID的现有例示的表关系如下。Employee1表500描述了Employee1行,该行具有表示“Joe”的EmployeeID列,以及具有将Employee1表500连接回Employees PartitionsMetadata表400的“WA”的入口的TerritoryID列。Customer1表502,作为Employee1表500的子表,描述了Customer1行,该行具有“Alfred”的CustomerID列入口,以及将Customer1表502连接回Employee1表500的EmployeeID入口“Joe”。
[0117] Customer1表502有三个子实体:第一Order_1实体504、第二Order_2实体506以及第三Order_3实体508。Order_1实体504描述了Order_1行,该行含有具有“1”入口的OrderID列,以及具有将实体504连接回父Customer1表502的“Alfred”入口的CustomerID列。Order_2实体506描述了Order_2行,该行含有具有“2”入口的OrderID列,以及具有将实体506连接回父Customer1表502的“Alfred”入口的CustomerID列。Order_3实体508描述了Order_3行,该行含有具有入口“3”的OrderID列,以及具有将表508连接回父Customer1表502的“Alfred”入口的CustomerID列。
[0118] 第一Order_1实体有四个子OrderDetail实体,定义了特定OrderID=1的订单细节。OrderDetail1实体510描述了OrderDetail1行,该行含有具有将实体510连接回父实体504的“1”入口的OrderID列,以及其它未示出的列细节。OrderDetail2实体512描述了OrderDetail2行,该行含有具有将实体512连接回父实体504的入口“1”的OrderID列,以及其它未示出的列细节。OrderDetail3实体514描述了OrderDetail3行,该行含有具有将实体514连接回父实体504的“1”入口的OrderID列,以及其它未示出的列细节。OrderDetail4实体516描述了OrderDetail4行,该行含有具有将实体516连接回父实体
504的“1”入口的OrderID列,以及其它未示出的列细节。
[0119] Order_2实体506有一个子实体,OrderDetail5实体518,描述了OrderDetail5行,该行含有具有将实体518连接回父实体506的“2”入口的OrderID列,以及其它未示出的列细节。
[0120] Order_3实体508有两个子实体,OrderDetail6实体520和OrderDetail7实体522。OrderDetail6实体520描述了OrderDetail6行,该行含有具有将实体520连接回父实体508的“3”入口的OrderID列,以及其它未示出的列细节。OrderDetail7实体522描述了OrderDetail7行,该行含有具有将实体522连接回父实体508的“3”入口的OrderID列,以及其它未示出的列细节。
[0121] Customer1表502中Customer1行的EmployeeID列将从“Joe”更新为“Mary”。Employee2表524描述了Employee2行,该行含有具有“Mary”入口的列,以及具有“CA”入口的TerritoryID列。该更新本质上将Customer_1行分区成员资格从“Joe”变为“Mary”。
因此,Order行、Order_1、Order_2和Order_3的分区成员资格也从“Joe”变为“Mary”。同样,OrderDetails实体510、512、514、516、518、520和522中相应的OrderDetails行现在也属于不同的分区,即,“Mary”。为将行的分区成员资格从父实体传播到子实体,执行扩充进程。
[0122] 复制进程——变化跟踪和变化枚举
[0123] 受影响的复制进程的两个主要阶段牵涉变化跟踪和变化枚举。当在用户数据库中出现数据变化时,用户数据库中的变化跟踪机制跟踪复制元数据,该元数据随后允许这些变化在后面的一个时间点上与其它复制品同步。变化枚举是同步进程的一个阶段,它枚举了从源和目标之间的先前同步以来该复制品中出现的变化。
[0124] 复制进程的变化调和和变化应用阶段在任何重要的方式中都不受影响。
[0125] 现在描述当行被插入、更新或删除时关于对复制元数据的修改的变化跟踪机制。当行被插入时,估算该行的当前分区成员资格并将该信息保持在CurrentChangesPartitionMapping表304中。在已知行的子行已存在的极少情况下,新行的插入会造成子行的分区成员资格使用扩充进程也被估算。
[0126] 当使用非过滤器列更新来更新行时,如果在元数据表中没有该给定行的元数据,则估算该行的当前分区成员资格,并且将该信息保持在CurrentChangesPartitionMapping表304中。如果元数据已存在,则不估算分区成员资格,因为那表示分区成员资格之前已估算过。
[0127] 当使用过滤的列更新来更新行时,在更新之前使用变化跟踪中可用的“之前”值估算该行过去所属的分区。由于子行的分区成员资格受父行的分区成员资格影响,使用扩充进程来为子行估算过去分区映射。所有的过去分区映射储存在PastChangesPartitionMapping表306中。另外,分区更新出现的逻辑时间记录进过去变化表306中的同步标记列。这允许同步进程抑止分区更新传播至在之前同步会话中或者通过与不同源复制品同步已看见该变化的复制品。注意,估算过去分区映射本质上清除了CurrentChangesPartitionMapping表304中的任何入口,因为这些入口由于分区更新已变为无效。
[0128] 当通过过滤的列更新来更新行时,在更新之后使用变化跟踪中可用的“之后”值估算该行当前所属的分区。由于子行的分区成员资格受父行的分区成员资格影响,使用扩充进程来为子行估算当前分区映射。所有当前分区映射储存在CurrentChangesPartitionMapping表304中。
[0129] 当进行删除时,使用变化跟踪中可用的“之前”值来估算删除前该行先前所属的分区。由于子行的分区成员资格受父行的分区成员资格影响,使用扩充进程来为子行估算过去分区映射。所有过去分区映射储存在PastChangesPartitionMapping表306中。另外,分区更新出现的逻辑时间记录进表306的同步标记列中。这避免了同步进程冗余地将分区更新传播到之前同步会话中已看见该变化的复制品。由于在删除之后分区中不存在该行及其子行,因此不需要在CurrentChangesPartitionMapping表304中创建任何入口。注意,估算过去分区映射本质上清除了CurrentChangesPartitionMapping表304中的任何入口,因为这些入口由于行删除进程已变为无效。
[0130] 分区更新需要变化跟踪机制来更新元数据,使得该更新以有效的方式传播到目标复制品。关键方面是当行的分区成员资格改变时,行的partition_id必须被更新,并且任何分区成员资格因父行的更新而改变的子行必须重新估算其partition_id。使用扩充进程来捕捉该信息,该扩充进程在这里提供的示例中被使用。
[0131] 变化枚举机制使用分区成员资格元数据来有效地将变化从源复制品传播到目标复制品。由于变化跟踪机制已估算了分区并执行了扩充,很大程度上简化了运行时刻的变化枚举的复杂性。
[0132] 删除和分区更新造成具有“过去分区映射入口”的变化集。通过从PastChangesPartitionMapping表306中选择其同步标记比与会话协商的同步标记更新近,并且partition_id与目标复制品的partition_id相匹配的行来枚举这些变化集。这些行随后将作为删除传播到目标复制品。
[0133] 分区和非分区的插入和更新造成具有“当前分区映射入口”的变化集。通过从RowMetadata表312中选择其同步标记比与会话协商同步标记更新近,并且在CurrentChangesPartitionMapping表304中具有partition_id与目标复制品partition_id相匹配的入口的行来枚举这些变化集。这些行作为更新传播至目标复制品。
[0134] 一旦枚举了已知分区的变化,然后通过使用现有技术的冲突检测和分解机制来传播这些变化。同样,一旦枚举了已知分区的变化,并且冲突被检测并分解,然后通过使用现有技术的变化应用机制传播这些变化。
[0135] 生成分区
[0136] 如在源复制品上维护的行映射到分区允许对将要在源和目标复制品之间传播的相关生成的列表的有效计算。例如,GenerationPartitionMapping表308包含generation_id列,该列是分配给一组生成的同步标记。当变化从目标复制品传播到源复制品时,在源复制品上对变化分配新的generation_id。由于作为该生成的一部分的行属于相异分区P1,该生成映射到目标的partition_id P1。当属于另一相异分区P2的不同目标复制品与源复制品同步时,生成映射消除P1生成。partition_id的一个特殊值-1表明该生成是全局的,因此与所有分区相关。
[0137] 以下的表5是GenerationPartitionMapping表308的样本。最后一列提供了样本数据的解释,并非本模式需要的部分。
[0138] 表5 GenerationPartitionMapping表的样本
[0139]generation_id partition_id 表的解释(非模式的
部分)
G1 1 生成G1与Territory
=“WA”的分区相关
G2 2 生成G2与Territory
=“CA”的分区相关
G3 -1 生成G3是全局生
成,需要向所有分区传

...... ...... ......
[0140] 生成的分区是建立在本发明的分区分组方面上的最优化,并提供了三个好处:不相关变化的有效消除;即使许多目标复制品已与源复制品同步,同步会话的可预言持续时间;以及因生成传播而增强的网络性能。
[0141] 在源复制品与许多目标复制品同步的拓扑中,每一目标复制品具有其相异分区,生成分区使同步进程能够有效地消除不相关变化。例如,考虑一种拓扑,其中,一个源复制品向目标复制品提供数据的相异子集,每一子集包含对一个销售人员特定的销售信息。如果假设最初,1,000个目标复制品传播10,000个变化至源复制品,然后该10,000个变化放入源复制品上的100个相异生成中,当所有1,000个目标复制品将其变化传播到源复制品时,总数为1,000×10,000,或者说10,000,000个变化放入源复制品的100,000个生成中。结果,GenerationPartitionMapping表308将有100个生成集的100,000个入口,每一入口都映射到单个分区。
[0142] 当相异partition_id=P1001的第一目标复制品与源复制品同步时,由于所有生成映射到与分区P1-P1000相对应的分区,所有100,000个生成(因此有10,000,000个变化)将与partition_id=P1001的第一目标复制品不相关。另一方面,如果partition_id=P500的第二目标复制品与源复制品同步,同步将有效地枚举恰好100个与第二目标复制品(partition_id=P500)相关的生成,并且因此传播恰好100,000个变化至第二目标复制品。
[0143] 生成分区最优化的另一优点是,由于它能够控制相对于与该分区相关的变化数的目标复制品检查的同步元数据的量,因此源复制品和目标复制品之间的同步会话的持续时间是可预测的。作为示例,假设partition_id=P500的目标复制品很长时间未与源复制品同步。在现有的合并复制的版本中,当该目标复制品最终与源复制品同步时,将对其进行处罚,因为它将必须枚举已积累在源复制品上的所有生成。也就是说,如果例如,1,000个目标复制品每个传播100个生成,该相关和不相关生成集总数为100,000个生成,这是重大的。一旦考虑100,000个生成,“每一同步会话分区计算”算法将消除不相关的变化,仅传播相关变化到目标复制品。
[0144] 考虑一种生成被分区进入相关分区标识符的情况。根据本发明的方面,与目标复制品(如partition_id=P500)的同步会话将不会被处罚,因为它能够立即标识相关生成。对生成分区的网络特征的影响是重大的,因为避免了不相关生成向目标复制品的传播。继续该示例,这相当于节省了100,000万减100,或者说99,900个生成(不需要向目标复制品传播的生成)。无论何时在源复制品上做出本地变化,即使该变化仅与单个分区或分区集相关,可以更优选并更有效地将这些本地变化作为全局生成来传播。基于它的前提是源复制品的变化与实际上所有目标复制品相关,而目标复制品的变化仅与共享同一partition_id的目标复制品相关。
[0145] 应理解成本发明的方面具有其它应用。例如,在可由大量客户用户访问的服务器集群中,对第一服务器的特定用户出现的分区变化能够用来确定该用户是否应该与第一服务器分离并且与第二服务器重新关联。这一“关联”进程可以根据预定标准自动执行,使得一旦跟踪到对数据库信息的特定字段作出变化,能够自动触发关联进程。
[0146] 还应理解成尽管本发明是在数据库变化的环境下描述的,它并不限于此,而已应用于需要跨全异源的数据同步的任何环境。例如,本发明应用于目录服务,在该服务中,每一用户的姓名、慨貌信息、用户帐户、网络许可以及机器地址和网络上的资源得以协调。
[0147] 现在参考图6,说明了可操作执行所揭示的结构的计算机的结构图。为向本发明的各种方面提供附加的环境,图6及以下讨论将提供合适计算环境600的简要综合描述,在该计算环境中可以实现本发明的各种方面。尽管上文在运行于一个或多个计算机上的计算机可执行指令的一般环境下描述本发明,但本领域的技术人员认识到,本发明也可以连同其它程序模块和/或硬件和软件的组合一起实现。通常来说,程序模块包括完成特定的任务或实现特定的抽象数据类型的例程、程序、组件、数据结构等等。而且,本领域的技术人员应理解成本发明方法可以使用其它计算机系统配置来实践,包括单处理器或多处理器计算机系统、小型机、大型机、以及个人计算机、手持式计算装置、基于多处理器或可编程消费电子产品等等,每一都可以操作上与一个或多个关联装置相耦合。本发明的例示方面也可以在分布式计算环境中实践,在该环境中,特定的任务由通过通信网络连接的远程处理装置完成。在分布式计算环境中,程序模块可以位于本地和远程内存存储装置中。
[0148] 再参考图6,实现本发明的各种方面的示例性环境600包括计算机602,该计算机602包括处理单元604,系统内存606以及系统总线608。系统总线608将系统组件,包括但不限于系统内存606,耦合至处理单元604。处理单元604可以是任意各种商业上可用处理器。也可以采用双微处理器和其它多处理器结构作为处理单元604。
[0149] 系统总线608可以是几种类型总线结构的任意一种,包括内存总线或内存控制器、使用各种商业可用总线结构的外围总线和本地总线。系统内存606包括只读内存(ROM)610和随机存储内存(RAM)612。基本输入/输出系统(BIOS)储存在ROM610中,包括帮助如在启动时在计算机602内元件之间传输信息的基本例程。
[0150] 计算机602还包括硬盘驱动器614、磁盘驱动器616(如从可移动硬盘618读出或写入)以及光盘驱动器620,(如读CD-ROM盘622或从其它光媒介读出或写入)。硬盘驱动器614、磁盘驱动器616和光盘驱动器620可以分别通过硬盘驱动器接口624、磁盘驱动器接口626和光盘驱动器接口628连接至系统总线608。驱动器及其关联的计算机可读媒介提供数据、数据结构、计算机可读指令等等的非易失存储。对于计算机602,驱动器和媒介以合适的数据格式容纳广播编程的存储。尽管上述对计算机可读媒介的描述是硬盘、可移动磁盘和CD,本领域的技术人员应理解成,计算机可读的其它类型的媒介,如压缩驱动器、盒式磁带、闪存卡、数字视频盘、盒式磁盘等等,也可以在示例性操作环境中使用,并且更进一步,任何这类媒介可以包含计算机可读指令来执行本发明的方法。
[0151] 一些程序模块,包括操作系统630、一个或多个应用程序632、其它程序模块634和程序数据636,可以存储在驱动器和RAM612中。应理解成本发明可以使用各种商业可用操作系统或操作系统的组合来实现。
[0152] 用户可以通过键盘和指向设备,如鼠标640向计算机602输入命令和信息。其它输入设备(未示出)可以包括麦克风、IR远程控制、操纵杆、游戏板、圆盘式卫星电视天线、扫描仪等等。这些和其它输入设备经常通过与系统总线608耦合的串行端口接口642连接至处理单元604,也可以通过其它接口连接,如并行端口、游戏端口、通用串行总线(“USB”)、IR接口等等。监视器644和其它类型的显示设备也通过接口,如视频适配器646,连接至系统总线608。除监视器644之外,计算机通常包括其它外围输出设备(未示出),如扬声器、打印机等等。
[0153] 计算机602可以在建立网络的环境中操作,该环境使用逻辑连接至一个或多个远程计算机,如远程计算机648。远程计算机648可以是工作站、服务器计算机、路由器、个人计算机、便携式计算机、基于微处理器的娱乐器具、对等装置或其它普通网络节点,并通常包括许多或所有所述与计算机602有关的元件,尽管为简要的目的,仅示出了内存存储设备650。所述的逻辑连接包括LAN 652和WAN 654。这类常见的网络环境有办公室、企业范围计算机环境、企业内部互联网和因特网。
[0154] 当在LAN网络环境中使用时,计算机602通过网络接口或适配器656连接至本地网络652。当在WAN网络环境中使用时,计算机602通常包括调制解调器658,或连接至LAN上的通信服务器,或具有其它在WAN 654,如因特网上建立通信的装置。调制解调器658可以是内置的或外置的,通过串行端口接口642连接至系统总线608。在建立网络的环境中,所述与计算机602或其部分有关的程序模块可以储存在远程内存存储装置650中。应理解成这里示出的网络连接是示例性的,也可以采用在计算机之间建立通信链路的其它装置。
[0155] 现在参考图7,说明了根据本发明的样本计算环境700的示意结构图。系统700包括一个或多个客户702。客户702可以是硬件和/或软件(如线程、进程、计算装置)。例如,客户702可以采用本发明来容纳小文本文件(cookie)和/或关联的前后关系信息。系统700也包括一个或多个服务器704。服务器704也可以是硬件和/或软件(如线程、进程、计算装置)。例如,服务器704可以采用本发明来容纳线程来执行变换。客户702和服务器704之间的一个可能的通信可以是数据包的形式,适合在两个或更多计算机进程间发送。例如,数据包可以包括小文本文件和/或关联的前后关系信息。系统700包括通信主机706,可以采用该主机以便于客户702和服务器704之间的通信。客户702可操作地连接到一个或多个客户数据存储708,客户数据存储可以用来存储对客户702本地的信息(如小文本文件和/或关联的前后关系信息)。同样,服务器704可操作地连接至一个或多个服务器数据存储710,服务器数据存储可以用来储存对服务器704本地的信息。
[0156] 以上所描述的包括本发明的示例。当然,为描述本发明,不可能描述每一可想到的组件或方法的组合,但是本领域的技术人员认识到本发明的许多另外组合和改变都是可能的。因此,本发明旨在包含所有属于后附权利要求书的构思和范围之内的替代品、修改和变化。而且,在详细描述中或者权利要求书中使用的术语“包括”意味着该术语旨在以与术语“包含”类似的方式包括在内,如同把它作为权利要求书中的过渡词语来使用对“包含”所作的解释。