多系统的集成分析的制作方法

文档序号:6489259阅读:199来源:国知局
多系统的集成分析的制作方法
【专利摘要】本发明涉及一种多系统的集成分析。实施例提供了支持用于执行分析的应用的联合系统。该联合系统包括:第一分布式系统,用于执行一个或多个第一任务,该一个或多个第一任务包括将传入数据处理成一组数据块;内存数据库系统,用于执行一个或多个第二任务,该一个或多个第二任务包括从第一分布式系统接收一组数据块并且将该组数据块存储在内部存储装置中;以及第二分布式系统,用于执行一个或多个第三任务,该一个或多个第三任务包括从内存数据库系统接收一组数据块中的至少一个数据块并且执行对所述至少一个数据块的分析。第一任务、第二任务和第三任务的运行是通过由所述应用使用的且与内存数据库系统相关联的脚本语言控制的。
【专利说明】多系统的集成分析
【技术领域】
[0001]本公开涉及多系统的集成分析。
【背景技术】
[0002]设计成功的分析产品需要考虑多种不同因素,包括性能(例如响应时间)、总拥有成本和/或现有软件包的可用性。目前,存在着许多不同的支持分析的系统,诸如分布式文件系统(例如,Hadoop系统)、支持开源编程语言的分布式系统(例如,R系统)以及支持内存(in-memory)技术的系统。例如,Hadoop系统可以是以相对较低的拥有成本支持大规模并行操作(parallelism)的系统,但是可以包括无共享架构、与许多现在的内存分析应用相比相对较低的性能、以及缺乏查询语言的限制。R系统可以是具有超过3000个可用软件包的统计计算软件包,但在在并行操作和处理大量数据方面的可扩展性有限,而且由于它是基于磁盘的系统而具有较低的性能。内存系统可以在响应时间方面具有最高的性能。此外,内存系统可以充分利用多核基础构造,以确保复杂分析的完全并行操作,并且可以为数据库查询提供灵活的查询语言,并提供包括诸如可以调用外部系统的C/C++、R和二进制代码中的任意一种的非SQL存储过程的能力。然而,内存数据库系统一般比其他系统更昂贵,且具有较少的新的可用的应用/分析软件包。
[0003]因此,这些分析系统具有自己的优点和缺点。一般情况下,客户要求系统具有高性能和实惠的价格。使用上述系统之一建立分析系统限制了系统的底层技术的局限性。例如,Hadoop系统具有较低的拥有成本,但是缺乏内存系统的高性能和语言能力,而使用内存系统构建系统可能不符合处理较大组的原始数据的成本效益。此外,R系统可能缺乏处理较大组的原始数据的能力以及对高性能的可扩展性/并行操作。

【发明内容】

[0004]实施例提供了支持用于执行分析的应用的联合系统。该联合系统包括:第一分布式系统,用于执行一个或多个第一任务,该一个或多个第一任务包括将传入数据处理成一组数据块;内存数据库系统,用于执行一个或多个第二任务,该一个或多个第二任务包括从第一分布式系统接收一组数据块并且将该组数据块存储在内部存储装置中;以及第二分布式系统,用于执行一个或多个第三任务,该一个或多个第三任务包括从内存数据库系统接收一组数据块中的至少一个数据块并且执行对所述至少一个数据块的分析。第一任务、第二任务和第三任务的运行是通过由应用使用的且与内存数据库系统相关联的脚本语言来控制的。一个或多个第三任务包括从第二分布式系统接收分析的结果并将该结果存储在内部存储装置中。
[0005]第一分布式系统可以包括Hadoop系统,而且第二分布式系统可以包括R系统。脚本语言可以包括结构化查询语言(SQL)脚本,其中SQL脚本可以包括嵌入式R语言脚本。
[0006]内存数据库系统可以被配置为通过存储器到存储器复制信道从第一分布式系统接收一组数据块。第一分布式系统可以包括多个节点,而且每个节点都可以包括转换单元,该转换单元被配置为将传入数据转换成具有能够与内存数据库系统的内部存储装置兼容的格式的一个或多个数据块。
[0007]内存数据库系统可以包括排序单元,该排序单元被配置为对一组数据块进行排序,以使得该组数据块中的数据块不可用于分析,直到该组数据块中先前的数据块都被接收。第一分布式系统可以包括排序单元,该排序单元被配置为在将一组数据块发送到内存数据库系统之前对该组数据块进行排序。
[0008]与内存数据库系统相关联的脚本语言可以包括具有与第二分布式系统相关联的脚本语言的一个或多个命令,其中内存数据库系统可以将一个或多个命令与至少一个数据块一起发送到第二分布式系统以用于执行分析。
[0009]第二分布式系统从内存数据库系统接收至少一个数据块可以包括通过存储器到存储器复制信道接收一个或多个命令以及至少一个数据块。内存数据库系统可以通过存储器到存储器复制信道接收分析的结果。
[0010]联合系统还可以包括数据发送器,该数据发送器被配置为从第一分布式系统接收一组数据块,确定该组数据块是否达到阈值水平,并且如果该组数据块被确定为达到阈值水平则发送该组数据块。联合系统还可以包括数据传递协调器,该数据传递协调器被配置为将来自第一分布式系统的一组数据块传递到内存数据库系统。
[0011]实施例还提供了支持用于执行分析的应用的方法。该方法包括:第一分布式系统执行一个或多个第一任务,该一个或多个第一任务包括将传入数据处理成一组数据块;内存数据库系统执行一个或多个第二任务,该一个或多个第二任务包括从第一分布式系统接收一组数据块并且将该组数据块存储在内部存储装置中;以及第二分布式系统执行一个或多个第三任务,该一个或多个第三任务包括从内存数据库系统接收一组数据块中的至少一个数据块并且执行对所述至少一个数据块的分析。第一任务、第二任务和第三任务的运行是通过由应用使用的且与内存数据库系统相关联的脚本语言来控制的,而且一个或多个第三任务包括从第二分布式系统接收分析的结果并将该结果存储在内部存储装置中。
[0012]从第一分布式系统接收一组数据块可以包括通过存储器到存储器复制信道从第一分布式系统接收一组数据块。一个或多个第一任务还可以包括将传入数据转换成具有能够与内存数据库系统的内部存储装置兼容的格式的一个或多个数据块。
[0013]一个或多个第二任务可以包括对一组数据块进行排序,以使得该组数据块中的数据块不可用于分析,直到该组数据块中的先前数据块都被接收为止。一个或多个第一任务可以包括在将一组数据块发送到内存数据库系统之前对该组数据块进行排序。
[0014]与内存数据库系统相关联的脚本语言可以包括具有与第二分布式系统相关联的脚本语言的一个或多个命令,其中一个或多个第二任务可以包括将一个或多个命令与至少一个数据块一起发送到第二分布式系统以用于执行分析。一个或多个第三任务可以包括通过存储器到存储器复制信道接收一个或多个命令以及至少一个数据块。
[0015]实施例还提供了一种计算机程序产品,该计算机程序产品有形地具体实施在非临时性计算机可读存储介质上并包括可运行代码,当该可运行代码运行时被配置为使联合系统执行以下操作:通过第一分布式系统执行一个或多个第一任务,该一个或多个第一任务包括将传入数据处理成一组数据块;执行一个或多个第二任务,该一个或多个第二任务包括从第一分布式系统接收一组数据块并且将该组数据块存储在内存数据库系统的内部存储装置中;以及执行一个或多个第三任务,该一个或多个第三任务包括从内存数据库系统接收一组数据块中的至少一个数据块并且执行对所述至少一个数据块的分析。第一任务、第二任务和第三任务的运行是通过由应用使用的且与内存数据库系统相关联的脚本语言来控制的,而且一个或多个第三任务包括从第二分布式系统接收分析的结果并将该结果存储在内部存储装置中。
[0016]在附图和以下描述中阐明了一个或多个实现的细节。从说明书和附图以及权利要求书,其他特征将是显而易见的。
【专利附图】

【附图说明】
[0017]图1A示出了根据实施例的、支持应用执行分析的联合系统;
[0018]图1B示出了根据实施例的、包括数据发送器的联合系统,该数据发送器支持联合系统的内存数据库系统与第一分布式系统之间的通信;
[0019]图1C示出了根据实施例的、包括数据传递协调器的联合系统,该数据传递协调器支持内存数据库系统与第一分布式系统之间的通信;
[0020]图2是示出根据实施例的联合系统的示例操作的流程图;以及
[0021]图3A、图3B、图4、图5A、图5B、图5C、图图6和图7是根据实施例的联合系统的代码实现。
【具体实施方式】
[0022]例如,实施例提供了联合系统,用于在诸如第一分布式系统、内存数据库系统和第二分布式系统的多系统上执行集成分析。联合系统可以支持用于执行分析的一个或多个应用,而且可以以利用每个系统的好处的方式将这种应用的任务分布在多系统上。
[0023]图1A示出了根据实施例的、支持应用155执行分析的联合系统100。联合系统100可以包括诸如第一分布式系统110、内存数据库系统130和第二分布式系统160的多系统。应用155可以是依赖分析统计(analytic calculation)的任意类型的应用。
[0024]一般地,如下面更详细地进一步描述,第一分布式系统110可以将传入数据处理成一组数据块116,而且数据块116被发送到内存数据库系统130,以用于存储和可选地计算密集的统计(computational-1ntensive calculaton)。在一个实施例中,如图1A所示,一组数据块116可以经由第一分布式系统110和内存数据库系统130之间的存储器到存储器复制信道(memory-to-memory copy channel)被发送。图1B和图1C中进一步描述了其他变体。在第一分布式系统110处正在执行的任务可以被认为是第一任务。
[0025]内存数据库系统130可以执行一个或多个第二任务,该一个或多个第二任务包括接收一组数据块116并且将该组数据块116存储在内存数据库系统130的内部存储装置136中。然而,内存数据库系统130可以执行其他第二任务,诸如任何类型的计算统计(computational calculations)。然而,根据实施例,分析的执行被推到第二分布式系统160。例如,第二分布式系统160可以执行一个或多个第三任务,该一个或多个第三任务包括接收一个或多个数据块116,对接收到的数据块116执行分析,并将分析结果传递回内存数据库系统130以便进行存储。根据实施例,第一任务、第二任务和第三任务的运行是通过由应用155使用的且与内存数据库系统130相关联的脚本语言控制的。[0026]脚本语言可以包括结构化查询语言(SQL)脚本。基本上,应用155可以使用内存数据库系统110中的SQL脚本作为主要语言。换句话说,应用155使用与内存数据库系统130相关联的SQL脚本作为联合运行包括第一任务、第二任务和第三任务的所有任务的语言。参照第二分布式系统160,SQL脚本可以包括与第二分布式系统160相关联的嵌入式脚本,诸如R脚本(如果第二分布式系统160包括R系统)。因此,嵌入式脚本可以与来自内存数据库系统130的一个或多个数据块116 —起被推到第二分布式系统160以执行分析。第二分布式系统160可以执行一个或多个分析统计,并将分析结果传递回内存数据库系统130。下面将进一步描述实施例的这些和其他特征。
[0027]第一分布式系统110可以包括分布在多个节点115上的系统,其支持包括收集和处理相对较大组的传入数据的数据收集能力。例如,第一分布式系统110可以包括处理高达千千兆(petabyte)甚至更多的传入数据的能力。在一个实施例中,第一分布式系统可以包括支持一个或多个数据密集型分布式应用的开源架构,这可以使应用155能够与多个节点115 —起操作,应用155与多个节点115—起操作可以被认为是节点群集。多个节点115可以是独立计算的计算机/服务器。例如,每个节点115可以表示单独计算的计算机,或者多个节点115可以与特定的计算计算机相关联。实施例包括任何数量的与特定计算的计算机相关联的节点115,特定的计算计算机包括在单个计算计算机上具有多个节点115的能力。因此,每个节点115可以与软件组件和硬件组件相关联,软件组件和硬件组件是诸如一个或多个处理器、以及包括可运行的代码的一个或多个非临时性存储单元,当可运行的代码被执行时使一个或多个处理器执行这里所描述的功能。在特定实施例中,第一分布式系统110可以包括Hadoop系统,其是本领域中已知的分布式文件系统。然而,Hadoop系统已经如下所述进行修改,以便包括支持联合系统100的功能。要注意的是,除了 Hadoop系统的具体示例,实施例还包括能够处理相对较大组的传入数据的任何类型的分布式系统。
[0028]第一分布式系统110可以执行一个或多个第一任务,该一个或多个第一任务包括将传入数据处理成一组数据块116。例如,传入数据的处理可以在节点群集(例如,多个节点115)上实现并分布。特别地,每个节点115可以处理传入数据的一部分,并将处理的传入数据格式化(formulate)为一个或多个数据块116。图1A的示例示出了 5个节点(例如,第一节点115-1、第二节点115-2、第三节点115-3、第四节点115-4和第五节点115-5)作为节点群集的一部分。然而,实施例针对特定节点群集包括任何数量的节点115以及任何数量的数据块116。
[0029]根据实施例,如图1A所示,每个节点115可以包括通信单元115a和转换单元115b。通信单兀115a可以被配置为根据统一通信协议来处理第一分布式系统110和内存数据库系统130之间的通信,这将参照图3至图7来更详细地解释。在一个实施例中,每个通信单元115a可以通过存储器到存储器复制信道将它的各个数据块116发送到内存数据库系统130。例如,每个通信单元115a可以运行存储器到存储器复制指令,其中通过通信信道便于数据块116的传递。通信信道可以是本领域中已知的任何类型的有线或无线通信信道。在图1B和图1C中进一步描述从第一分布式系统110向内存数据库系统130发送数据块116的其他变体。转换单元115b可以被配置为将传入数据转换成具有与内存数据库系统130的内部存储装置136兼容的格式的一个或多个数据块116。例如,将被发送的数据块116可以被转换成与内存数据库系统130相关联的格式,使得格式化的数据容易被内部存储装置136消耗/存储。
[0030]此外,联合系统100可以使用对一组数据块116进行排序的排序机制。排序机制可以根据许多不同的方式来完成。在一个不例中,第一分布式系统110可以包括排序单兀120,排序单元120被配置为在将一组数据块116发送到内存数据库系统130之前对该组数据块116进行排序。在这个示例中,排序单元120可以位于中央服务器上或者与节点115相关联的一个或多个计算的计算机上,并且可以被配置为当每个数据块116被单个节点115处理时收集每个数据块116。然后,排序单元120可以对该组数据块116进行排序以使得数据块116处于由通信协议指定的适当顺序,其包括对数据块116排序以使得它们处于正确的时间顺序(例如,数据块1、数据块2、数据块3、数据块4和数据块5,或以相反的顺序)。此外,排序单元120可以等待直到一组数据块116达到阈值水平时才发送该组数据块116。例如,排序单元120可以确定一组数据块116是否达到阈值水平(或一些其他标准),然后如果该组数据块116被确定为达到阈值水平(或符合指定的标准)则发送该组数据块116,其中阈值水平(或指定的标准)可以是较大数据块的一部分。
[0031]在另一个示例中,排序机制可以在内存数据库系统130中实现。在这个示例中,内存数据库系统130可以包括被配置为对一组数据块116进行排序的排序单元1201。特别地,代替在第一分布式系统110处对数据块116进行排序,通信单元115a在它的数据块116形成时将它的数据块116发送到内存数据库系统130。例如,每个节点115可以在数据块116生成时发送数据块116,而且内存数据库系统130中的排序单元1201负责对数据块116进行排序。使得数据块116不可用,直到执行排序功能为止,例如当先前的数据块116都被接收时。这个示例是图1A中示出。例如,参照图1A,第一数据块116-1、第二数据块116-3、第四数据块116-4和第五数据块116-5已经被它们各自的节点115发送。然而,第三数据块116-3还没有被发送到内存数据库系统130。因此,第一数据块116-1和第二数据块116-2可用于执行分析(或任何其他顺序的或并行的任务),如这种事实所示,即,第一数据块116-1和第二数据块116-2被填充在内部存储装置136中。然而,由于内存数据库系统130还没有接收到第三数据块116-3,因此第四数据块116-4和第五数据块116-5不可用于使用,直到接收到第三数据块116-3。
[0032]内存数据库系统130可以是依赖于用于计算机数据存储的主存储器的一种数据库管理系统。相比之下,常规数据库系统采用磁盘存储机制。此外,内存数据库系统130可以支持实时分析以及包括复制和聚合技术的事务处理。在一个实施例中,内存数据库系统130可以是由SAP开发的HANA企业1.0 (任何其他版本)。
[0033]根据实施例,复制和聚合技术(例如收集任务)可以被分配给第一分布式系统110,而且分析计算或其一部分可以被分配给第二分布式系统160。内存数据库系统130可以被配置为执行第二任务,第二任务包括从第一分布式系统110接收一组数据块116并且将该组数据块116存储在内部存储装置136中。例如,通信单元150可以被配置为根据统一通信协议来处理第一分布式系统110和内存数据库系统130之间的通信。比如,内存数据库系统130中的通信单元150与每个节点115中的通信单元115a—起操作可以允许通过存储器到存储器复制信道发送数据。在一个实施例中,在接收一组数据块116之后,该组数据块116可以被转发到排序单元1201,以用于以上述方式进行排序。然后,排序单元1201可以将已排序的数据块116存储在内部存储装置136中。可替换地,在第一分布式系统110在发送数据块116之前对数据块116进行排序的情况下,通信单元150可以接收已排序的数据块116,并将已排序的数据块116存储在内部存储装置136中。然而,在上述任何一种情况下,因为数据块116已经被格式化为用于存储在内部存储装置136中,所以内存数据库系统130可以相对快速地直接存储该组数据块116,无需进一步处理(或相对较少的处理)。内部存储装置136可以包括采用基于行、基于列和/或基于对象的存储技术的并行处理数据存储区。
[0034]第二任务可以包括通常与内存数据库系统130相关联的其他任务。例如,计算单元140可以被配置为执行分析的内存计算(in-memory computation)、由第二分布式系统160执行的分析的计算、和/或更适合内存数据库系统130执行的其他相对复杂的计算。
[0035]此外,第二任务可以包括将一个或多个存储的数据块116发送到第二分布式系统160。例如,如上面所解释的,根据实施例,第二分布式系统160可以用于执行分析,因为与第二分布式系统160相关联的基础构造(例如,由于许多不同类型的可用的软件包)可以被认为更适合运行。因此,通信单元150可以被配置为将与分析操作有关的一个或多个存储的数据块116发送到第二分布式系统160,从而第二分布式系统160可以执行分析计算,而且通信单元150可以从第二分布式系统160接收分析的结果并且将结果存储在内部存储装置136中。
[0036]根据一个实施例,通信单元150可以与第一分布式系统110和内存数据库系统130之间的通信相似地通过存储器到存储器复制信道将数据块116发送到第二分布式系统160。例如,通信信道(有线或无线)可以存在于内存数据库系统130和第二分布式系统160之间。因此,通信单元150可以使用通信信道从内部存储装置136和与第二分布式系统160相关联的存储单元执行存储器到存储器复制。
[0037]此外,由于第二分布式系统160可以利用不同于内存数据库系统130的SQL脚本语言的脚本语言,因此SQL脚本语言可以包括与第二分布式系统160的语言相关联的嵌入式命令。根据一个实施例,如果第二分布式系统160包括R系统,则与第二分布式系统160相关联的脚本语言可以是R语言(或R脚本)。然而,实施例包括任何类型的脚本,这依赖于第二分布式系统160的类型。内存数据库系统130可以解析SQL脚本语言以获得R脚本,然后将获得的R脚本与有关数据块116 —起发送到第二分布式系统160以用于运行。在第二分布式系统160执行分析计算之后,这种计算的结果可以被发送回内存数据库系统130以用于存储。使用存储器到存储器复制信道,可以便于内存数据库系统130和第二分布式系统160之间信息(例如,R脚本、有关数据块116和结果)的传输。
[0038]第二分布式系统160可以被配置为执行一个或多个第三任务,一个或多个第三任务包括接收与分析操作(以及R脚本)有关的一个或多个数据块116,执行对接收到的数据块116的分析。第二分布式系统160可以包括其他第三任务,所述其他第三任务要么是本领域普通技术人员已知的要么是这里所讨论的。第二分布式系统160可以包括用于统计计算(包括执行分析)的任何类型的分布式系统。在一个实施例中,第二分布式系统160可以包括用于支持统计计算的开源编程语言。与第一分布式系统110类似,第二分布式系统160可以包括多个节点165,例如,节点群集。因此,分析操作可以分布在多个节点165上。多个节点165可以是独立计算的计算机/服务器。例如,每个节点165可以表示单独计算的计算机,或者多个节点165可以与特定的计算计算机相关联。实施例包括任何数量的与特定的计算计算机相关联的节点165,特定的计算计算机包括在单个计算计算机上具有多个节点165的能力。因此,每个节点165可以与软件组件和硬件组件相关联,软件组件和硬件组件是诸如一个或多个处理器、以及包括可运行的代码的一个或多个非临时性存储单元,当可运行的代码被执行时使一个或多个处理器执行本文所描述的功能。在一个特定实施例中,第二分布式系统160可以包括R系统,R系统是用于支持超过3000个可用的统计软件包的统计计算的一种系统。在这个示例中,多个节点165上的运行可以通过消息传递接口(MPI)并行执行,其中MPI是R软件包。
[0039]根据实施例,与第二分布式系统160相关联的嵌入式脚本(例如,R脚本)与有关数据块116 —起可以被推到第二分布式系统160,以用于执行分析。例如,第二分布式系统160可以包括作业追踪器162,作业追踪器162被配置为管理从内存数据库系统130接收到的作业。作业追踪器162可以管理包括将第三任务分配给适当数量的节点165的作业执行并且追踪每个作业的进展。此外,作业追踪器162可以将第三任务(例如,分析)分割成多个子任务,而且每个节点165上的每个子任务可以在与计算计算机相关联的多个处理器上被进一步并行化和运行。
[0040]如上面所指出的,与第一分布式系统110相关联的第一任务、与内存数据库系统130相关联的第二任务以及与第二分布式系统160相关联的第三任务可以通过与内存数据库系统130相关联的SQL脚本进行控制。如果内存数据库系统130采用除SQL脚本以外的不同脚本,则控制第一任务、第二任务和第三任务可以利用内存数据库系统130的编程语言完成。换句话说,联合系统100使用内存数据库系统130的脚本语言作为联合系统100的主要语言。使用内存数据库系统130的编程语言(例如,SQL脚本)作为主要语言允许第一分布式系统110和第二分布式系统160的结合。比如,SQL脚本可以调用与第一分布式系统110相关联的第一任务,诸如将传入数据处理成一组数据块116,并且可以调用与第二分布式系统160相关联的第三任务,诸如接收有关数据块116和执行对有关数据块116的分析。
[0041]如图1A所示,每个节点165可以包括通信单元165a和分析单元165b。通信单元165a可以被配置为处理内存数据库系统130和第二分布式系统160之间的通信。在一个示例中,通信单元165a可以通过存储器到存储器复制信道从内存数据库系统130的通信单元150接收相关数据块116以及与第二分布式系统160相关联的嵌入式脚本。比如,每个通信单元165a可以运行存储器到存储器复制指令,其中通过通信信道便于数据块116的传递,通信信道可以是本领域中已知的任何类型的有线或无线通信信道。
[0042]分析单元165b可以根据嵌入式脚本执行对有关数据块116的分析。例如,分析计算可以包括发现数据中的模式的任何类型的分析,这种分析可以依赖于统计的应用、计算机编程和/或操作研究来分析业务操作的上下文或与公司业绩相关的其他领域的数据。此夕卜,分析计算可以涉及业务业绩的改善和预测。因此,根据实施例,分析的执行被分配给第二分布式系统160,第二分布式系统160可以是R系统。通过分析单元165b,多个节点165可以执行由嵌入式R脚本所指定的分析,而且分析的结果可以通过存储器到存储器复制信道发送回内存数据库系统130。内存数据库系统130可以将结果存储在内部存储装置136中。
[0043]图1B示出了根据实施例的、包括数据发送器170的联合系统100,该数据发送器170支持内存数据库系统130与第一分布式系统110之间的通信。代替图1A中所示的将一组数据块116从第一分布式系统110直接发送到内存数据库系统130,参照图1B,通过数据发送器170将数据块116发送到内存数据库系统130。
[0044]在图1B所示的示例中,第一分布式系统110可以包括与图1A中所示的组件类似的组件,诸如多个节点115。与图1A类似,每个节点115可以处理传入数据的一部分,并将处理的传入数据格式化为一个或多个数据块116。在图1B的示例中,当数据准备好时,每个节点115可以通过第一通信信道将它们的各个数据块116发送到数据发送器170,第一通信信道可以是本领域中已知的任何类型的有线或无线通信信道。然后,数据发送器170可以处理数据块116,诸如将数据块116转换为与内存数据库系统130相关联的存储格式并且按照它们的适当顺序对数据块116进行排序。接下来,数据发送器170可以确定数据块116是否达到阈值水平,并且如果数据块116被确定为满足和/或超过阈值水平则通过第二通信信道将数据块116发送到内存数据库系统130。第二通信信道可以是本领域中已知的有线或无线通信信道的类型。
[0045]如图1B所示,数据发送器170可以包括通信单元170a、转换单元170b和排序单元170c。通信单元170a可以控制通过第一通信信道的第一分布式系统110和数据发送器170之间的通信,以及通过第二通信信道的数据发送器170和内存数据库系统130之间的通信。转换单元170b可以被配置为将数据块116转换成与内存数据库系统130的内部存储装置136兼容的格式。例如,将被发送的数据块116可以被转换成与内存数据库系统130相关联的格式,使得格式化的数据容易被内部存储装置136消耗/存储。
[0046]排序单元170b可以被配置为在将一组数据块116发送到内存数据库系统130之前对该组数据块116进行排序。在这个示例中,排序单元170b可以被配置为当每个数据块被单个节点处理时收集每个数据块。然后,排序单元170b可以对该组数据块116进行排序以使得数据块116处于由通信协议指定的适当顺序,其包括对数据块116排序以使得它们处于正确的时间顺序(例如,数据块1、数据块2、数据块3、数据块4和数据块5,或以相反的顺序)。此外,排序单元170b可以等待直到一组数据块116达到阈值水平时才发送该组数据块116。例如,排序单元170b可以确定一组数据块116是否达到阈值水平(或一些其他标准),然后如果该组数据块116被确定为达到阈值水平(或符合指定的标准)则发送该组数据块116,阈值水平(或指定的标准)可以是更大数据块的一部分。
[0047]然后,通信单元170a可以被配置为将已排序的数据块116发送到内存数据库系统130。例如,内存数据库系统130的通信单元150可以被配置为通过第二通信信道从数据发送器170的通信单元170a接收数据块116。
[0048]图1C示出了根据实施例的、包括数据传递协调器180的联合系统100,该数据传递协调器180支持内存数据库系统130与第一分布式系统110之间的通信。例如,代替直接接收数据块116,数据传递协调器180被配置为通过一个或多个控制信号来控制信息的传输。例如,当第一分布式系统110中数据准备好时,数据传递协调器180可以控制第一分布式系统110和内存数据库系统130之间的数据传输。数据传递协调器180可以将一个或多个控制信号发送到有关节点115,一个或多个控制信号可以提示有关节点115通过通信信道将它们各自的数据块116发送到内存数据库系统130。换句话说,数据传递协调器180可以控制各个数据块116从节点115被发送的定时。此外,如上面所解释的,排序机制可以发生在第一分布式系统Iio或内存数据库系统130上。可替换地,数据传递协调器180可以包括发出控制信号的排序机制,该控制信号通过控制数据块116通过通信信道从适当节点115被发送的定时来对数据块116进行有效地排序。
[0049]图2是示出根据实施例的联合系统100的示例操作的流程图。虽然图2被示出为顺序的、有序列表的操作,但是将要理解的是,这些操作中的一些或所有可以以不同的顺序发生,或平行、或迭代、或可以在时间上重叠。
[0050]可以执行包括将传入数据处理成一组数据块的一个或多个第一任务(202)。例如,第一分布式系统110可以执行包括将传入数据处理成一组数据块116的一个或多个第一任务。一般地,与第一分布式系统110相关联的任务可以被认为是第一任务,而且包括将数据处理成数据块116以及将数据块116发送到内存数据库系统130以用于存储和/或进一步处理的功能。在一个示例中,第一分布式系统110可以包括多个节点115,而且传入数据的处理可以在多个节点115上实现并分布。特别地,每个节点115可以处理传入数据的一部分,并将处理的传入数据格式化为一个或多个数据块116。在一个特定实施例中,第一分布式系统110可以包括Hadoop系统。然而,一般地,第一分布式系统110可以包括分布在多个节点上的任何类型的系统,其支持包括收集和处理相对较大组的传入数据的数据收集能力。
[0051]在一个示例中,如图1A所示,每个节点115可以包括通信单元115a和转换单元115b。通信单元115a可以被配置为处理第一分布式系统110和内存数据库系统130之间的通信。传输可以通过用于在这两个系统之间传递数据的统一通信协议来支持。在一个实施例中,每个通信单元115a可以通过存储器到存储器复制信道将它的各个数据块116发送到内存数据库系统130。例如,每个通信单元115a可以运行存储器到存储器复制指令,其中通过通信信道便于数据块116的传递。根据另一个实施例,如图1B所示,每个节点115可以将它们的各个数据块116发送到数据发送器170,数据发送器170可以转换和排序数据块116,然后将已排序的数据块116发送到内存数据库系统130。更进一步地,根据另一个实施例,如图1C所示,有关节点115可以基于从数据传递协调器180接收到的控制信号的接收,将它们各自的数据块116发送到内存数据库系统130。
[0052]可以执行一个或多个第二任务,一个或多个第二任务包括从第一分布式系统接收一组数据块并且将该组数据块存储在内部数据库中(204)。例如,内存数据库系统130可以被配置为执行一个或多个第二任务,一个或多个第二任务包括从第一分布式系统100接收一组数据块116并且将该组数据块116存储在内部存储装置136中。与内存数据库系统130相关联的任务可以被认为是第二任务。内存数据库系统130可以是依赖于用于计算机数据存储的主存储器的一种数据库管理系统。在一个实施例中,内存数据库系统可以是由SAP开发的HANA企业1.0 (任何其他版本)。
[0053]如上面所解释的,联合系统100可以使用排序机制,该排序机制可以与第一任务(例如,第一分布式系统110)或第二任务(例如,内存数据库系统130)相关联。例如,如图1A所示,第一分布式系统110可以包括排序单元120,排序单元120被配置为在将一组数据块116发送到内存数据库系统130之前对该组数据块116进行排序。具体地,排序单元120可以确定一组数据块116是否达到阈值水平(或一些其他标准),然后如果该组数据块116被确定为达到阈值水平(或符合指定的标准)则发送该组数据块116,阈值水平(或指定的标准)可以是更大数据块的一部分。
[0054]在另一个示例中,排序机制可以在内存数据库系统130中实现。在这个示例中,内存数据库系统130可以包括被配置为对一组数据块116进行排序的排序单元1201。特别地,代替在第一分布式系统110处对数据块116进行排序,有关节点115在它们的数据块116形成时将它们的数据块116发送到内存数据库系统130。例如,每个节点115可以在数据块116生成时发送数据块116,而且内存数据库系统130中的排序单元1201负责对数据块116进行排序。使得数据块116不可用,直到执行排序功能为止,例如当先前的数据块116都被接收时。
[0055]如上面所解释的,内存数据库系统130中的通信单元150可以被配置为根据统一通信协议来处理第一分布式系统110和内存数据库系统130之间的通信。比如,内存数据库系统130中的通信单元150与每个节点115中的通信单元115a —起操作可以允许通过存储器到存储器复制信道发送数据。在一个实施例中,在接收一组数据块116之后,该组数据块116可以被转发到排序单元1201,以用于以上述方式进行排序。然后,排序单元1201可以将已排序的数据块116存储在内部存储装置136中。可替换地,在第一分布式系统110在发送数据块116之前对数据块116进行排序的情况下,通信单元150可以接收已排序的数据块116,并将已排序的数据块116存储在内部存储装置136中。然而,在上述任何一种情况下,因为数据块116已经被格式化为用于存储在内部存储装置136中,所以内存数据库系统130可以相对快速地直接存储该组数据块116,无需进一步处理(或相对较少的处理)。此夕卜,内存数据库系统130可以通过图1B和图1C中所示的可替换的机制来接收数据块116。
[0056]可以执行一个或多个第三任务,一个或多个第三任务包括从内存数据块系统接收一组数据块中的至少一个数据块并且执行对所述至少一个数据块的分析,其中第一任务、第二任务和第三任务的运行是通过由应用使用的且与内存数据库系统相关联的脚本语言控制的(206)。例如,第二分布式系统160可以被配置为执行一个或多个第三任务,一个或多个第三任务包括接收与分析操作有关的一个或多个数据块116以及执行对接收到的数据块116的分析。由第二分布式系统160执行的任务可以被认为是第三任务。
[0057]第二分布式系统160可以包括用于统计计算(包括执行分析)的任何类型的分布式系统。在一个实施例中,第二分布式系统160可以包括用于支持统计计算的开源编程语言。与第一分布式系统110类似,第二分布式系统160可以包括多个节点165。因此,分析操作可以分布在多个节点165上。在一个特定实施例中,第二分布式系统160可以包括R系统,R系统是用于支持超过3000个可用的统计软件包的统计计算的一种系统。在这个示例中,多个节点165上的运行可以通过消息传递接口(MPI)并行执行,其中MPI是R软件包。
[0058]根据实施例,与第二分布式系统160相关联的嵌入式脚本(例如,R脚本)与有关数据块116 —起可以被推到第二分布式系统160,以用于执行分析。如上面所指出的,与第一分布式系统110相关联的第一任务、与内存数据库系统130相关联的第二任务以及与第二分布式系统160相关联的第三任务可以通过与内存数据库系统130相关联的脚本语言(例如,SQL脚本)进行控制。如果内存数据库系统130采用除SQL脚本以外的不同脚本,则控制第一任务、第二任务和第三任务可以利用内存数据库系统130的编程语言完成。换句话说,联合系统100使用内存数据库系统130的脚本语言作为联合系统100的主要语言。使用内存数据库系统130的编程语言(例如,SQL脚本)作为主要语言允许第一分布式系统110和第二分布式系统160的结合。比如,SQL脚本可以调用与第一分布式系统110相关联的第一任务,诸如将传入数据处理成一组数据块116,并且可以调用与第二分布式系统160相关联的第三任务,诸如接收有关数据块116和执行对有关数据块116的分析。
[0059]第二分布式系统160的每个节点165可以包括通信单元165a和分析单元165b。通信单元165a可以被配置为根据用于支持在这两个系统之间传递数据的统一协议来处理内存数据库系统130和第二分布式系统160之间的通信。在一个示例中,通信单元165a可以通过存储器到存储器复制信道从内存数据库系统130的通信单元150接收数据块116以及与第二分布式系统160相关联的嵌入式脚本。比如,每个通信单元165a可以运行存储器到存储器复制指令,其中通过通信信道便于数据块的传递,通信信道可以是本领域中已知的任何类型的有线或无线通信信道。
[0060]分析单元165b可以根据嵌入式脚本执行对有关数据块116的分析。例如,分析计算可以包括发现数据中的模式的任何类型的分析,这种分析可以依赖于统计的应用、计算机编程和/或操作研究来分析业务操作的上下文或与公司业绩相关的其他领域的数据。此夕卜,分析计算可以涉及业务业绩的改善和预测。因此,根据实施例,分析的执行被分配给第二分布式系统160,第二分布式系统160可以是R系统。
[0061]可以从第二分布式系统接收分析的结果并且将该结果存储在内部数据库中(208)。例如,内存数据库系统130可以从第二分布式系统160接收分析的结果并且将该结果存储在内部存储装置136中。特别地,通过分析单元165b,多个节点165可以执行由嵌入式R脚本所指定的分析,而且分析的结果可以通过存储器到存储器复制信道发送回内存数据库系统130。内存数据库系统130可以将结果存储在内部存储装置136中。
[0062]图3A、图3B、图4、图5A、图5B、图5C、图图6和图7是根据实施例的联合系统100的代码实现。
[0063]图3A至图3B示出了由第一分布式系统100执行的、与收集和处理传入数据有关的新的映射任务的代码实现。下面进一步解释图3A至图3B的代码实现的主要部分。
[0064]参照图3A,部分310涉及存储器映射任务,其可以是新的自定义的映射任务。部分315提供了多个初始步骤,诸如任务上下文的创建、映射器对象以及通过作业配置生成输入格式。部分320包括用于获得用于存储器映射任务的输入分割的指示。如果第一分布式系统110包括Hadoop系统,则输入分割是输入的逻辑分割,其中输入文件没有被物理分害I]。数据分割可以包含元数据信息,诸如文件中分割的顺序号。参照图3B。部分325包括将输出对象(例如,映射存储器输出收集器(MapMemoryOutputCoIlector))创建为结果收集器(result collector)的指令,结果收集器可以取代原来的记录写入器(RecordWriter)以便将结果直接发送给本地守护进程(daemon)。部分330可以初始化映射器的上下文,并运行存储器映射任务。在这个示例中,在run函数中调用由用户提供的映射功能。最后,输出将被关闭,从而所有结果被序列化到本地结果收集器守护进程(local result collectordaemon)。
[0065]图4涉及MapMemoryOutputCo I lector,当根据实施例调用关闭方法(closemethod)时,该MapMemoryOutputCo I lector可以被新的映射任务使用以便将输出存储在存储器中并且将一个映射任务的结果发送到本地守护进程。部分405包括类字段声明和构造函数,以执行初始过程步骤。值得注意的是,构造函数中分割索引(split index)参数被传递以指示结果数据是否应该被输入到最终的输出文件中。部分410包括写方法(writemethod),该写方法在映射函数中被调用,以便将每个结果存储在类的存储缓冲区中。部分415包括刷新方法(flush method),该刷新方法用于在关闭控制器之前将结果缓冲区序列化到本地结果收集守护进程。缓冲区可以存储第二字段中的分割索引(例如,顺序号)。部分420包括关闭方法(close method),该关闭方法可以在关闭本地套接字之前刷新缓冲区。
[0066]图5A至图涉及根据实施例的将数据从映射任务传递到内存数据库系统130的结果收集守护进程。例如,每个节点115包括从在各自节点115中运行的所有映射任务接收数据的特定守护进程。
[0067]参照图5A,部分505包括声明和初始设置方法。部分510包括获得统一守护对象的单独方法。参照图5B,部分515包括获取数据方法(get Data method),该获取数据方法从缓冲区异步地获取数据并且将该数据发送到数据流分层结构中的下一个停止守护进程。部分520包括输入数据方法(put Data method),该输入数据方法根据配置将来自守护进程缓冲区的数据发送到远程守护进程,或者直接发送到内存数据库系统130。部分525包括启动守护进程的指令,该启动守护进程将监听指定套接字端口(sock port)以接受传入连接和数据。参照图5C,部分530包括主方法(main method),该主方法是运行守护进程的入口。参照图5C和图部分535包括数据接收器类(Data Receiver class),该数据接收器类可以实现负责接收数据并将数据保存到数据缓冲区的可运行方法。参照图5D,部分540包括数据发送器类(Data Sender class),该数据发送器类也可以实现负责根据配置将数据发送到下一个守护进程或者直接发送到内存数据库系统130的可运行方法。
[0068]图6示出根据实施例的内存数据库系统130中的、用于将接收到的数据块116存储到内部存储装置136中的指令。部分605包括从第一分布式系统110接收数据块116并将该数据块116保存在内部存储装置136的数据缓冲区中的指令。部分610包括获得内部存储装置136的列(column)以便消耗缓冲区中的数据块116的指令。部分615包括从缓冲区读取的数据块116并将它们顺序地存储在内部存储装置136的列中的指令。
[0069]图7示出根据实施例的、内存数据库系统130如何发出联合查询的示例SQL脚本代码。部分705包括创建表类型以便保持来自第一分布式系统110的结果模式(resultschema)的指令。部分710包括创建一个过程以便调用相关的驱动程序功能的指令。部分715包括创建表以便存储最终结果的指令。部分720包括利用结果的概述调用过程的指令。
[0070]这里描述的各种技术的实现方式可以被实施在数字电子电路中,或者实施在计算机硬件、固件、软件,或者它们的组合中。实现方式可以实施为计算机程序产品,即有形地具体实施在信息载体中的计算机程序,信息载体例如在机器可读存储设备中或者在传播的信号中,以供数据处理装置执行或者控制数据处理装置的操作,所述数据处理装置例如可编程处理装置、计算机或多个计算机。计算机程序,诸如上面描述的计算机程序,可以用任何形式的编程语言编写,包括汇编语言或解释语言,并且,它可以被以任何形式部署,包括作为独立的程序或者作为模块、组件、子程序或其他适于在计算环境中使用的单元。计算机程序可以被部署为在一个计算机上执行或在位于一个地点或跨过多个地点分布并被通信网络互连起来的多个计算机上执行。
[0071]方法步骤可以被一个或多个可编程处理器执行,所述可编程处理器执行计算机程序,以便通过对输入数据操作和产生输出来执行功能。方法步骤还可以被专用逻辑电路执行,或者装置可以被实施为专用逻辑电路,所述专用逻辑电路例如FPGA (现场可编程门阵列)或ASIC (专用集成电路)。
[0072]作为例子,适于执行计算机程序的处理器包括通用和专用微处理器,以及任何类型的数字计算机的任意一个或多个处理器。一般来说,处理器将从只读存储器或随机存取存储器接收指令和数据,或者从两者都接收指令和数据。计算机的元件可以包括至少一个用于执行指令的处理器,和用于存储指令和数据的一个或多个存储器设备。一般来说,计算机还可以包括,或者被可操作地连接,以从一个或多个用于存储数据的海量储存设备接收数据,或把数据传送到海量储存设备,或者二者皆有,所述海量储存设备例如:磁盘、磁光盘或光盘。适于具体实施计算机程序指令和数据的信息载体包括所有形式的非易失性存储器,作为例子,包括半导体存储器器件,例如EPROM、EEPROM和闪存设备;磁盘,例如内置硬盘或可移动磁盘;磁光盘;以及⑶-ROM和DVD-ROM盘。处理器和存储器可以以专用逻辑电路补充,或者被包含在专用逻辑电路中。
[0073]为了提供和用户的交互,实现方式可以在具有显示设备和键盘以及定点设备的计算机上实施,显示设备例如阴极射线管(CRT)或液晶显示器(IXD)监视器,用于向用户显示信息,键盘和指示设备例如鼠标或轨迹球,用户利用它们可以提供到计算机的输入。其他种类的设备也可以被用来提供和用户的交互;例如,提供给用户的反馈可以是任何形式的感觉反馈,例如视觉反馈、听觉反馈或触觉反馈,并且,可以以任何形式接收来自用户的输入,包括声音、语音或触觉输入。
[0074]实现方式可以被在包括后端组件或包括中间件组件或包括前端组件的计算系统中实施,或者在这些后端、中间件、前端组件的任意组合中实施,后端组件例如数据服务器,中间件组件例如应用服务器,前端组件例如具有图形用户界面,或Web浏览器的客户端计算机,通过图形用户界面或Web浏览器,用户可以和实现方式进行交互。可以利用数字数据通信的任何形式或介质互连组件,数字数据通信介质例如通信网络。通信网络的例子包括:局域网(LAN)和广域网(WAN),例如因特网。
[0075]虽然如这里所描述的那样已经示出了所描述的实现方式的某些特征,但是本领域普通技术人员现在应当想到很多修改、替换、变化和等同物。因此应当理解,所附权利要求旨在覆盖落入实施例的实质精神内的所有这样的修改和变化。
【权利要求】
1.一种支持用于执行分析的应用的联合系统,该联合系统包括: 第一分布式系统,用于执行一个或多个第一任务,该一个或多个第一任务包括将传入数据处理成一组数据块; 内存数据库系统,用于执行一个或多个第二任务,该一个或多个第二任务包括从第一分布式系统接收一组数据块并且将该组数据块存储在内部存储装置中;以及 第二分布式系统,用于执行一个或多个第三任务,该一个或多个第三任务包括从内存数据库系统接收一组数据块中的至少一个数据块并且执行对所述至少一个数据块的分析,其中,第一任务、第二任务和第三任务的运行是通过由所述应用使用的、且与内存数据库系统相关联的脚本语言来控制的, 其中,该一个或多个第三任务包括从第二分布式系统接收分析的结果并将该结果存储在内部存储装置中。
2.如权利要求1所述的联合系统,其中,所述第一分布式系统包括Hadoop系统,而且所述第二分布式系统包括R系统。
3.如权利要求1所述的联合系统,其中,所述脚本语言包括结构化查询语言(SQL)脚本,所述SQL脚本包括嵌入式R语言脚本。
4.如权利要求1所述的联合系统,其中,所述内存数据库系统被配置为通过存储器到存储器复制信道从第一分布式系统接收一组数据块。
5.如权利要求1所述的联 合系统,其中,所述第一分布式系统包括多个节点,而且每个节点都包括转换单元,该转换单元被配置为将传入数据转换成具有能够与内存数据库系统的内部存储装置兼容的格式的一个或多个数据块。
6.如权利要求1所述的联合系统,其中,所述内存数据库系统包括排序单元,该排序单元被配置为对一组数据块进行排序,以使得该组数据块中的数据块不可用于分析,直到该组数据块中的先前数据块都被接收为止。
7.如权利要求1所述的联合系统,其中,所述第一分布式系统包括排序单元,该排序单元被配置为在将一组数据块发送到内存数据库系统之前对该组数据块进行排序。
8.如权利要求1所述的联合系统,其中,所述与内存数据库系统相关联的脚本语言包括具有与第二分布式系统相关联的脚本语言的一个或多个命令,其中内存数据库系统将一个或多个命令与至少一个数据块一起发送到第二分布式系统以用于执行分析。
9.如权利要求8所述的联合系统,其中,第二分布式系统从内存数据库系统接收至少一个数据块包括通过存储器到存储器复制信道接收所述一个或多个命令以及至少一个数据块。
10.如权利要求9所述的联合系统,其中,所述内存数据库系统通过存储器到存储器复制信道接收分析的结果。
11.如权利要求1所述的联合系统,还包括: 数据发送器,该数据发送器被配置为从第一分布式系统接收一组数据块,确定该组数据块是否达到阈值水平,并且如果该组数据块被确定为达到阈值水平则发送该组数据块。
12.如权利要求1所述的联合系统,还包括: 数据传递协调器,该数据传递协调器被配置为将一组数据块从第一分布式系统传递到内存数据库系统。
13.一种支持用于执行分析的应用的方法,该方法包括: 第一分布式系统执行一个或多个第一任务,该一个或多个第一任务包括将传入数据处理成一组数据块; 内存数据库系统执行一个或多个第二任务,该一个或多个第二任务包括从第一分布式系统接收一组数据块并且将该组数据块存储在内部存储装置中;以及 第二分布式系统执行一个或多个第三任务,该一个或多个第三任务包括从内存数据库系统接收一组数据块中的至少一个数据块,并且执行对所述至少一个数据块的分析,其中第一任务、第二任务和第三任务的运行是通过由所述应用使用的且与内存数据库系统相关联的脚本语言来控制的, 其中,该一个或多个第三任务包括从第二分布式系统接收分析的结果并将该结果存储在内部存储装置中。
14.如权利要求13所述的方法,其中,从第一分布式系统接收一组数据块包括通过存储器到存储器复制信道从第一分布式系统接收一组数据块。
15.如权利要求13所述的方法,其中,所述一个或多个第一任务还包括将传入数据转换成具有能够与内存数据库系统的内部存储装置兼容的格式的一个或多个数据块。
16.如权利要求13所述的方法,其中,所述一个或多个第二任务包括对一组数据块进行排序,以使得该组数据块中 的数据块不可用于分析,直到该组数据块中的先前数据块都被接收为止。
17.如权利要求13所述的方法,其中,所述一个或多个第一任务包括在将一组数据块发送到内存数据库系统之前对该组数据块进行排序。
18.如权利要求13所述的方法,其中,所述与内存数据库系统相关联的脚本语言包括具有与第二分布式系统相关联的脚本语言的一个或多个命令,其中所述一个或多个第二任务包括将一个或多个命令与至少一个数据块一起发送到第二分布式系统以用于执行分析。
19.如权利要求18所述的方法,其中,所述一个或多个第三任务包括通过存储器到存储器复制信道接收所述一个或多个命令以及至少一个数据块。
20.一种计算机程序产品,该计算机程序产品有形地具体实施在非临时性计算机可读存储介质上并包括可运行代码,当该可运行代码运行时被配置为使联合系统执行以下操作: 通过第一分布式系统执行一个或多个第一任务,该一个或多个第一任务包括将传入数据处理成一组数据块; 执行一个或多个第二任务,该一个或多个第二任务包括从第一分布式系统接收一组数据块并且将该组数据块存储在内存数据库系统的内部存储装置中;以及 通过第二分布式系统执行一个或多个第三任务,该一个或多个第三任务包括从内存数据库系统接收一组数据块中的至少一个数据块并且执行对所述至少一个数据块的分析,其中,第一任务、第二任务和第三任务的运行是通过由所述应用使用的且与内存数据库系统相关联的脚本语言来控制的, 其中,该一个或多个第三任务包括从第二分布式系统接收分析的结果并将该结果存储在内部存储装置中。
【文档编号】G06F17/30GK103678425SQ201210363631
【公开日】2014年3月26日 申请日期:2012年9月26日 优先权日:2012年9月26日
【发明者】C.孙, Y.金, 黎文宪 申请人:Sap股份公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1