超无共享并行数据库的制作方法

文档序号:6655168阅读:272来源:国知局

专利名称::超无共享并行数据库的制作方法
技术领域
:本发明涉及并行数据库系统,特别涉及无共享并行数据库系统。技术背景利用无共享体系结构设计的并行数据库系统包括多个节点,每个节点具有其自己的处理、存储器和磁盘资源。在这些系统中,数据库的表跨系统的各个节点分布。对于数据库的查询同时并行地运行在多个节点上。无共享并行数据库系统旨在提供线性扩张,其中增加系统中节点的数量以提高性能并使得可以处理较大的数据集。但是,由于诸如查询扭曲(queryskew)等问题,传统的设计不能提供线性扩张。当两个相对于同一数据库的且复杂程度相当的不同查询在执行时所花费的时间差异很大时就发生查询扭曲。在传统的无共享并行数据库中,查询扭曲的发生是由于在处理某些查询时需要在节点之间传输大量数据,而在处理其他査询时只有很少的数据传输或没有数据传输。这种数据传输降低了查询处理的速度,并在传统系统中造成了瓶颈。例如,在一个有四个节点的传统系统中,数据库表通常按每个表的四分之一等量分布在每个节点上。典型的数据库查询包括了一个或多个"联结(join)",该联结要对数据库的表进行扫描,査找一个表的主码(primarykey)和另一个表的外码(foreignkey)之间的匹配。为了处理带有两个数据表的联结,每个节点都必须将其所含一个数据表的一部分传输到另外的节点。依据要联结哪些数据表以及查询中包含多少联结,这种数据传输会耗费相当长的时间,因此延迟了査询的处理。随着数据集的不断扩大和査询会话的增加,查询扭曲会使系统的性能日益降低。由于这种问题的本质所限,在这种传统的系统中增加额外的节点并不能缓解这种査询处理的瓶颈。因此,需要一种经过改进可以减轻查询扭曲的无共享并行数据库系统。此外,该经过改进的系统应减少系统操作所需要的管理开支,并应提供安全故障备援保护。
发明内容本该发明通过提供一种超无共享并行数据库系统来解决上述的传统无共享并行数据库系统的缺陷。本发明的超无共享并行数据库系统对数据库的表进行分割并且使之分布于多个辅节点上,这样数据库的查询可以并行地处理,而不象现有技术那样在节点之间做大量的数据传输。这种数据库依照与数据库模式结构相关的一组规则以及表的相对规模来分布,本发明通过减少网络通信量及所造成的査询扭曲在很大程度上提高了系统的性能。对于一个特定的数据库,事实表(facttable)与一个维度表(dimensiontable)都根据公共码(commonkey)来分割,并跨多个辅节点分布。数据库中小的维度表被复制到系统中所有的辅节点上。其余的维度表跨各辅节点分割,又被复制在所有的辅节点上。这样可使数据库系统在执行大部分查询时不会在各辅节点之间以及主、辅节点间产生大的网络通信量。根据本发明的一方面,提供一种并行数据库系统,该系统包括主节点和多个辅节点;包括了事实表和维度表的数据库跨该数据库系统的各辅节点分布。为了分布数据库的表,事实表和第一维度表跨各辅节点分割。其余的维度表被复制到每一个辅节点,并且如果它们具有最小长度,它们也跨各辅节点分割。事实表和第一维度表优选按公共码来分割。其余的维度表可以有选择地跨系统的各辅节点按行或按列分割。对数据库的查询可以被转换成至少一个子査询,该子査询可以由并行数据库系统中的各辅节点执行,而无需在辅节点之间的传输数据。依据本发明的另一个方面,该并行数据库高速缓存该数据库系统产生的查询结果。主节点优选包含一个査询高速缓存用来高速缓存主节点和各辅节点产生的查询结果,而每个辅节点都包含查询高速缓存用以高速缓存各个辅节点的子查询结果。根据本发明的另一方面,该数据库中每个辅节点都分配有一个或多个故障备援伙伴。除了储存有自己的表之外,每个故障备援伙伴都储存有其故障备援伙伴的全部或部分数据集。当某个辅节点发生故障时,本想在该故障辅节点执行的子查询由故障备援伙伴代替该故障辅节点来执行。上述的本发明提供了一种高效、可靠的并行数据库系统。在数据库査询处理中消除了查询扭曲,因此可以使数据库接近线性地扩张。在查询所针对的表没有发生此期间内改变(interveningchanges)的情况下,两级查询高速缓存减少了重复查询的处理量。最后,在各辅节点之间使用故障备援伙伴为在节点发生故障的情况下时可持续操作提供了成本有效的解决方法。以上为该发明的概述。它可以帮助快速理解本发明的本质。通过参照以下关于本发明的详细说明和相关附图可得到对本发明的优选实施例的详细和完整的理解。图1示出无共享并行数据库系统硬件体系结构的示意图。图2示出根据本发明的一个实施例的超无共享并行数据库系统软件体系结构的示意图。图3示出用来生成辅模式的过程流程图。图4示出主模式例子的示意图。图5示出排序主模式表的过程流程图。图6示出根据该发明的一个实施例将数据库的表批量加载到数据库系统的过程流程图。图7示出将数据库表加载于数据库系统中辅节点的过程流程图。图8示出将预分类数据直接批量加载于辅节点的过程流程图。图9示出当接收到外部主机系统的新语句时所执行过程的流程图。图IO示出分析和处理SQL语句的过程流程图。图11示出改变数据表的过程流程图。图12示出在数据库表中更新/插入数据的过程流程图。图13示出查询并行化过程的流程图。图14示出运行单步査询的过程流程图。图15示出在査询中将査询中的表名替换为辅模式中使用的表名的过程流程图。图16示出在辅节点执行的用来运行査询的过程流程图。图17示出多步査询过程的流程图。图18示出在主节点故障时运行故障备援过程的流程图。图19示出在辅节点故障时运行故障备援过程的流程图。具体实施方式本发明是改进的无共享并行数据库系统,称作超无共享并行数据库系统。该超无共享并行数据库系统的构造同传统的无共享并行数据库系统类似,使用至少一个主节点和多个辅节点。图1示出该超无共享并行数据库系一个实施例的硬件体系系统。图1示出数据库系统10的配置,其中包括了主节点11和辅节点12a至12n。为了使该图简明,图1只包含了一个主节点11。然而,如下面详细描述的,本发明的其他实施例在数据库系统10中包含多个主节点ll。主节点ll和辅节点12a至12n通过网络13相互连接。网络13优选是用来提高系统IO可靠性的冗余网络。可替换地,在非关键的应用中,可以使用非冗余网络。网络13可以使用本领域技术人员所熟知的任何网络技术和协议来实现。网络例子包括但不局限于以太网上的TCP/IP和Infiniband上的MPI(MessagePassingInterface,消息传递接口)。数据库系统10的每个节点都具有其自己的处理、存储器和磁盘资源。特别是主节点ll包含中央处理单元(CPU)14,随机存取存储器(RAM)15和磁盘16。辅节点12a至12n分别包括CPU17a至17n,RAM18a至18n以及磁盘19a至19n。CPU执行存储在每个磁盘中的软件模块的程序指令。CPU使用RAM作为工作空间来加载指令序列并储存和操纵数据。尽管每个节点被描绘为拥有单个CPU和单个硬盘,本领域的技术人员可以认识到每个节点可包含多个CPU和多个磁盘来改进系统的性能。例如,本发明的一个实施例使用具有双处理器和12个硬盘的磁盘阵列的节点。除了基本的软件组件,如操作系统和设备驱动程序外,数据库系统10的每个节点都要储存并执行用以执行本发明的软件模块。图2是示出数据库系统10的软件体系结构的示意图。主节点11包括流管理软件20,查询高速缓存软件21,结构化査询语言(SQL)分析软件22,辅模式生成软件23,更新/插入软件24,查询并行化/最优化软件25,多步査询执行软件26,结果分析软件28,日期分割维护软件29,批量加载软件30,数据库管理系统(DBMS)31和系统管理软件32。在使用多个主节点的实施例中,每个主节点配置有上述软件模块。每个辅节点分别包括DBMS(DBMS33a至33n)和辅管理软件34a至34n。最后,管理控制台(console)软件35安装在一个或多个主节点上,并可以通过与主节点连接的终端或通过运行于独立于数据库系统10的计算机中的客户端程序来访问。上述软件模块存储于数据库系统各节点的各磁盘上,并且由这些节点的各CPU执行。在优选实施例中,所有的节点都有相同的硬件结构,并且通过在特定节点上加载并执行相应的软件模块就可以充当主节点或可充当辅节点。根据该发明的一个实施例,各软件模块使用Java编程语言来实现。然而本领域技术人员可知道其他编程语言可用于实现所述各软件系统中的一个或多个。在本发明的操作说明中提供这些软件模块操作的细节描述。本发明较传统的无共享并行数据库设计的重大改进在于它在运行诸如联结的数据库査询时在很大程度上减少了在节点之间传输数据的需求。这种改进是通过使用一组规则来自动地跨数据库IO的各辅节点来分割、分布数据库的表。根据所生成的辅模式来执行数据库表的分割和分布。外部主机系统给数据库系统10发送定义主模式的元数据。流管理软件20接收到包含有元数据的流,并将该元数据转发到DBMS31。为了为所转发的主模式生成辅模式,DBMS31将主模式的元数据转发给辅模式生成软件23。当收到该主模式后,辅模式生成软件23应用一组规则来生成辅模式。辅模式定义了数据库的表如何跨辅节点12a至12n来分割和分布。图3的流程图示出根据该发明的一个实施例由辅模式生成软件23为生成辅模式而执行的过程。图3示出的过程中嵌入了用于生成辅模式的一组规则。在步骤S300,辅模式生成软件23接收由连接到数据库系统10的外部主机系统所提供的主模式。主模式可包括但不局限于星型模式、雪花模式及规范化模式。图4示出雪花模式的例子,是由事务处理协会(TransactionProcessingCouncil)建立的用于数据库标准基准例(benchmark)。该图示包含了一个事实表(LINEITEM,订单项)和多个维度表(ORDERS(订货),CUSTOMER(客户),PART(零件),PARTSUPP(零件供应),SUPPLIER(供应商),NATION(国家),REGION(地区))。事实表被定义成这样的表,它与其他表没有在其中它作为双亲的双亲子女关系。维度表被定义成这样的表,它与另一个表具有在其中它作为双亲的双亲子女关系。虽然图4示出的模式只包含一个事实表,但应该理解,数据库模式可包含多个事实表。在步骤S301中,排序该主模式的各表以准备生成辅模式。图5示出排序主模式表的过程。在步骤S500中,识别主模式内的所有事实表。对于每一个识别的事实表,在步骤S501从该事实表向外探索由主模式定义的各表关系以识别第一维度表并且在步骤S502排序其他相关的维度表。根据它们的位置和与该事实表的关系来排序各维度表。参见图4中示出的主模式,订单项LINEITEM表被识别为该主模式的唯一事实表。从LINEITEM向外探索,识别ORDERS、PART、PARTSUPP及SUPPLIER表作为与LINEITEM表有直接关系的表。根据诸如长度的特定判据,来排序这些第一层的表。在该第一层内第一个排序的表,如ORDER表,被确认为第一维度表。根据表的关系和特定的次序判据来排序剩余的维度表。为了使用并行数据库系统来有效处理査询,较大和较频繁存取的表应尽可能平均、高效地跨各辅节点分布。在这方面,本发明釆用了与用于传统无共享数据库系统相类似的方法。本发明的特别之处在于它利用公共码对事实表和第一维度表进行哈希分割。通过利用公共码对这些表进行哈希分割,把给定的码值映射到特定节点上,在不需要在辅节点之间传输数据的情况下,可处理联结了这两个表的査询。在图3示出的步骤S302中,对每个配对的事实表和第一维度表标记出哈希码。再次参见图4示出的主模式,订货码(ORDERKEY)被标记为哈希码,因为它是ORDERS表(第一维度表)的主码也是LINEITEM表(事实表)的外码。一旦排序了数据库表并且标记了哈希码,辅模式生成处理就准备就绪来生成辅模式。检验主模式中的每个表,在辅模式中生成一个或多个相应的表。首先在步骤S303,判定当前表是事实表还是第一维度表。事实表和第一维度表的每个跨各辅节点水平分割和分布。这样,每个辅节点负责主模式中每个事实表和每个第一维度表的水平分割的一部分。在典型的数据库中,表经常包含有大量文本。该文本通常位于表中的备注字段中。本发明的可选特征是垂直分割这样的表,将这些大的备注字段移出,并将它们置于该辅模式内单独的表中。为了确保这些行在两个表内的排列顺序完全一样,可通过使用行标识符来査找特定行的备注字段。垂直分割选择既可以设置成为默认规则,又可以通过使用来自系统管理员的输入来设置。在步骤S304判定这些表是否是垂直分割的。如果没有设定垂直分割,那么在步骤S503在辅模式内生成水平分割的表。如果设定了垂直分割,那么在步骤S306在辅模式内生成一组垂直分割的表。这些垂直分割的表为水平分割表的垂直部分,并且整体上等同于在步骤S305生成的水平分割表。根据本发明的优选实施例,把包括事实表和第一维度表在内的每个表的完整副本存储在每个辅节点上。在步骤S307,如果被检査的表既不是事实表也不是第一维度表,则在辅模式中生成完整的表。通过把这些外部维度表的每个都放置在每个辅节点上,例如外部维度表与事实表或第一维度表之间联结的査询,可以按并行方式执行,而不需要在辅节点之间传输表数据。除了每个外部维度表的完整副本,本发明的优选实施例还可选地跨各辅节点分割与分布外部维度表。通过在各辅节点包含外部维度表的完整副本和外部维度表的分割,可以优化査询来引用辅节点上的表,这将产生最佳系统性能。然而,某些数据库的表并不能产生足够的性能增益来证实这种附加的处理和存储空间的合理性。例如,跨各辅节点分割和分布较小的数据库表就可能不会带来显著的性能改进效果。相应地,本发明的这个方面是一种选择,可以设置成默认规则,或根据系统管理员的输入不分割某些外部维度表,如那些小于特定长度的表。在步骤S308判定是否要分割当前表。如果没有设置分割选项,或者该表满足分割条件,在步骤S309判定是否设置了表的垂直分割。如果垂直分割未被设置,则在步骤S310生成辅模式中的水平分割的表。如果设置了垂直分割,则在步骤S311生成辅模式中的一组垂直分割表。这些垂直分割的表为水平分割表的垂直部分,并且作为整体等同于在步骤S301生成的水平分割表。一旦检验了主模式中所有的表,并且在辅模式中建立了适当的表,所生成的辅模式被存储在DBMS31中,并在步骤S312被发送至每个辅节点。主节点和辅节点使用辅模式用以将数据库表加装载和分割至数据库系统中。用于特定数据库的数据通过主节点之一或者专门的批量加载节点来批量加载至本发明的数据库系统。图6示出向数据库系统中批量加载数据的过程。对于每个待加载的表,该过程包括在步骤S601通过在相关的表上设置适当的封锁来使辅节点准备接受收数据并在步骤S602向所有的辅节点发送用于每个表的数据。优选地,通过一个由节点间网络提供的多路传送装置把数据传送至各辅节点。在步骤S603,辅节点接收的表根据辅模式进行分割。图7示出在辅节点加载和分割表的过程流程图。为了在特定的辅节点上加载和分割表,辅管理软件34检査表的每一行。在步骤S700判定表是否完全加载。在这种情况下,在步骤S701把每一行加载至相应的表里。在步骤S702判定该表是否按分割的形式保持。如果是,在步骤S703检查每一行,判定该行是否存在于该特定辅节点的分割的表中。注意,每一辅节点负责分割后的表的行的唯一的部分。通过使用任何一种已知的用于划分和分布表行的算法来进行分割。优选地,各表跨各辅节点平均分割。根据用于分割表行的算法,判定特定辅节点是否对被检查的行负责。本发明的可选特征是利用日期分割来分割与分布数据。利用日期分割,数据库中的表根据数据内相关的日期来分割与分布。可以使用指定的规则或通过系统管理员输入控制来设置所述日期。例如,特定年、季度或者月份的日期可以存储在不同的辅节点上。存储这些经日期分割的表并用来处理日期敏感的数据库查询。日常地维护日期分割的表以去除不在相关日期范围内的数据。优选地,经日期分割的表存储在专门用于日期分割的辅节点上。然而,日期分割的表也可以与其他已分割和未分割的表一同存储在标准的辅节点上。在步骤S704,判定特定辅节点是否是日期分割的辅节点,如果是,则在步骤S705确定被检验的行是否在辅节点所存储的日期范围内。如果该辅节点是日期分割的辅节点,并且该行属于该相关日期范围内,那么在步骤S706判定该行是否基于该辅模式来垂直分割。对于垂直分割的行,在步骤S707把该行写入相应一组垂直分割表中。如果该行未被垂直分割,那么在步骤S708把该行写入相应水平分割的表中。本发明的可选特征是使用若干已知分割算法中的任何一种在辅节点中使用进一步的表分割。例如,可以通过哈希值或日期范围来分割。本发明的数据库系统还设计成提供故障备援保护。为了实现这种保护,对辅节点分配故障备援伙伴。除了它自己的分割表,每一个辅节点还存储有其故障备援伙伴的分割表,并且使用同样的算法来更新相关的表,如上描述。使用这种故障备援系统提供了高级的可靠性,而不需要在每个节点上使用镜象或基于均等的(parity-based)磁盘阵列。这样可以减少实现成本,因为RAIDLevelO磁盘系统可以用来提供更高的性能而不用增加与高级RAID系统相应的成本。如果被检验的行不在该辅节点的日期分割表的日期范围内,或者如果该辅节点没有储存日期分割表,则在步骤S709中判定该行是否在该辅节点垂直分割。如果该行是垂直分割的,则在步骤S710将其写入相应一组垂直分割表。在步骤S711判定该行是否为该辅节点中水平分割表的一部分。如果该行是水平分割表的一部分,在步骤S712把该行写入该表内。一旦某特定表的所有行被添加到数据库,各种受影响的物理表的索引在步骤S713中更新。本发明的另一个性能增强特征是査询高速缓存和临时表高速缓存的使用。在每一个主节点上的DBMS31中和在每一个辅节点的DBMS33中存储和维护查询高速缓存。该查询高速缓存用于存储在特定节点上运行的査询的结果。在每个主节点内的DBMS31中存储并维护临时表高速缓存以存储由该主节点在执行多步査询时生成的临时表。当表加载到数据库系统中时,必须清空包含有根据这些表的以前版本所生成结果的査询高速缓存和临时表高速缓存。相应地在步骤S604清洗(flush)相关査询高速缓存和临时表缓存,这些高速缓存的更详细操作说明在下面给出。前面描述了通过分类和分割表把表批量加载至数据库系统的各种处理。向数据库系统加载数据的可选处理是利用外部主机来预分类数据,该外部主机可存取所生成的辅模式和影响数据分布的任何系统设置。经预分类的数据可以绕过主节点直接加载到辅节点中。图8示出批量加载预分类数据过程的流程图。如图8所示,检査预分类数据的每个表和分割,并加载到相应的辅节点上。对于完整存储在辅节点上的每个表,在步骤S800使所有辅节点都准备好批量加载该表,并且在步骤S801把完整的表内容发送至所有的辅节点。对于已分类数据的每个分割,在步骤S802使辅节点的所分配的故障备援集准备好加载该分割并且在步骤S803把该分割发送至该故障备援集。最后在步骤S804,清洗相应的査询高速缓存和临时表缓存。根据本发明的一个实施例,外部主机系统用SQL语句同该数据库系统通信。SQL语句通常被主机系统分离成流(stream)。每个流都对应特定的用户或应用程序。使用流来组织SQL语句确保了语句由数据库系统按正确的顺序来执行。数据库系统所接收的SQL语句由每个主节点上的流管理软件20来管理。图9示出流管理软件20当从外部主机系统接收了新语句时所执行过程的流程图。如上所述,本发明的数据库系统包含了一个或多个主节点。由外部主机系统发送的SQL语句被每个主节点接收并按图9所示的方式来处理。特别地,对于每一个主节点流,管理软件20在步骤S901判定所接受语句是一个新流的开始还是数据库系统已经处理过的已存在流的一部分。如果该语句为新流的开端,流管理软件20在步骤S卯2判定该流是否应由该特定主节点控制。在数据库系统中,每个流都由一个主节点控制。每个主节点上的流管理软件20与其他主节点通信来确定由哪个主节点来控制进入的流。可通过使用已知的负载平衡算法来确定流控制。如果在步骤S902中确定相应的主节点来控制该流,流管理软件20在步骤S903通知其他主节点该流由该主节点控制。当每条语句被主节点接受,每个主节点上的査询高速缓存软件21在步骤S904中把该语句同该主节点的査询高速缓存做比较。如上所述,每个主节点在査询高速缓存中存储有以前查询的结果。在步骤S904中,把该语句同查询高速缓存做比较来确定是否相同的语句已被该主节点处理过并且所针对的表没有发生此期间内的改变。如果以前处理过相同的语句,在步骤S905从査询高速缓存中检索出该语句的相应结果集并传送给外部主机系统或控制该査询流的主节点,并且主节点对该语句的处理终结。如果在査询高速缓存中没有找到该语句,则在步骤S906确定所接受的语句是否为由相关主节点控制的流的一部分。如果该主节点控制该特定的流,则在步骤S907由SQL分析软件22处理该语句。如果该语句并不是由相关主节点控制的流的一部分,那么主节点对于该语句的处理结束,并且流管理软件20等待接受下一个语句。图10示出由SQL分析软件22所执行的为进一步处理语句做准备的过程的流程图。为使每条语句准备好进一步处理,在步骤S1001对该语句分离句元(tokenize),并且在步骤S1002分析各句元。最后,在步骤S1003调用相关的子例程来处理经分析的语句。可能的子例程包括但不局限于改变表、更新/插入数据和査询并行化。图11示出由SQL分析软件22调用的用以改变数据库表的子例程所执行的过程流程图。数据库表的改变主要由辅模式生成软件23来执行。该过程在步骤S1100中开始,该步骤确定待改变的表是事实表还是第一维度表。若该表是事实表或第一维度表,在步骤S1101确定待改变的表是否是垂直分割的。若该表未被垂直分割,则在步骤S1102,根据存储于主节点的DBMS31中的以及每个辅节点上元数据在相应的水平分割表中进行对该表的改变。如果待改变的表被垂直分割,则在步骤S1103根据存储于主节点的DBMS31中的以及每个辅节点上元数据改变相应一组垂直分割表。如果待改变的表不是事实表或第一维度表,则在步骤S1104,根据存储于主节点的DBMS31中的以及每个辅节点上元数据改变相应的表。在步骤S1105判定待改变的表是否在辅节点上被分割。如果该表被分割,那么在步骤S1106判定该表是否被垂直分割。如果该表不是被垂直分割,则在步骤S1107改变相应水平分割表的元数据和实际的表内容。如果该表是垂直分割的,则在步骤S1108改变相应一组垂直分割表的元数据和实际表内容。最后在步骤S1109,清洗依赖该被改变表的査询高速缓存数据项和临时表高速缓存数据项。图12示出由SQL分析软件22调用的用于更新数据库或向数据库中插入数据的更新/插入子例程所执行的过程流程图。对于每一个被更新或插入的行,在步骤S1200确定该行是否为该辅节点上只以分割的形式保持的表的一部分,例如事实表或第一维度表。如果该行所在的表并不是只以分割的形式保持,则在步骤S1201把该行写入该系统的每一个辅节点。如果该行是只以分割的形式保持的表的一部分,则在步骤S1202根据适当的哈希码和可选的相关日期分割该行,并在步骤S1203将其写入相关辅节点上分割的表中。在步骤S1204,更新数据库中所有改变的表的索引。最后在步骤S1205,清洗所有依赖数据被更新/插入的表的査询高速缓存和临时表高速缓存的数据项。通过査询并行化软件25来处理并优化査询语句。图13示出了查询并行化过程的流程图。在步骤S1301确定査询是否査找由数据库系统中任何日期分割集所覆盖的特定日期范围。如果该査询寻找由日期分割所覆盖的日期范围,则在步骤S1302指定用于该特定日期范围的辅节点的组以用于处理该査询。如果该査询并不査找特定的日期范围,或者该日期范围与所有日期分割集合中任何一个都不对应,在步骤S1301中指定所有辅节点用来处理该查询。步骤S1304、S1305和S1306确定如何根据查询结构在辅节点上执行查询并使用本领域所熟知的技术。在步骤S1304中,必须单独运行的子查询被分成两个单独的査询。首先执行该子査询,并在主节点上收集中间结果,然后把中间结果连同该査询的其余部分返回到辅节点作进一步处理。在步骤S1305中,把外部联结(outerjoin)分解成多个一起在辅节点和主节点上执行的查询以完成该査询。最后在步骤S1306,査询优化程序对多步和单步的执行策略的成本进行评估,然后选择成本最小的方案,同样使用本领域人员所熟悉的技术。然后,该査询被传递到用于单步査询的步骤S1307,或传递到用于多步査询的步骤S1308,之后,在步骤S1309把结果集返回主机。图14示出运行单步査询的过程流程图。从外部主机系统接收査询,使用主模式的表名来引用表。为了使用辅接点并行处理该査询,表名必须被相应辅模式中的表名所代替。在替换的实施例中,主模式中使用的表可以在所生成的辅模式中使用,这样单步査询可以直接传递到辅节点。在步骤S1401,在查询中引用的表名被辅模式中相应的表名替代。图15示出了替代在査询中使用的表名的过程。在步骤S1500中,该查询中的联结和表从事实表向外进行重新排序。在步骤S1501检验经排序的査询以确定在该査询中是否有待运行的联结。如果该査询不包含联结,在步骤S1502确定该査询中使用的表是否只以分割的形式保持在该辅节点。如果表完全保持在该辅节点上,不替换表名并且处理结束。如果该表只以分割的形式保持,在步骤S1503确定该表是否在辅模式中垂直分割。如果该表不是垂直分割的,则在步骤S1504用相应水平分割表的表名替换所述表名。如果该表在辅模式之中被垂直分割,则在步骤S1505判定该査询是否使用任何这样的列,如被垂直分割移去的大型备注字段。如果查询中没有使用被移走的列,在步骤S1506用相应垂直分割表的表名替换所述表名。如果在该查询中使用被移去的列,该表名被相应垂直分割表替换,并且在步骤S1507修改查询以便从包含移走列的表中得到相应的行。这可以利用使用本领域熟知的技术通过使用行标识符来实现。如果在步骤S1501判定査询包括联结,每个联结依次被检验。对当前联结中每一个表,在步骤S1508判定该表为事实表还是第一维度表。如果该表是事实表或第一维度表,在步骤S1509确定该表是否在辅模式中垂直分割。如果该表不是垂直分割的,在步骤S1510用相应水平分割表的表名替换该表名。如果该表被垂直分割,在步骤S1511判定该査询是否使用在垂直分割中移去的列。如果该査询中没有使用移出的列,在步骤S1512用相应垂直分割表的表名替代该表名。另外,如果在査询中使用任何移去的列,该表名被相应的垂直分割表替换,并且在步骤S1513修改该查询以便从包含有移出列的表中取得相应行。以上目的通过使用本领域技术人员熟悉的技术通过行标识符来达到。如果在步骤S1508判定该表不是事实表或第一维度表,则在步骤S1514判定已经检验的査询中使用的任何表名是否已被相应水平分割表的表名替代。如果该査询中不包含水平分割表的名称,过程进至步骤S1509。按上述方式重复步骤S1509至S1513。如果表名被水平分割表表名替代,则在步骤S1515判定该表是否具有该水平分割表已使用的同样的分割码。如果该表有同样的分割码,该联结在表的共处分割之间执行,并且该过程进至步骤S1509至S1513,如上所述方式来执行。如果该表没有相同的分割码,不替换表名并且处理结束。回到图14,一旦表名在步骤S1401中被替代,在步骤S1402中通过本领域技术人员熟知的技术为辅节点上使用的特定数据库优化该査询。例如,可改变与1/0周期相关的CPU周期的成本设置,这样可以更有效的地执行査询。然后,优化的查询在步骤S1403中被传送至辅节点。当辅节点故障时,查询被发送至包括其他辅节点在内的该故障辅节点的合适的故障备援伙伴,下面将详细说明。每个辅节点的辅管理软件34接收并且处理来自该负责主节点的査询。图16示出当新査询被接收时由辅管理软件执行步骤的流程图。注意在一些情况中,査询可以在不需要辅管理软件干预的情况下由辅节点上的DBMS来直接执行。当从主节点上接收到新的査询时,辅查询软件34在步骤S1600判定该查询是否必须为在该辅节点使用的DBMS做转换。本发明的系统设计不需要在系统辅节点级使用专门的DBMS。该特征降低了系统成本和系统实现的时间,因为可以在辅节点上使用现有的DBMS。如果需要转换,在步骤S1601为特定的DBMS来转换査询。在步骤S1602判定是否需要执行任何优化,以便在特定DBMS中运行该查询。如果需要优化,则在步骤S1603优化该査询。类似于在主节点级执行的处理,对照査询高速缓存来检查新查询以确定该查询是否已经相对该数据库运行并且该查询中引用的表没有发生此期间内的改变。辅管理软件34为故障备援表和为分配给特定辅节点的本地表维护査询高速缓存。某些DBMS产品包含自带的查询高速缓存。如果运行在辅节点的DBMS维持査询高速缓存,辅管理软件34无需检査或维持其自己的查询高速缓存。与主节点级维持的査询高速缓存一道,本发明提供了两级查询高速缓存,通过防止査询过程中不必要的重复来提高系统的性能。在步骤S1604,对照査询高速缓存比较所接收的査询。如果在该査询高速缓存中找到该査询,在步骤S1605从査询高速缓存中检出该结果集。如果在查询高速缓存中没有找到该査询,在步骤S1606把该查询传送至DBMS来运行。一旦得到结果集,辅管理软件34在步骤S1607判定在将结果集(一个或多个)返回至主节点之前是否需要对结果集(一个或多个)做后处理。若需要后处理,则在步骤S1608执行后处理。最后,在步骤S1609把结果集(一个或多个)返回发出该査询的主节点。再次回到图14,位于主节点上的结果分析软件28从各个用来处理该査询的辅节点接收结果集。在步骤S1404,结果集分析软件28在所接受到的结果集上执行后处理。后处理包括但不局限于把结果集组合成的单一的结果集,在该结果集内组织各结果,将结果集格式化成与提交该査询的外部主机系统相兼容的格式。图17示出依据该发明的一个实施例中多步查询处理的流程图。在步骤S1701中,该査询被分裂成两个或更多个辅查询。将这些査询分裂成多个将在各辅节点上串行运行的辅査询消除了在辅节点之间传输数据以处理原始查询的需求,并提高了运行这些査询的系统效率。多步査询依赖运行该査询的主节点上临时表的使用。这些临时表存储通过运行各个辅查询而产生的中间结果集。临时表被用来积累来自每一辅査询的结果集。另外,临时表可被发送至辅节点来运行后续的辅査询,该辅査询在辅节点上联结临时表与本地表。与在数据库系统中主节点和辅节点上使用的査询高速缓存相似,每个主节点维持临时表高速缓存,用来存储临时表的副本,这些副本是为由该主节点在该主节点的DBMS31中执行的辅査询而生成的。当执行辅査询时,在步骤S1702对照临时表高速缓存检査该辅査询来判定该特定辅査询是否已经被运行并且临时表所依赖的下层表没有此期间内的改变。如果在临时表高速缓存中没有匹配,在步骤S1703建立对于该辅查询的临时表。然后在步骤S1704至S1707运行辅査询并处理结果。在这些步骤中执行的动作同图14中步骤S1401至S1404所执行的动作相对应,因而不再赘述。一旦辅査询被处理或者对辅查询的匹配在临时表高速缓存中发现,主节点在步骤S1708判定是否还有其他剩余的辅査询。如果还有另外的辅査询待运行,在步骤S1709判定后续的辅査询是否需要临时表来处理。如果在辅节点上要求临时表,则在步骤S1710把临时表发送至该辅节点,并且该处理返回至步骤S1702。如果临时表未被要求,该处理直接回到步骤S1702用于下一个辅査询。如图13所示,一旦从外部主机系统接收的査询被执行和处理,或作为单步査询或作为多步査询,最终的结果集在步骤S1309返回外部主机系统。本发明的数据库系统中每一主节点与系统管理软件32具有接口以监视数据库系统中其他节点的状态。适用的系统管理软件包括IPMI(智能平台管理接口)和英特尔的SystemManager。当接收到主节点故障的通知,流管理软件20向管理控制台35发送系统状态信息,指示主节点的故障。系统管理员使用管理控制台35来追踪数据库系统的状态,并识别需要修复或替换的故障节点,以此来维持系统性能。一旦管理控制台35被告知主节点故障,流管理软件20执行主节点故障备援处理。图18示出数据库系统中主节点发生故障时由流管理软件20执行的故障备援处理的流程图。对于由该故障主节点管理的每个流执行图18示出的处理。在步骤S1800中,主节点判定它是否应为该故障主节点的特定流负责。根据本发明的一个实施例,这种判定是在数据库系统中可工作主节点之间通过使用相同的负载平衡方法做出的,该方法用于处理数据库系统接受的新流。然而本领域技术人员所知道的其他方法也可用来做这种判定。如果该主节点判定它对该特定流负责,则该主节点在步骤S1801中通知其他主节点它正在控制该流。一旦主节点对流行使控制,来自该流的每个未完成语句由该主节点接管。在步骤S1802,通过使用众所周知的事务管理技术来回滚未完成的语句。之后,在步骤S1803中重新执行该语句。这样,每个由故障主节点控制的流被可工作主节点接管,由此来保证数据库系统的运行。一旦故障主节点被恢复或替换,则它就可用于处理数据库系统所接收的新流。除了监视数据库系统中其他主节点以外,系统管理软件32还监视系统中每一个辅节点。图19示出数据库系统中辅节点故障时所执行处理的流程图。在辅节点发生故障时,在步骤S1900把该故障通知给流管理软件20。流管理软件20通过管理控制台35通知系统管理员该节点故障。对每个涉及该故障节点的未完成事务,流管理软件20使用替换该故障辅节点的相应故障备援伙伴(一个或多个)在步骤S1901回滚该未完成事务并在步骤S1902重新执行该事务。在故障的辅节点被恢复或替换的期间,主节点在正常工作的辅节点及相应的故障备援伙伴辅节点上执行査询。这样,数据库系统的运行在辅节点发生故障时也能得到保障。一旦该辅节点被恢复或替换,主节点回到正常査询处理中。本发明的另外实施例包括了使用分层的主节点配置来管理大量辅节点。在这种配置中,由被划分到多个层的主节点来执行查询以提高性能。除此之外,一些在辅节点级的执行处理可被转移到主节点级。其他的实施例包括使用用于数据库系统中辅节点的共享存储系统来代替上述直接连接的存储装置。故障备援数据可以存储在共享的存储装置中,这样使得任何可用辅节点可以为故障节点执行故障备援任务。上述超无共享并行数据库系统与传统无共享并行数据库系统相比有显著优点。首先,本发明的数据库系统避免了查询扭曲和对数据库系统性能上的其他不利影响。其次,跨数据库系统中各辅节点的分割与分布是自动完成的。这可以提高系统性能,而不增加系统管理的复杂性。第三,用来缓存査询结果的两级高速缓存系统避免了多次处理相同查询的不必要重复。最后,数据库故障备援处理可在节点发生故障时维持系统操作。以上说明旨在描述本发明的优选实施例。然而以上叙述的例子并不用于限制本发明的范围。本发明由权利要求书来阐明。应该理解,在不背离本发明的精神和范围的前提下,所说明的例子还可以有各种改型。权利要求1.一种并行数据库系统包括主节点;多个辅节点;用于跨所述多个辅节点分布数据库的装置,所述数据库包括事实表和多个维度表,其中该事实表和第一维度表跨所述多个辅节点分割,其中该数据库的所有其他维度表在所述多个辅节点中每一个上重复,而且其中具有最小长度的可达多个的其他维度表也跨所述多个辅节点分割。2.根据权利要求l所述的并行数据库系统,其中所述可达多个的其他维度表按行分割。3.根据权利要求l所述的并行数据库系统,其中所述可达多个的其他维度表按列分割。4.根据权利要求l所述的并行数据库系统,其中所述可达多个的其他维度表按列和行分割。5.根据权利要求l所述的并行数据库系统,其中所述事实表和第一维度表按行分割。6.根据权利要求5所述的并行数据库系统,其中所述事实表和第一维度表按公共码做哈希分割。7.根据权利要求5所述的并行数据库系统,其中所述事实表和第一维度表按列分割。8.根据权利要求l所述的并行数据库系统,其中该数据库的表跨所述多个辅节点按日期分割。9.根据权利要求l所述的并行数据库系统,其中所述分割装置跨所述多个辅节点自动分割和分布数据库表。10.根据权利要求1所述的并行数据库系统,进一步包括用于相对于该数据库把査询转换成至少一个子査询的装置,所述子査询可由所述并行数据库执行且不需要在所述辅节点之间传输数据。11.根据权利要求IO所述的并行数据库系统,进一步包括用于高速缓存所述并行数据库所产生的查询结果的装置。12.根据权利要求11所述的并行数据库系统,其中所述主节点包括用于高速缓存由所述主节点产生的查询结果的装置。13.根据权利要求12所述的并行数据库系统,其中所述多个辅节点的每个包括用于高速缓存由相应辅节点产生的子查询结果的装置。14.根据权利要求1所述的并行数据库系统,其中对所述多个辅节点的每个,存储在相应辅节点的数据集的副本也存储在所述多个辅节点中被分配给该相应辅节点作为故障备援伙伴的另外辅节点。15.根据权利要求14所述的并行数据库系统,其中需要由故障辅节点执行的子査询由该故障辅节点的故障备援伙伴来执行。16.—种用于在并行数据库系统中管理数据库的方法,该数据库包括事实表和多个维度表,所述方法包括步骤识别该数据库中的事实表和第一维度表;跨多个辅节点分割该事实表和该第一维度表;在该多个辅节点的每一个上重复其他维度表的每一个,以及跨该多个辅节点分割具有最小长度的可达多个的其他维度表。17.根据权利要求16所述的方法,其中所述可达多个的其他维度表按行来分割。18.根据权利要求16所述的方法,其中所述可达多个的其他维度表按列来分割。19.根据权利要求16所述的方法,其中所述可达多个的其他维度表按行和列来分割。20.根据权利要求16所述的方法,其中所述事实表和第一维度表按行分割。21.根据权利要求20所述的方法,其中所述事实表和第一维度表按公共码做哈希分割。22.根据权利要求20所述的方法,其中所述事实表和第一维度表按列分割。23.根据权利要求16所述的方法,进一步包括跨多个辅节点根据曰期分割数据库表。24.根据权利要求16所述的方法,进一步包括相对于该数据库将查询转换成至少一个子査询,该子查询可由该并行数据库系统执行并且不需要在辅节点之间传输数据。25.根据权利要求24所述的方法,进一步包括在主节点高速缓存査询结果。26.根据权利要求25所述的方法,进一步包括在相应辅节点高速缓存所述至少一个子査询的结果。27.根据权利要求16所述的方法,进一步包括把来自辅节点的数据集副本存储在分配给该辅节点的故障备援伙伴上。28.根据权利要求27所述的方法,进一步包括在故障辅节点的故障备援伙伴上执行要由该故障辅节点执行的子査询。29.存储在计算机可读存储介质上的计算机可执行处理步骤,所述处理步骤用来执行权利要求16至28中任何一项所述的方法。全文摘要一种超无共享并行数据库,包含至少一个主节点和多个辅节点。包含至少一个事实表和多个维度表的数据库在数据库系统中跨各辅节点分割与分布,这样,可以在不需要在辅节点之间传输数据的情况下并行处理查询。数据库的事实表和第一维度表跨各辅节点分割。数据库的其他维度表在每个辅节点上重复,而且这些其他维度表中的至少一个跨各辅节点分布。文档编号G06F17/00GK101120340SQ200580005494公开日2008年2月6日申请日期2005年2月17日优先权日2004年2月21日发明者斯图亚特·弗罗斯特申请人:数据迅捷股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1