在线数据库的分区的制作方法

文档序号:6437952阅读:287来源:国知局

专利名称::在线数据库的分区的制作方法
技术领域
:本发明涉及计算机领域,尤其涉及在线数据库的分区。相关申请的交叉引用本申请要求于2010年10月沘提交的、题为“PARTITIONINGANDRE-PARTITIONINGONLINEDATABASES(在线数据库的分区和再分区)”的第61/407,579号美国临时专利申请的权益,该申请整体包含于此。
背景技术
:1.背景和相关技术计算机系统和相关技术影响社会的许多方面。的确,计算机系统处理信息的能力已转变了人们生活和工作的方式。计算机系统现在通常执行在计算机系统出现以前手动执行的许多任务(例如,文字处理、日程安排和会计等)。最近,计算机系统彼此耦合并耦合到其他电子设备以形成计算机系统和其他电子设备可以在其上传输电子数据的有线和无线计算机网络。因此,许多计算任务的执行跨多个不同的计算机系统和/或多个不同的计算环境分布。在一些计算环境中,数据库用来管理数据集。许多数据集的尺寸是相对小的。这些较小的数据集可以使用单个计算机系统的资源来存储的。然而,其他数据集较大。为了存储较大的数据集,数据集被分成多个数据库分区,不同的分区于是被存储在不同的计算机系统处。例如,社交网络站点可以具有数亿用户。这些社交网络站点可以将关于其用户的用户相关数据存储在跨许多计算机系统分布的分区数据库中。在一些环境中,使用碎片化来对数据库进行分区。碎片化是一种跨多个数据库、按行对一个或多个表格进行分隔(分区)的水平分区形式。水平分区通过在方案的单个实例(或同一个逻辑服务器)上使用多个较小的索引尺寸来减小索引尺寸。通过跨多个服务器(逻辑的或物理的)分隔(分区)一个或多个表格来进一步碎片化。这样,碎片化能够将较大的数据库在多个机器上分布,改进了性能。然而,碎片化难以实现。碎片化一般需要有经验的开发者或数据库管理员来手工编码。已经开发了一些机制来至少部分地使碎片化自动化。然而,这些机制一般在应用层实现和/或使用(与数据库层相对)。由此,这些机制要求复杂的应用协调来根据期望进行工作。而且,随着时间的推移,数据库或数据库分区中的数据量和/或数据排列会发生变化。由此,数据库可能需要被重新分区,以便更均勻地分配计算机系统资源的使用、优化资源、等等。重新分区可以包括添加新分区、移除现有的分区、以及在分区间传输数据。不幸的是,重新分区一般需要在重新分区过程期间离线地获得所有受影响的分区。由此,在重新分区期间,用户可能在(可能延长的)某些时间段不能访问数据
发明内容本发明涉及用于对在线数据库进行分区的方法、系统和计算机程序产品。在一些实施例中,数据库分区被分成多个数据库分区。接收到分区分隔指示。分区分隔指示指明了如何将数据库分区至少分成第一部分和第二部分以便分隔数据库分区中存储的数据行。执行分隔操作以便根据分区分隔指示来分隔数据库分区,而数据库分区同时保持在线。分隔包括建立第一新数据库分区以存储和所指定的联合键值的子集的第一部分相对应的数据行;以及建立第二新数据库分区以存储和所指定的联合键值的子集的第二部分相对应的数据行。从数据库分区到第一和第二新数据库分区的每一个建立复制流和更新流中的一个或多个。对于来自数据库分区的一个或多个数据行的每一个,对数据行进行过滤以便标识第一新数据库分区和第二新数据库分区之一作为数据行的适当目的地。根据过滤结果,一个或多个数据行中的每一个以及对它们的更新从该数据库分区被转移至该适当目的地数据库。在其它实施例中,各数据库分区被合并。接收到分区合并指示。分区合并指示表明了如何将存储在多个数据库分区中的数据行合并在一起。执行合并操作以便根据分区合并指示将数据行合并在一起,而同时多个数据库分区保持在线。合并包括建立新数据库分区以存储数据行。从多个数据库分区的每一个到新数据库分区建立复制流和更新流中的一个或多个。每个数据行以及对它们的更新通过合适的流从多个数据库分区被转移至新数据库分区。在进一步的实施例中,从分布式数据库系统处丢弃多个数据行。接收到分区丢弃指示。分区丢弃指示表明了如何丢弃跨多个数据库分区存储的一个或多个数据行。执行合并操作以便根据分区丢弃指示来丢弃数据行,而同时多个数据库分区保持在线。丢弃包括对于要丢弃一个或多个数据行的每一个数据库分区,访问要从数据库分区丢弃的数据行的标识符。扩展其他数据库分区的责任,以配置其他数据库分区来存储要被丢弃的数据行。从数据库分区中移除数据行。提供本
发明内容以便以简化的形式介绍将在以下的详细描述中进一步描述的一些概念。本
发明内容并非旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。本发明的附加特征和优点将在以下描述中叙述,且其一部分根据本描述将是显而易见的,或可通过对本发明的实践来获知。本发明的特征和优点可通过在所附权利要求书中特别指出的工具和组合来实现和获得。本发明的这些和其他特征将通过以下描述和所附权利要求书变得更加显而易见,或可通过对下文中所述的本发明的实践来领会。为了描述可获得本发明的上述和其他优点和特征的方式,将通过参考附图中示出的本发明的具体实施例来呈现以上简要描述的本发明的更具体描述。可以理解,这些附图仅描述本发明的典型实施例,从而不被认为是对其范围的限制,本发明将通过使用附图用附加特征和细节来描述和说明,在附图中图IA和IB示出便于分隔数据库分区的示例计算机体系结构。图2A示出用于分隔数据库分区的示例方法的流程图。图2B示出用于分隔数据库分区的示例方法的流程图。图3A和;3B示出便于合并数据库分区的示例计算机体系结构。图4A示出用于合并数据库分区的示例方法的流程图。图4B示出用于合并数据库分区的示例方法的流程图。图5A和5B示出便于从分布式数据库丢弃行的示例计算机体系结构。图6示出用于从分布式数据库丢弃行的示例方法的流程图。具体实施例方式本发明涉及用于对在线数据库进行分区的方法、系统和计算机程序产品。在一些实施例中,数据库分区被分成多个数据库分区。接收到分区分隔指示。分区分隔指示指明了如何将数据库分区至少分成第一部分和第二部分以便分隔数据库分区中存储的数据行。执行分隔操作以便根据分区分隔指示来分隔数据库分区,而数据库分区同时保持在线。分隔包括建立第一新数据库分区以存储和所指定的联合键值的子集的第一部分相对应的数据行;以及建立第二新数据库分区以存储和所指定的联合键值的子集的第二部分相对应的数据行。建立从数据库分区到第一和第二新数据库分区的每一个的复制流和更新流中的一个或多个。对于来自数据库分区的一个或多个数据行的每一个,对数据行进行过滤以便标识第一新数据库分区和第二新数据库分区之一作为数据行的适当目的地。根据过滤结果,一个或多个数据行中的每一个以及对它们的更新通过适当的流从该数据库分区被转移至该适当目的地数据库。在其他实施例中,各数据库分区被合并。接收到分区合并指示。分区合并指示表明了如何将存储在多个数据库分区中的数据行合并在一起。执行合并操作以便根据分区合并指示将数据行合并在一起,而同时多个数据库分区保持在线。合并包括建立新数据库分区以存储数据行。从多个数据库分区的每一个到新数据库分区建立复制流和更新流中的一个或多个。每个数据行以及对它们的更新通过合适的流从多个数据库分区被转移至新数据库分区。在进一步的实施例中,从分布式数据库系统处丢弃多个数据行。接收到分区丢弃指示。分区丢弃指示表明了如何丢弃跨多个数据库分区存储的一个或多个数据行。执行丢弃操作以便根据分区丢弃指示来丢弃数据行,而同时多个数据库分区保持在线。丢弃包括对于要丢弃一个或多个数据行的每一个数据库分区,访问要从数据库分区丢弃的数据行的标识符。扩展其他数据库分区的责任,以配置其他数据库分区来存储要被丢弃的数据行。从数据库分区中移除数据行。本发明的各实施例可包括或利用专用或通用计算机,该专用或通用计算机包括诸如例如一个或多个处理器和系统存储器等计算机硬件,如以下更详细讨论的。本发明范围内的各实施例还包括用于携带或存储计算机可执行指令和/或数据结构的物理介质和其他计算机可读介质。这些计算机可读介质可以是通用或专用计算机系统能够访问的任何可用介质。存储计算机可执行指令的计算机可读介质是计算机存储介质(设备)。携带计算机可执行指令的计算机可读介质是传输介质。由此,作为示例而非限制,本发明的各实施例可包括至少两种完全不同类型的计算机可读介质计算机存储介质(设备)和传输介质。计算机存储介质(设备)包括RAM、ROM、EEPROM、CD-ROM或其他光盘存储、磁盘存储或其他磁存储设备、或可用于存储计算机可执行指令或数据结构形式的且可由通用或专用计算机访问的所需程序代码装置的任何其他介质。“网络”被定义为允许在计算机系统和/或模块和/或其他电子设备之间传输电子数据的一个或多个数据链路。当信息通过网络或另一个通信连接(硬连线、无线、或者硬连线或无线的组合)传输或提供给计算机时,该计算机将该连接适当地视为传输介质。传输介质可包括可用于携带计算机可执行指令或数据结构形式的且可由通用或专用计算机访问的所需程序代码装置的网络和/或数据链路。上述的组合也应被包括在计算机可读介质的范围内。此外,在到达各种计算机系统组件之后,计算机可执行指令或数据结构形式的程序代码装置可从传输介质自动传输到计算机存储介质(设备)(或反之亦然)。例如,通过网络或数据链接接收到的计算机可执行指令或数据结构可被缓存在网络接口模块(例如,“NIC”)内的RAM中,然后最终被传输到计算机系统RAM和/或计算机系统处的较不易失性的计算机存储介质(设备)。因而,应当理解,计算机存储介质(设备)可被包括在还利用(甚至主要利用)传输介质的计算机系统组件中。计算机可执行指令例如包括,当在处理器处执行时使通用计算机、专用计算机、或专用处理设备执行某一功能或某组功能的指令和数据。计算机可执行指令可以是例如二进制代码、诸如汇编语言之类的中间格式指令、或甚至源代码。尽管用结构特征和/或方法动作专用的语言描述了本主题,但可以理解,所附权利要求书中定义的主题不必限于上述特征或动作。相反,上述特征和动作是作为实现权利要求的示例形式而公开的。本领域的技术人员将理解,本发明可以在具有许多类型的计算机系统配置的网络计算环境中实践,这些计算机系统配置包括个人计算机、台式计算机、膝上型计算机、消息处理器、手持式设备、多处理器系统、基于微处理器的或可编程消费电子设备、网络PC、小型计算机、大型计算机、移动电话、PDA、寻呼机、路由器、交换机等等。本发明也可在其中通过网络链接(或者通过硬连线数据链路、无线数据链路,或者通过硬连线和无线数据链路的组合)的本地和远程计算机系统两者都执行任务的分布式系统环境中实施。在分布式系统环境中,程序模块可位于本地和远程存储器存储设备中。本发明的各实施例包括数据库联合的使用。数据库联合是联合方案所定义的一个或多个联合成员(分区)的集合。所述联合方案定义下述一个或多个项(多个)联合键、他们的(多个)数据类型以及分布类型(范围、散列...)。每个联合可以具有其自身的联合方案。因此,联合的每个成员可以包含一个或多个联合单元(即,共享同一公用密钥的数据)。联合成员在应用模型中可见,并且通过他们的联合键范围来标识。可以在任意数据库中创建联合。在一个数据库中可以存在许多联合,每个联合表示一个分开的表格集合,例如“所有的消费者数据”或“所有订单数据”,并且,每个联合成员可以含有完整数据集的子集。(然而,对于单个联合成员来说,也可能含有整个表格集合。)在较低级别的粒度,原子单元是对于联合键具有公用值的一个或多个表格的行集合。原子单元不能被进一步细分。一个或多个原子单元可以被组合成一个联合成员来简化管理。除了包含来自分区的或联合的表格的行之外,联合成员还可以包含其行是完整包含在所述成员内的常规(非联合的)表格。非联合的表格可以包含结合分区数据被检索的参考数据(例如产品信息(参考数据)和产品销售(由销售日期联合的))。联合成员可以是彼此物理分开的(例如在不同的机器上运行)。这样,在一个联合成员中的数据还可以与在其他联合成员处的数据物理上分开。用于一个联合成员中的联合的和非联合的表格的方案可以与其他联合成员中的表格的方案不相同。方案的分歧可以是临时的,例如将新的方案版本跨联合中的成员子集安置铺开(roll-out),并直到联合成员最终聚合在同一方案上。联合可以包括根数据库,它表示了联合的应用边界。根数据库对于连接到联合的应用是“硬衬垫(landingpad)的”或是逻辑端点。根数据库可以包含一个或多个命名的联合,每个联合具有其自身的定义联合键的联合方案。根数据库还可以包含全局数据,包括应用定义的(配置)数据、用户和密码以及角色。根数据库还可以包含联合成员的版本信息或提供分布式查询处理能力。联合还可以定义用于数据分布的分布策略以及数据类型。联合便于数据在各物理数据库间的在线复制,以及新类型的云、web和多承租人解决方案的更有效的开发。例如,本发明的各实施例还包括使用分隔、合并和丢弃操作中的一个或多个,以便在无停机时间的情况下缩放数据。例如,分隔操作可用于将数据扩展至另外的成员。另一方面,合并操作可用于将数据缩减至较少的成员。在一些实施例中,发布联合创建命令以创建数据库联合。联合创建命令可以具有下列格式CREATEFEDERATIONfederationname{<federation_distribution_scheme>}〈federationdistribution_scheme>::=(〈federation—distribution〉”.η)〈federation—distribution〉::=distribution—name〈data—type〉RANGE|HASH|ROUNDROBIN<data_type>::=[type—name.]type_name自变量federation_name它是联合的名称。联合名称在SQLAzure服务器内必须是唯一的,并且符合标识符规则且具有sysname类型。type_name它指定了联合键类型的类型名称。在版本1中,仅支持单列。可以是二进位、唯一标识符或二进制变量(η)之一。其中N可高达900。distribution_name指定了联合键的名称。该名称是引用联合键的标识符,并且在诸如(createtable.·federated0ν(··)(创建表格···启用联合(··))或usefederation(使用联合)等)这样的联合相关语句需要引用联合键时被引用。distributioruname必须符合标识符规则并且是sysname类型。rangeIhashIroundrobin指定了分区类型。当创建联合时,也可以创建覆盖所指定的数据类型的完全范围的第一分区。该联合成员作为常规数据库可见。通过范围分布,rangejow和rangejiigh可以表示联合成员的边界值。在单个联合成员的情况下,rangejow表示联合键数据类型的域的最小值,range_high是联合键数据类型的域的最大值。联合键数据类型用于指定所允许的值的域。对于覆盖该域的最小值的联合成员,rangejow被设为在联合键数据类型中允许的最小值。对于覆盖该域的最大值的联合成员,range_high被设为在联合键数据类型中允许的最大值。Range_low值可包括在该范围内。例如,如果联合成员具有值为100的range_low,则值100在联合成员中。另一方面,RangeJiigh可以在范围之外。例如,如果联合成员具有值为200的range_high,则值200不包括在联合成员中。对于包含范围最大值的联合成员,range_high值可以包括在范围内。通常,数据库联合可以通过改变联合来重新分布(重新分区)它们的数据。数据的重新分布通过各种不同的操作而发生。例如,可以发布一改变联合命令,使分隔、合并或丢弃操作发生。在一些实施例中,改变联合命令具有以下格式ALTERFEDERATIONfederationname{SPLITAT(distribution—name=boundaryvalue,..n)IDROPAT([LOW|HIGH]distributionname=boundaryvalue,..n)IMERGEAT([LOW|HIGH]distributionname=boundaryvalue,..n)}[;]自变量boundary—value该值指定了用于重新分区操作的分开点。边界值应当是关于联合的联合键所指定的数据类型的有效值。在分隔的情况下,对于作为分隔操作的一部分创建的新的联合成员集合,该值成为range_low禾口range_high。SPLITAT(distribution_name=boundary_value)将联合成员中的数据移至2个新的目的地联合成员中。具有小于boundary—value的联合键实例的联合表格中的所有行被复制到新目的地联合成员之一。联合表格中的大于等于boundary—value的实例被复制到其它新目的地联合成员。图IA和IB示出便于分隔数据库分区的示例计算机体系结构100。参考图1A,计算机体系结构100包括分区模块101和数据库联合102。所描绘的组件中的每一个都通过诸如例如局域网(“LAN”)、广域网(“WAN”)或甚至因特网之类的网络彼此连接(或者是网络的一部分)。因此,所描绘的组件中的每一个以及任何其他连接的计算机系统及其组件都可以创建消息相关数据并通过网络交换消息相关数据(例如,网际协议(“IP”)数据报和利用IP数据报的其他更高层协议,诸如传输控制协议(“TCP”)、超文本传输协议(“HTTP”)、简单邮件传输协议(“SMTP”)等)。如图所示,数据库联合102包括分区103A、10;3B和103C。一些表格可以联合,使得这些表格跨分区103A、10;3B和103C分布。例如,联合表格104A、104B和104C各自可以是同一表格的分布式部分。跨联合表格104A、104B和104分布的每一数据行可由(例如,联合)键值来标识。每个分区103A、10;3B和103C可以负责键值的一个子集。在一些实施例中,每个分区103A、10;3B和103C负责连续的键值范围。然而,可以使用用于分配键值子集职责的其他机制,并且键值子集内的键值无需是连续的。其他表格不被联合。例如,分区103A、10;3B和103C分别包含非联合的表格106、107和108。非联合的表格可以存储参考数据或其他类型的非联合数据。图2A示出用于分隔数据库分区的示例方法200的流程图。方法200将参考计算机体系结构100的组件和数据来描述。方法200包括以下动作接收表明如何将所指定的联合键值的子集至少分成第一部分和第二部分的分区分隔指示以便分隔存储在数据库分区中的数据行(动作201)。例如,分区模块101可以接收分区分隔指示109。分区分隔指示109包括键值部分181(键值子集183的一个子集)和键值部分182(键值子集183的另一个子集)。键值部分181和182共同指明如何分割键值子集183以便分隔存储在分区103A内的数据行。方法200包括,根据分区分隔指示并且在数据库分区保持在线的同时,执行分隔操作以便分隔数据库分区的动作(动作202)。例如,分区模块101可以执行分隔操作112以便根据分区分隔指示109来分隔分区数据库分区103A。分区103A可以在分隔操作112的执行期间保持在线。动作202可以包括建立第一新数据库分区以存储和所指定的联合键值的子集的第一部分相对应的数据行的动作(动作203)。例如,数据库联合101可以建立分区103A1以存储和键值部分181相对应的数据行。动作202可以包括建立第二新数据库分区以存储和所指定的联合键值的子集的第二部分相对应的数据行的动作(动作204)。例如,数据库联合101可以建立分区103A2以存储和键值部分182相对应的数据行。动作202可以包括建立从数据库分区到第一和第二新数据库分区的每一个的动作(动作205)。例如,数据库联合101可以建立从分区103A到分区103A1的复制流191。类似地,数据库联合101可以建立从分区103A到分区103A2的复制流192。动作202也可以包括在分区103A处配置过滤器113。过滤器113可用于基于和数据行相对应的联合键值为联合表格104A中的每个数据行确定目的地分区。数据行可以被过滤用于复制到分区103A1或103A2,或者被过滤以保持在分区103A。例如,过滤器113可以被配置成选择具有在键值部分181中的联合键值的数据行供复制到分区103A1。过滤器113可以被配置成选择具有在键值部分182中的联合键值的数据行供复制到分区103A2。过滤器113可以被配置成选择具有在键值部分181和182之外的联合键值的数据行以保留在分区103A。现在转至图1B,联合表格104A包括行114A-114D。对于来自数据库分区的一个或多个数据行的每一个,动作202可以包括以下动作过滤该数据行以便将第一新数据库分区和第二新数据库分区之一标识为该数据行的合适的目的地数据库分区,所述过滤基于在所指定的联合键值的子集的第一部分或第二部分中的数据行的联合键值(动作206)。动作202可以包括根据过滤结果,通过合适的复制流将一个或多个数据行的每一个从数据库分区复制到合适的目的地数据库的动作(动作207)。例如,对于每一个行114A_114D(以及联合表格104A中的其他行),过滤器113可以将分区103A1和103A2之一标识为该行的合适目的地。过滤器113可以基于键值部分181或键值部分182中的键列178中的联合键值来进行过滤。每个经过滤的行可以分别通过复制流191或192被复制到分区103A1或分区103A2。例如,过滤器113可以基于键值部分181中包括的联合键值116A和116C,将分区104A1标识为行114A和114C的合适目的地。行114A和114C可以通过复制流191被复制到分区103A1,并且被存储在联合表格104A1中。类似地,过滤器113可以基于键值部分182中包括的联合键值116B和116D,将分区104A2标识为行114B和114D的合适目的地。行114B和114D可以通过复制流192被复制到分区103A2,并且被存储在联合表格104A2中。在完成分隔操作112的执行之前,可以更新分区103A的一个或多个行内的值。数据库联合102可以使用更新流来补偿更新。图2B示出用于分隔数据库分区的示例方法250的流程图。方法250将参考计算机体系结构100的组件和数据来描述。方法250可以包括建立从数据库分区到第一和第二新数据库分区的每一个的更新流的动作(动作251)。例如,可以建立从分区103A到分区103A1的更新流193。可以建立从分区103A到分区103A2的更新流194。方法250包括在完成分隔命令之前、接收对数据库分区中的一数据行的传入更新的动作(动作252)。例如,分区103A可以在分隔操作112完成之前接收更新197。更新197改变行114C中的值和行114B中的值。方法250包括以下动作过滤对数据行的更新以便将第一新数据库分区和第二新数据库分区之一标识为用于该数据行的更新的合适目的地数据库分区,所述过滤基于在所指定的联合键值的子集的第一部分或第二部分中的数据行的联合键值。方法250包括根据过滤结果、通过合适的更新流将对数据行的更新从数据库分区复制到合适的目的地数据库分区的动作(动作254)。例如,过滤器113可以基于键值部分181中包括的联合键值116C,将分区104A1标识为对行114C的更新的合适目的地。对行114C的更新可以通过更新流193被复制到分区103A1,并且被存储在联合表格104A1中。对行114C的更新可以覆写从118C到118N的列数据1中的值。类似地,过滤器113可以基于键值部分182中包括的联合键值116B,将分区104A2标识为对行114B的更新的合适目的地。对行114D的更新可以通过更新流194被复制到分区103A2,并且被存储在联合表格104A2中。对行114B的更新可以覆写从117B到117Z的列数据中的值。因而,联合表格104A中的数据行可以基于联合键值在联合表格104A1和104A2之间分隔(一些行可能保持在联合表格104A处)。更新流可用于将接收到的更新传播至联合表格104A1和104A2直到分隔操作112完成。非联合表格106可以完整地被复制到分区103A1和103A2的每一个。在一些实施例中,分隔操作具有类似于以下的格式ALTERFEDERATIONfederationnameSPLIT[AT(distribution一name=boundery_value,..n)]}SPLITAT(boundary_value)将联合成员中的数据移到两个新目的地联合成员中。在联合表格中具有小于boundary—value的联合键实例的联合表格中的行被复制到新目的地联合成员之一。在联合表格中具有大于等于boundary—value的联合键实例的联合表格中的行被复制到另一个新目的地联合成员。当SPLIT正在执行时,所有常规的(即,非联合的)对象方案和系统元数据从正在经历SPLIT操作的源联合成员复制到目的地联合成员。该列表包括以下的一个或多个用户、角色、对象许可、sprocs、视图、联合表格或参考表格、索引及更多。所有的联合表格方案可以从正在经历SPLIT操作的源联合成员被复制到目的地联合成员。联合表格中的用户数据可以基于相应的目的地联合成员的边界值被移动至目的地联合成员。其他对象中的用户数据可以被克隆并被移动至目的地联合成员。当SPLIT完成时,新目的地联合成员包含来自源联合成员的所有最新的数据。源联合成员可以被保持或丢弃。图3A和;3B示出便于合并数据库分区的示例计算机体系结构100。参考图3A,计算机体系结构300包括分区模块301和数据库联合302。所描绘的组件中的每一个都通过诸如例如局域网(“LAN”)、广域网(“WAN”)或甚至因特网之类的网络彼此连接(或者是网络的一部分)。因此,所描绘的组件中的每一个以及任何其他连接的计算机系统及其组件都可以创建消息相关数据并通过网络交换消息相关数据(例如,网际协议(“IP”)数据报和利用IP数据报的其他更高层协议,诸如传输控制协议(“TCP”)、超文本传输协议(“HTTP”)、简单邮件传输协议(“SMTP”)等)。如图所示,数据库联合302包括分区303A、3(X3B和303C。一些表格可以联合,使得这些表格跨分区303A、30和303C分布。例如,联合表格304A、304B和304C各自可以是同一表格的分布式部分。跨联合表格304A、304B和304分布的每一数据行可由(例如,联合)键值来标识。每个分区303A、30;3B和303C可以负责键值的一个子集。在一些实施例中,每个分区303A、3(X3B和303C负责连续的键值范围。然而,可以使用用于分配键值子集职责的其他机制,并且键值子集内的键值无需是连续的。其他表格不被联合。例如,分区303A、30;3B和303C分别包含非联合的表格306、307和308。非联合的表格可以存储参考数据或其他类型的非联合数据。图4A示出用于合并数据库分区的示例方法400的流程图。方法400将参考计算机体系结构300的组件和数据来描述。方法400包括以下动作接收表明如何组合多个所指定的联合键值的子集的分区合并指示,以便将存储在多个数据库分区中的数据行合并在一起(动作401)。例如,分区模块301可以接收分区合并指示309。分区合并指示309包括键值子集381和键值子集382。分区合并指示309可以表明如何组合键值子集381和键值子集382,以便将分区303A、303B和303C中存储的数据行合并在一起。方法400包括以下动作,根据分区合并指示并且在多个数据库分区保持在线的同时,执行合并操作来将多个数据库分区合并在一起(动作402)。例如,分区模块301可以根据分区合并指示309执行合并算子312,以便将来自分区30的数据行与来自分区303C的数据行合并。分区30和303C可以在合并操作312的执行期间保持在线。方法400可以包括建立新数据库分区以存储和多个所指定的联合键值的子集相对应的数据行的动作(动作40;3)。例如,数据库联合可以建立分区303D以便存储和(联合表格304D中的)键值子集381和382相对应的数据行。方法400包括建立从多个数据库分区的每一个到新数据库分区的复制流的动作(动作404)。例如,数据库联合301可以建立从分区3(X3B到分区303D的复制流391。类似地,数据库联合301可以建立从分区303C到分区303D的复制流392。现在转至图;3B,联合表格304B包括行314A-314B。类似地,联合表格304C包括行314C和314D。键列378存储数据行的联合键值。例如,行314A、314B、314C和314D分别对应于键值316A、316B、316C和316D。键值316A和316B可以被包括在键值子集381中。类似地,键值316C和316D可以被包括在键值子集382中。方法400包括通过合适的复制流将一个或多个数据行从多个数据库分区转移到新数据库分区的动作(动作405)。例如,行314A和314B可以通过复制流391从分区3(Χ3Β复制到分区303D。类似地,行314C和314D可以通过复制流392从分区303C复制到303D。因而,行314A-314D被合并到联合表格304D中。在完成合并操作312的执行之前,可以更新分区30和/或303D的一个或多个行内的值。数据库联合302可以使用更新流来补偿更新。图4B示出用于合并数据库分区的示例方法450的流程图。方法450将参考计算机体系结构300的组件和数据来描述。方法450包括建立从多个数据库分区的每一个到新数据库分区的更新流的动作(动作451)。例如,数据库联合301可以建立从分区3(X3B到分区303D的更新流393。类似地,数据库联合301可以建立从分区303C到分区303D的更新流394。方法450包括接收对存储在多个数据库分区之一中的一数据行的传入更新的动作(动作452)。例如,分区3(X3B可以在合并操作312完成之前接收更新397。更新397改变行314A中的值。类似地,分区303C可以在合并操作312完成之前接收更新398。更新398改变行314D中的值。方法450包括通过合适的更新流来转移对新数据库分区中的相应数据行的更新的动作(动作45;3)。例如,分区3(X3B可以通过更新流393将对行314A的更新复制到分区303D。对行314A的更新可以覆写从317A到317P的列数据中的值。类似地,分区303C可以通过更新流394将对行314D的更新复制到分区303D。对行314D的更新可以覆写从318P到318T的列数据1中的值。因而,联合表格304B和304C中的数据行可以基于联合键值被合并到联合表格304D中(一些行可能保持在联合表格304B和304C处)。更新流可用于将接收到的更新传播至联合表格304D直到合并操作312完成。非联合表格307和308可以完整地被复制到分区303D。在一些实施例中,合并操作具有类似于以下的格式ALTERFEDERATIONfederation_name{|MERGE[AT([LOW|HIGH]distribution_name=boundary_value_range,..n)}MERGEAT(boundary_value_range)将跨两个或更多联合成员分布的boundary—value(边界值)范围内的数据移动到单个新目的地联合成员中。基于配置,可以在合并中包括或者从合并中排除具有处在b0undary_value_range边缘的联合键实例的联合表格中的行。当MERGE操作正在执行时,所有常规的(S卩,非联合的)对象方案和系统元数据从正在经历MERGE操作的源联合成员复制到目的地联合成员。该列表包括以下的一个或多个用户、角色、对象许可、sprocs、视图、联合表格或参考表格、索引及更多。所有的联合表格方案可以从正在经历MERGE操作的源联合成员被复制到目的地联合成员。联合表格中的用户数据可以基于相应的目的地联合成员的边界值被移动至目的地联合成员。其他对象中的用户数据可以被克隆并被移动至目的地联合成员。当MERGE完成时,新目的地联合成员包含来自源联合成员的所有最新的数据。源联合成员可以被保持或丢弃。图5A和5B示出便于从分布式数据库丢弃行的示例计算机体系结构500。参考图5A,计算机体系结构500包括分区模块501和数据库联合502。所描绘的组件中的每一个都通过诸如例如局域网(“LAN”)、广域网(“WAN”)或甚至因特网之类的网络彼此连接(或者是网络的一部分)。因此,所描绘的组件中的每一个以及任何其他连接的计算机系统及其组件都可以创建消息相关数据并通过网络交换消息相关数据(例如,网际协议(“IP”)数据报和利用IP数据报的其他更高层协议,诸如传输控制协议(“TCP”)、超文本传输协议(“HTTP”)、简单邮件传输协议(“SMTP”)等)。如图所示,数据库联合502包括分区503A、50;3B和503C。联合表格504A、504B和504C各自可以是同一表格的分布式部分。跨联合表格504A、504B和504分布的每一数据行可由(例如,联合)键值来标识。每个分区503A、5(X3B和503C可以负责键值的一个子集。在一些实施例中,每个分区503A、50和503C负责连续的键值范围。然而,可以使用用于分配键值子集职责的其他机制,并且键值子集内的键值无需是连续的。联合表格504A存储和键值504A1和504A2相对应的数据行。联合表格504B存储和键值504B1、504B2和504B3相对应的数据行。图6示出用于从分布式数据库丢弃行的示例方法600的流程图。方法600将参考计算机体系结构500的组件和数据来描述。方法600包括以下动作接收表明如何处理多个所指定的联合键值的子集中的一个或多个中的至少一些的分区丢弃指示,以便丢弃存储在多个数据库分区中的相应数据行(动作601)。例如,分区模块501可以接收分区丢弃指示509。分区丢弃指示509可以表明如何处理键值581以丢弃存储在联合表格504A和504B中的相应数据行。键值581包括键值504A2.504B1和504B3。方法600包括以下动作根据分区丢弃指示并且在多个数据库分区保持在线的同时、执行丢弃操作以丢弃相应的数据行(动作60。例如,分区模块501可以根据分区丢弃指示509来执行丢弃操作512,以丢弃相应的行。分区503A、50;3B和503C可以在丢弃操作512的执行期间保持在线。现在转至图5B,联合表格504A包括行514A-514C、514T和514P。类似地,联合表格504C包括行514D-514I和514S。键列378存储数据行的联合键值。例如,行514A-514C、514T和514P分别对应于键值516A-516C、516T和516P。类似地,行514D-514I和514S分别对应于键值516D-516I和516S。键值516C和516T被包括在键值504A2。类似地,键值516D被包括在键值504B1。同样,键值516G-516I被包括在键值504B3。动作602包括,对于要丢弃相应数据行的每个数据库分区,访问要从数据库分区被丢弃的数据行的联合键值的动作(动作603)。例如,数据库联合502可以分别访问要从分区503A丢弃的行514C和514T的联合键值516C和516T。类似地,数据库联合502可以分别访问要从分区50丢弃的行514D、514G、514H和5141的联合键值516D、516G、516H和5161。动作602包括,对于要丢弃相应数据行的每个数据库分区,扩展其他数据库分区的所指定的联合键值的子集,以配置其他数据库分区来存储和所访问的联合键值相对应的数据行(动作604)。例如,数据库联合502可以扩展分区503C的联合值的子集,以配置联合表格504C来存储行514C、514T、514D、514G、514H和5141。行514C、514T、514D、514G、514H和5141的列数据和数据1中的值可以留空。动作602包括,对于要丢弃相应数据行的每个数据库分区,从数据库分区移除相应的数据行的动作(动作60幻。例如,数据库联合502可以从联合表格504A移除行514C和514T。类似地,数据库联合502可以从联合表格504B移除行514D、514G、514H和5141。在一些实施例中,丢弃操作具有类似于以下的格式ALTERFEDERATIONfederationnameDROP[AT([LOW|HIGH}distributionname二boundary_value,..n)]}丢弃操作可用于将行移至新分区并且从以前的分区联合中丢弃行。DROPAT丢弃行,并且扩展相邻的联合成员范围以覆盖丢弃所创建的间隙。丢弃操作可以既影响被丢弃的联合成员,又影响被扩展以覆盖间隙的相邻联合成员。边界值可以对应于联合中的现有范围值。更具体地,DROPAT(LOWdistribution_name=boundary_value)将一个联合成员丢弃至覆盖边界值的较低值集合的数据库,并且将该联合成员扩展到边界值的右边。例如,对于覆盖0,100(dbl)和100,200(_和200,300(db3)的联合成员列表1.发出ALTERFEDERATIONfedlDROPAT(LOWcustomer_id=200)2.丢弃db2和100,200之间的所有数据。3.保持的联合成员集合为0,100(dbl)和100,300(db4)4.db4基本包含新范围以及来自联合成员db3的所有数据和方案。另一方面,DROPAT(HIGHdistribution_name=boundary_value)Mf联合成员丢弃到边界值的HIGH,并将联合成员扩展至边界值的较低侧。例如,对于覆盖0,100(dbl)和100,200(_和200,300(db3)的联合成员列表1.发出ALTERFEDERATIONfedlDROPAT(LOWcustomer_id=200)2.丢弃db2和200,300之间的所有数据。3.保持的联合成员集合为0,100(dbl)和100,300(db4)4.db4基本包含新范围以及来自联合成员db2的所有数据和方案。根据LOW或HIGH选项,可以丢弃相应的联合成员,并且扩展剩余的联合成员以覆盖全范围。当DROP操作完成时,剩余的联合成员覆盖全范围而没有边界值。剩余的联合成员可以被重新命名。联合也可以使用丢弃联合操作被完全丢弃。可以发出丢弃联合命令,使丢弃联合操作发生。丢弃联合命令可以具有下列格式DROPFEDERATIONfederation_name丢弃联合清除了关于联合的元数据、逻辑对象,并且丢弃其联合成员。如前所述,联合可以在任何常规数据库中创建。包含联合的数据库也称为联合根。联合根可以维持用于联合的元数据。联合根也可用于存储中央化的信息、应用配置信息或全局参考数据。联合成员可以被视为联合的部分数据的容器。联合成员数据可以通过物理数据库来备份。一个联合中的所有联合成员的集合表示了表格集合的完整数据集,诸如“所有消费者”和“所有定单”。然而,每个联合成员包含完整数据集(它可以或者可以不跨成员均勻地分布)的一个子集。在联合成员中可以支持诸如DDL、DML操作和常规数据库的查询能力这样的编程表面操作。本发明可被具体化为其他具体形式而不背离其精神或本质特征。所描述的实施例在所有方面都应被认为仅是说明性而非限制性的。因此,本发明的范围由所附权利要求书而非前述描述指示。落入权利要求书的等效方案的含义和范围内的所有改变被权利要求书的范围所涵盖。1权利要求1.在包括一个或多个处理器和系统存储器的计算机系统处的一种用于将数据库分区(103A)分隔成多个数据库分区(103A1、103A》的方法,所述计算机系统包括在联合数据库系统中,所述联合数据库系统被配置成存储多个数据行以及定义如何基于联合键值跨一个或多个数据库分区分布数据行的分区标准,所述多个数据行跨联合数据库系统的一个或多个数据库分区(103A、10;3B、103C)分布,每个数据行对应于用于标识数据行的一个联合键值,所述联合键值选自联合数据库系统的一组联合键值,所述计算机系统包括一个或多个数据库分区中的一个数据库分区,所述分区标准定义了所述数据库分区要存储和所指定的联合键值集合中的子集相对应的数据行,所述方法包括以下动作接收表明如何将所指定的联合键值的子集至少分成第一部分(181)和第二部分(182)的分区分隔指示(109)以便分隔存储在数据库分区(103A)中的数据行的动作;根据分区分隔指示(109)并且在数据库分区(103A)保持在线的同时,执行分隔操作(112)以便分隔数据库分区(103A)的动作,该动作包括;建立第一新数据库分区(103A1)以存储和所指定的联合键值的子集的第一部分(181)相对应的数据行的动作;建立第二新数据库分区(103A》以存储和所指定的联合键值的子集的第二部分(182)相对应的数据行的动作;建立从数据库分区(103A)到第一和第二新数据库分区(103A1、103A》的每一个的复制流(191、192)的动作;以及对于来自数据库分区的数据的一个或多个数据行(114A-114D)的每一个,过滤所述数据行以便将第一新数据库分区和第二新数据库分区之一标识为该数据行的合适的目的地数据库分区的动作,所述过滤基于在所指定的联合键值的子集的第一部分或第二部分中的数据行的联合键值;以及根据过滤结果、通过合适的复制流将一个或多个数据行(114A-114D)的每一个从数据库分区(103A)复制到合适的目的地数据库的动作。2.如权利要求1所述的方法,其特征在于,还包括建立从数据库分区到第一和第二新数据库分区的每一个的更新流的动作;在完成分隔命令之前、接收对数据库分区中的一数据行的传入更新的动作;过滤对数据行的更新以便将第一新数据库分区和第二新数据库分区之一标识为用于该数据行的更新的合适目的地数据库分区,所述过滤基于在所指定的联合键值的子集的第一部分或第二部分中的数据行的联合键值;以及根据过滤结果、通过合适的更新流将对数据行的更新从数据库分区复制到合适的目的地数据库的动作。3.如权利要求1所述的方法,其特征在于,所述建立从数据库分区到第一和第二新数据库分区中的每一个的复制流的动作包括建立到第一新数据库分区的第一复制流的动作;以及建立到第二新数据库分区的第二复制流的动作。4.如权利要求3所述的方法,其特征在于,所述将一个或多个数据行的每一个从数据库分区复制到合适的目的地数据库的动作包括通过第一复制流将数据行复制到第一新数据库分区的动作,所述数据行具有在联合键值的子集的第一部分中的联合键值。5.如权利要求1所述的方法,其特征在于,接收表明如何将所指定的联合键值的子集至少分成第一部分和第二部分的分区分隔数据的动作包括接收分区分隔数据,所述分区分隔数据表明如何将所指定的联合键值的子集分成第一部分、第二部分以及一个或多个附加部分。6.如权利要求5所述的方法,其特征在于,所述根据分区分隔指示并且在数据库分区保持在线的同时、执行分隔命令来分隔数据库分区还包括建立和所指定的联合键值的子集的一个或多个附加部分相对应的一个或多个附加新数据库分区的动作;以及建立从数据库分区到一个或多个附加数据库分区的每一个的复制流的动作。7.如权利要求6所述的方法,其特征在于,还包括对于来自数据库分区的一个或多个其他数据行的每一个,过滤所述数据行以便将一个或多个附加新数据库分区之一标识为该数据行的合适的目的地数据库分区的动作,所述过滤基于在所指定的联合键值的子集的一个或多个附加部分之一中的数据行的联合键值;根据过滤结果、通过合适的复制流将一个或多个其他数据行的每一个从数据库分区复制到合适的目的地数据库的动作。8.如权利要求1所述的方法,其特征在于,所述接收表明如何分割所指定的联合键值的子集的分区分隔指示的动作包括接收表明在哪里分割联合键值范围的分割联合键值,所述联合键值的范围包括在较低联合键值和较高联合键值之间的联合键值。9.在包括一个或多个处理器和系统存储器的计算机系统处的一种用于合并数据库分区(30;3B,303C)的方法,所述计算机系统包括在联合数据库系统中,所述联合数据库系统被配置成存储多个数据行以及定义如何基于联合键值跨一个或多个数据库分区分布数据行的分区标准,所述多个数据行跨联合数据库系统的多个数据库分区(303A、30;3B、303C)分布,每个数据行对应于用于标识数据行的一个联合键值,所述联合键值选自联合数据库系统的一组联合键值,所述分区标准包括定义多个数据库分区的每一个要存储和联合键值集合的一个不同的所指定的子集相对应的数据行,所述方法包括接收表明如何组合多个所指定的联合键值的子集的分区合并指示(309),以便将存储在多个数据库分区(303B、303C)中的数据行合并在一起;按照分区合并指示(312)并且在多个数据库分区保持在线的同时,执行合并操作以便将多个数据库分区(30;3B,303C)合并在一起的动作,该动作包括建立新数据库分区(303D)以存储和多个所指定的联合键值的子集相对应的数据行的动作;建立从多个数据库分区(30;3B,303C)的每一个到新数据库分区(303D)的复制流(391,392)的动作;以及通过合适的复制流(391,39将一个或多个数据行(314A-314D)从多个数据库分区(303B,303C)转移到新数据库分区(303D)的动作。10.如权利要求9所述的方法,其特征在于,还包括建立从多个数据库分区的每一个到新数据库分区的更新流的动作;接收对存储在多个数据库分区之一中的一数据行的传入更新的动作;以及通过合适的更新流来转移对新数据库分区中的相应数据行的更新的动作。11.如权利要求10所述的方法,其特征在于,所述接收表明如何组合多个所指定的联合键值的子集的分区合并指示的动作包括接收要被组合成联合键值组合范围中的多个不同范围的联合键值的指示,所述多个不同范围的联合键值的每一个对应于多个数据库分区之一。12.在包括一个或多个处理器和系统存储器的分布式数据库系统处的一种用于从分布式数据库系统丢弃数据行的方法,所述分布式数据库还包括在联合中的多个数据库分区,所述多个数据库分区包括第一数据库分区(503A)和第二数据库分区(50),所述联合被配置成存储多个数据行,每个数据行由联合键值标识,使得联合存储了联合键值集合的数据,所述多个数据库分区中的每个被配置成存储具有在所指定的联合键值集合的子集中的联合键值的任何数据行,所述方法包括接收表明如何处理多个所指定的联合键值的子集中的一个或多个中的至少一些的分区丢弃指示(509),以便丢弃存储在多个数据库分区(503A,50;3B)中的相应数据行的动作;根据分区丢弃指示(509)并且在多个数据库分区(503A,503B)保持在线的同时,执行丢弃操作(512)以便丢弃相应数据行的动作,包括对于要丢弃相应数据行的每一个数据库执行以下动作访问要从数据库分区被丢弃的数据行的联合键值(504A2,504B1,504B;3)的动作;扩展其他数据库分区(503C)的所指定的联合键值的子集以配置其他数据库分区来存储对应于所访问的联合键值的数据行的动作;以及从数据库分区中移除相应的数据行的动作。13.如权利要求12所述的方法,其特征在于,接收表明如何处理多个所指定的联合键值的子集中的一个或多个中的至少一些以丢弃存储在所述多个数据库分区中的对应的数据行的分区丢弃指示的动作包括接收表明要丢弃相应的数据行的一个或多个联合键值范围。14.如权利要求13所述的方法,其特征在于,所述访问要从数据库分区被丢弃的数据行的联合键值的动作包括访问来自一个或多个联合键值范围的联合键值的动作。15.如权利要求14所述的方法,其特征在于,所述扩展其他数据库分区的所指定的联合键值的子集的动作包括扩展其他数据库分区的联合键值范围的动作。全文摘要本发明涉及在线数据库的分区。本发明涉及用于对在线数据库进行分区的方法、系统和计算机程序产品。诸如SPLIT、MERGE和DROP这样的在线数据库操作用来改变联合数据库中的分区布局。SPLIT操作跨多个其他分区来分隔一个分区处的行。MERGE操作将多个分区处的行移至一个分区中。DROP操作将数据行的职责从一个分区转移至另一个分区,然后从该一个分区中丢弃行。文档编号G06F17/30GK102521234SQ20111035594公开日2012年6月27日申请日期2011年10月27日优先权日2010年10月28日发明者A·卡尔汉,A·金博尔,C·比伊扣格鲁,I·切里,J·D·克拉克,J·哈默,L·诺维克,M·T·弗里德曼,S·O·沃蒂莱宁,T·塔留斯,T·彼得罗相申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1