掌桥专利:专业的专利平台
掌桥专利
首页

数据处理方法以及系统

文献发布时间:2023-06-19 16:20:42



技术领域

本说明书实施例涉及数据处理技术领域,特别涉及一种数据处理方法。

背景技术

行数限定是数据库的基本功能,数量限定通常采用堆方式实现排序,并且保持固定元素数量。单机版数据库由于硬件资源受限,处理性能不能很好的满足大数据需求。分布式数据库往往采用分阶段的方式实现行数限定功能,但局部计算阶段和最终计算阶段均采用堆实现,且为了防止出现内存溢出,局部计算阶段在限定数量较大时会多次输出结果到最终计算阶段。这样导致最终计算阶段数据处理量大,造成资源浪费。

发明内容

有鉴于此,本说明书实施例提供了一种数据处理方法。本说明书一个或者多个实施例同时涉及一种数据处理系统,一种计算设备,一种计算机可读存储介质以及一种计算机程序,以解决现有技术中存在的技术缺陷。

根据本说明书实施例的第一方面,提供了一种数据处理方法,应用于数据处理系统,所述系统包括调度节点、第二计算节点和至少两个第一计算节点,包括:

所述调度节点,响应于数据查询命令确定第一计算任务和第二计算任务,将所述第一计算任务分配到所述至少两个第一计算节点,将所述第二计算任务分配到所述第二计算节点,其中,所述第一计算任务以及所述第二计算任务中携带有目标数据量;

所述第一计算节点,根据第一计算任务进行数据查询得到与所述目标数据量相同的初始数据,并对所述初始数据进行排序,且将排序后的初始数据发送至第二计算节点;

所述第二计算节点,根据所述第二计算任务,从所述排序后的初始数据中顺序获取目标数据量的目标数据。

根据本说明书实施例的第二方面,提供了一种数据处理系统,包括调度节点、第二计算节点和至少两个第一计算节点;

所述调度节点,被配置为响应于数据查询命令确定第一计算任务和第二计算任务,将所述第一计算任务分配到所述至少两个第一计算节点,将所述第二计算任务分配到所述第二计算节点,其中,所述第一计算任务以及所述第二计算任务中携带有目标数据量;

所述第一计算节点,被配置为根据第一计算任务进行数据查询得到与所述目标数据量相同的初始数据,并对所述初始数据进行排序,且将排序后的初始数据发送至第二计算节点;

所述第二计算节点,被配置为根据所述第二计算任务,从所述排序后的初始数据中顺序获取目标数据量的目标数据。

根据本说明书实施例的第三方面,提供了一种计算设备,包括:

存储器和处理器;

所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令,该计算机可执行指令被处理器执行时实现上述数据处理方法的步骤。

根据本说明书实施例的第四方面,提供了一种计算机可读存储介质,其存储有计算机可执行指令,该指令被处理器执行时实现上述数据处理方法的步骤。

根据本说明书实施例的第五方面,提供了一种计算机程序,其中,当所述计算机程序在计算机中执行时,令计算机执行上述数据处理方法的步骤。

本说明书实施例提供一种数据处理方法以及系统,其中所述数据处理方法应用于数据处理系统,所述系统包括调度节点、第二计算节点和至少两个第一计算节点,包括:所述调度节点,响应于数据查询命令确定第一计算任务和第二计算任务,将所述第一计算任务分配到所述至少两个第一计算节点,将所述第二计算任务分配到所述第二计算节点,其中,所述第一计算任务以及所述第二计算任务中携带有目标数据量;所述第一计算节点,根据第一计算任务进行数据查询得到与所述目标数据量相同的初始数据,并对所述初始数据进行排序,且将排序后的初始数据发送至第二计算节点,所述第二计算节点,根据所述第二计算任务,从所述排序后的初始数据中顺序获取目标数据量的目标数据。通过第一计算节点对初始数据进行排序,将排序后的初始数据发送至第二计算节点,第二计算节点从接收到初始数据中顺序取得目标数据量的目标数据,由于第二计算节点接收到的初始数据为有序的,所以在获取目标数据时可以顺序获取目标数据量的目标数据即可,不用处理所有初始数据,减少了数据处理量和使用的处理资源,提高了数据处理效率。

附图说明

图1是本说明书一个实施例提供的一种数据处理方法的示意图;

图2是本说明书一个实施例提供的一种数据处理方法的流程图;

图3是本说明书一个实施例提供的一种数据处理方法的处理过程流程图;

图4是本说明书一个实施例提供的一种数据处理系统的结构示意图;

图5是本说明书一个实施例提供的一种计算设备的结构框图。

具体实施方式

在下面的描述中阐述了很多具体细节以便于充分理解本说明书。但是本说明书能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本说明书内涵的情况下做类似推广,因此本说明书不受下面公开的具体实施的限制。

在本说明书一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本说明书一个或多个实施例中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本说明书一个或多个实施例中可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一也可以被称为第二,类似地,第二也可以被称为第一。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

首先,对本说明书一个或多个实施例涉及的名词术语进行解释。

数据库:是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。

堆(Heap):是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象。

链表:是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。

抽象语法树(Abstract Syntax Tree,AST):或简称语法树(Syntax tree),是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。

结构化查询语言(Structured Query Language):简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

Antlr:是指可以根据输入自动生成语法树并可视化的显示出来的开源语法分析器。

有序行数限定功能是数据库的基本功能,是一组高频使用语法。单机数据库系统资源受限扩展性较差,不能满足数据量大且实时性能较好的应用需求。分布式数据库使用较为广泛,支持多种内部需求和外部客户需求,当前部署服务器数量较大,但是客户对实时性要求较高。另外,分布式数据库往往采用分阶段的方式实现行数限定功能,但局部计算阶段和最终计算阶段均采用堆实现,且为了防止出现内存溢出,局部计算阶段在限定数量较大时会多次输出结果到最终计算阶段。

在一种可实现的方式中,参见图1,图1示出了根据本说明书一个实施例提供的一种数据处理方法的示意图,包括调度节点102、局部计算节点104和最终计算节点106,调度节点102在接收到数据查询命令的情况下,将数据查询命令解析为局部计算阶段和全局计算阶段,然后通过局部计算节点104执行局部计算阶段,通过最终计算节点106执行全局计算阶段。

例如,调度节点102接收到数据查询命令,行数限定为100万,行数限定可以理解为取的数据量,在某个局部计算节点104中,总数据为1000万,但在实际应用中,因为防止出现内存溢出的情况,该局部节点每次只能取10万数据,因为需要取多次数据,每次可能存在取到重复数据的情况,则实际获取的数据量大于100万,增加了局部计算节点104计算量,并且最终传输给最终计算节点106的数据量大于100万,增加了最终计算节点106的数据处理难度。

基于此,如何实现一种能够充分利用分布式系统硬件资源,时间复杂度较低,实时性能较好的有序行数限定算法是一大挑战。

在本说明书中,提供了一种数据处理方法,本说明书同时涉及一种数据处理系统,一种计算设备,以及一种计算机可读存储介质,在下面的实施例中逐一进行详细说明。

参见图2,图2示出了根据本说明书一个实施例提供的一种数据处理方法的流程图,该数据处理方法应用于数据处理系统,所述系统包括调度节点、第二计算节点和至少两个第一计算节点,具体包括以下步骤。

步骤202:所述调度节点,响应于数据查询命令确定第一计算任务和第二计算任务,将所述第一计算任务分配到所述至少两个第一计算节点,将所述第二计算任务分配到所述第二计算节点,其中,所述第一计算任务以及所述第二计算任务中携带有目标数据量。

其中,调度节点可以为分布式系统中的控制管理、对任务进行调度的节点;数据查询命令可以为数据库的查询命令,即SQL语句,例如,数据查询命令为select * fromtable_1 order by column_1 limit 10;第一计算任务可以理解为局部计算阶段,也就是说,从数据库中获取数据的节点所执行的任务;第二计算任务可以理解为最终计算阶段,即,从局部计算阶段获取到的数据中获取需要的数据的节点所执行的任务;相应地,第一计算节点可以理解为分布式系统中进行局部计算的节点,第二计算节点可以理解为分布式系统中进行最终计算阶段的节点;目标数据量可以为查询命令中携带的数据量,例如,数据查询命令为select * from table_1 order by column_1 limit 10,则其中的“limit 10”即为目标数据量,“limit 10”的含义为获取数据库中前十行的数据。

在实际应用中,本说明书实施例的数据处理方法可以分为四部分:逻辑计划节点构建、逻辑阶段划分、局部计算阶段执行、全局计算阶段执行。逻辑计划节点构建可以理解为用于构造行数限定对应的逻辑计划节点,即需要对数据库查询指令进行解析、构建数据库查询的任务以及将数据库查询的任务分配给不同的节点。

例如,存在一条数据库查询指令,该指令为:select * from (select column_1,column_2, row_number() over(partition by column_1 orderby column_2) rn fromtable_1) rn<10,其中,column_1可以理解为班级,column_2可以理解为物理分数,table_1可以理解为年级,rn可以理解为目标数据量,则该条数据库查询指令的意思为查询该年级中班级的物理分数,每个班级取前十个物理分数,该年级有10个班,则共需要取到100行数据。将该条查询指令构建第一计算任务和第二计算任务,将第一计算任务分配给至少两个第一计算节点,将第二计算任务分配给第二计算节点。

在实际应用中,在行数限定主要分为四种场景,分别为无分组和无排序的行数限定,有分组和无排序的行数限定,无分组和有排序的行数限定和有分组和有排序的行数限定,其中,无分组和无排序的行数限定和有分组和无排序的行数限定没有排序要求,无需比较所有数据,实现逻辑较为简单,性能优化空间有限,因此本实施例是为了解决无分组和有排序的行数限定和有分组和有排序的行数限定两种应用场景。

具体地,所述响应于数据查询命令确定第一计算任务和第二计算任务之前,还包括:

所述调度节点,接收数据查询语句,确定所述数据查询语句的类型;

在所述数据查询语句的类型为所述目标类型的情况下,确定所述数据查询语句为所述数据查询命令。

其中,数据查询语句可以理解为数据库的查询语句,例如,select * from(select column_1, column_2, row_number() over(partition by column_1 orderbycolumn_2) rn from table_1) rn<10,数据查询语句的类型可以理解为上述的无排序的行数限定,有分组和无排序的行数限定,无分组和有排序的行数限定和有分组和有排序的行数限定四种类型,在所述数据查询语句的类型为所述目标类型可以理解为无分组和有排序的行数限定或者有分组和有排序的行数限定的类型。

例如,接收到查询语句为:select * from table_1 limit 10,该语句的类型为无分组和无排序的行数限定,则不确定为数据查询命令。相应地,接收到查询语句为:select* from table_1 group by column_1 limit 10,该语句的类型为有分组和无排序的行数限定,则不确定为数据查询命令。接收到查询语句为:select * from table_1 order bycolumn_1 limit 10,该语句的类型为无分组和有排序的行数限定,则确定为数据查询命令。接收到查询语句为:select * from (select column_1, column_2, row_number()over(partition by column_1 orderby column_2) rn from table_1) rn<10,该语句的类型为有分组和无排序的行数限定,则确定为数据查询命令。

在一种可实现的方式中,所述响应于数据查询命令确定第一计算任务和第二计算任务,包括:

所述调度节点,响应于数据查询指令,对所述数据查询指令进行语义解析得到初始抽象语法树;

将所述初始抽象语法树进行组装得到目标抽象语法树;

根据所述目标语法树确定第一计算任务和第二计算任务。

其中,初始抽象语法树可以理解为抽象语法树(Abstract Syntax Tree,AST);目标抽象语法树可以理解为将初始抽象语法树中的节点拆分为任务中的节点,进行组合得到的语法树。

在实际应用中,采用Antlr4工具对SQL语句执行词法语法分析,得到AST(抽象语法树,Abstract Syntax Tree),然后根据行数限定的场景转换为不同的逻辑计划节点。

沿用上例,存在一条数据库查询指令,该指令为:select * from (selectcolumn_1, column_2, row_number() over(partition by column_1 orderby column_2) rn from table_1) rn<10,其中,column_1可以理解为班级,column_2可以理解为物理分数,table_1可以理解为年级,rn可以理解为目标数据量,则该条数据库查询指令的意思为查询该年级中班级的物理分数,每个班级取前十个物理分数,该年级有10个班,则共需要取到100行数据。将该条查询指令使用Antlr4工具进行词法解析和语法解析得到初始抽象语法树,在将初始抽象语法树中的各部分拆分为名为TopNRowNumberNode的节点,根据该节点构建第一计算任务和第二计算任务,将第一计算任务分配给至少两个第一计算节点,将第二计算任务分配给第二计算节点。

需要说明的是,上述实施例中的“使用Antlr4工具进行词法解析和语法解析得到初始抽象语法树,在将初始抽象语法树中的各部分拆分为名为TopNRowNumberNode的节点”可以使用本领域的常规技术手段,此处不再进行赘述。

在一种可实现的方式中,所述将所述第一计算任务分配到所述至少两个第一计算节点,包括:

所述调度节点,根据所述第一计算任务确定数据节点;

根据所述数据节点中原始数据的数量,确定所述数据节点对应的第一计算节点的数量;

根据所述第一计算节点的数量和亲和性规则确定原始数据对应的第一计算节点。

其中,数据节点可以为数据库所在的节点,数据节点为多个;原始数据可以理解为数据节点中全部的数据,例如,数据节点A中存在1000万行数据;数据节点对应的第一计算节点的数量可以理解为,数据节点中的数据需要通过几个计算节点获取;亲和性可以理解为两个节点进行连接的权重,亲和性规则可以为两个节点之间数据传输延迟低,则这两个节点的亲和性高,反之,如果两个节点之间数据传输延迟高,则这两个节点的亲和性低。

在实际应用中,数据节点中可能存在数据分布不均衡的情况,当存在数据过多的情况下,需要加入其他节点进行计算,所以可能一个数据节点对应多个计算节点。

例如,数据节点A中存在10万行数据,数据节点B中存在10万行数据,数据节点C中存在100万行数据,每个数据节点的计算能力为50万行数据,则数据节点C不能一次性对100万数据计算完成,则根据亲和性规则,找到网络连接延迟较低的节点D,分别通过数据节点C和节点D计算数据节点C中的100万行数据。

本说明书实施例通过寻找其他亲和性高的节点,一起并行计算数据,提高了数据处理的效率。

在一种可实现的方式中,所述根据所述数据节点中原始数据的数量,确定所述数据节点对应的第一计算节点的数量,包括:

所述调度节点,在所述数据节点中原始数据的数量超过数量阈值的情况下,确定所述数据节点对应至少两个第一计算节点,其中,所述至少两个第一计算节点包括所述数据节点;

在所述数据节点中原始数据的数量未超过数量阈值的情况下,确定所述数据节点为第一计算节点。

其中,数量阈值可以理解为节点可以处理的最大数据量,例如,数据节点的计算能力为50万行数据,则数量阈值为50万行数据。

在实际应用中,当存在数据过多的情况下,需要加入其他节点进行计算,则首先确定需要多少个节点可以完成数据的处理,然后根据亲和性规则确定第一计算节点,所以可能一个数据节点对应多个第一计算节点,另一种情况,当数据节点中的数据较少的情况下,也就是说当前数据节点可以处理完自己的数据,则不再分配其他节点进行处理。

沿用上例,数据节点A中存在10万行数据,数据节点B中存在10万行数据,数据节点C中存在100万行数据,每个数据节点的计算能力为50万行数据,则数据节点C不能一次性对100万数据计算完成,则首先确定需要多少个节点可以完成数据的处理,然后根据亲和性规则,找到相应数量的节点,处理数据节点C中的100万行数据。在数据节点A中的10万行数据小于数量阈值,则可以在自身的机器中完成数据处理,确定数据节点A为一个第一计算节点,相应地,在数据节点B中的10万行数据小于数量阈值,则可以在自身的机器中完成数据处理,确定数据节点B为一个第一计算节点。

在一种可实现的方式中,所述在所述数据节点中原始数据的数量超过数量阈值的情况下,确定所述数据节点对应至少两个第一计算节点,包括:

所述调度节点,确定所述数据节点中原始数据的数量和所述数量阈值的比值,在所述比值为整数的情况下,确定所述比值数量为所述数据节点对应的第一计算节点的数量;

在所述比值不为整数的情况下,确定大于所述比值的整数为所述数据节点对应的第一计算节点的数量。

在实际应用中,当存在数据过多的情况下,可以通过每个节点的计算能力和数据总量确定需要多少个节点进行数据处理,通常可以通过比值确定,在比值为整数的情况下,可以直接确定第一计算节点的数量,在比值不为整数的情况下,为保证每个节点均能完成数据处理,需要增加一个节点进行数据处理。

沿用上例,数据节点A中存在10万行数据,数据节点B中存在10万行数据,数据节点C中存在100万行数据,每个数据节点的计算能力为50万行数据,则数据节点C不能一次性对100万数据计算完成,则原始数据的数量和数量阈值的比值为2,也就是说,需要两个节点对处理数据节点C中的100万行数据进行处理,数据节点C作为其中的一个节点,然后根据亲和性规则,找到节点D,通过节点C和节点D共同处理数据节点C中的100万行数据。

又例如,数据节点C中存在100万行数据,每个数据节点的计算能力为40万行数据,则数据节点C不能一次性对100万数据计算完成,则原始数据的数量和数量阈值的比值为2.5,也就是说,两个节点不能完成100万行数据的处理,则可以分配三个节点对处理数据节点C中的100万行数据进行处理,数据节点C作为其中的一个节点,然后根据亲和性规则,找到节点D和节点E,通过节点C、节点D和节点E共同处理数据节点C中的100万行数据,优选地,每个节点可以平均分摊100万行数据。

本说明书实施例通过在局部计算阶段按照数据源分片调度,充分利用了分布式系统的硬件资源,具有较高的并行度。

步骤204:所述第一计算节点,根据第一计算任务进行数据查询得到与所述目标数据量相同的初始数据,并对所述初始数据进行排序,且将排序后的初始数据发送至第二计算节点。

其中,对所述初始数据进行排序可以理解为通过一行数据的某一项数据进行排序,例如,通过数据的序号进行排序,或者通过数据的值进行排序,此处不进行限定。

在实际应用中,局部计算阶段执行,采用堆数据结构实现有序行数限定算法,由于原始数据集,不能保证有序性,因此堆是局部计算较为合理的数据结构。并且,为了防止限定行数较大,且数据离散程度较高,局部计算阶段没有限定局部计算阶段的内存。

例如,目标数据量为100万行数据,在获取到100万的行数据之后,对行数据进行排序,然后再将有顺序的100万行数据发送到最终计算的节点。

在一种可实现的方式中,所述根据第一计算任务进行数据查询得到与所述目标数据量相同的初始数据,并对所述初始数据进行排序,包括:

所述第一计算节点,根据第一计算任务确定数据节点,并获取所述数据节点中的原始数据;

确定所述原始数据的数据量与预设堆结构的元素数量,在所述原始数据的数据量小于等于所述元素数量的情况下,将所述原始数据放入所述堆结构中,将所述堆结构中的数据作为所述初始数据,其中,所述元素数量等于所述目标数据量;

在所述原始数据的数据量大于所述元素数量的情况下,从所述原始数据中取出所述元素数量的数据放入所述堆结构中,将所述原始数据中的其他数据插入所述堆结构,将所述堆结构中的数据作为所述初始数据,其中,所述其他数据为未放入所述堆结构的原始数据。

其中,预设堆结构可以理解为堆数据结构,相应地,元素数量可以理解为堆数据结构中的元素数量,元素数量可以预设为目标数据量。

在实际应用中,如果堆元素数小于行数限定值,则将数据集元素直接插入堆。如果堆元素数大于等于行数限定值,逐行遍历数据集,比较数据集元素与堆最小元素。如果数据集元素较大,则将堆最小元素去除,然后将数据集元素插入堆。如果数据集元素相等或者较小,则不做任何操作。

例如,堆的元素数量为100万,数据节点A中存在的原始数据为1000万行数据,则原始数据的数据量大于元素数量,先从1000万行数据中取出100万行数据插入到堆中,再将剩下的900万行数据依次进行判断,判断是否可以插入到堆中,当处理完1000万行数据的情况下,堆中的数据就是100万有序的初始数据,将这100万有序的初始数据发送给最终计算节点。

又例如,堆的元素数量为100万,数据节点A中存在的原始数据为90万行数据,则原始数据的数据量小于等于元素数量,直接将90万行数据插入到堆中,堆中的数据就是90万有序的初始数据,将这90万有序的初始数据发送给最终计算节点。

在另一种可实现的方式中,所述根据第一计算任务进行数据查询得到与所述目标数据量相同的初始数据,并对所述初始数据进行排序,包括:

所述第一计算节点,根据第一计算任务确定数据节点,并获取所述数据节点中的原始数据,其中,所述原始数据携带分组标识;

根据所述分组标识对所述初始数据进行分组得到原始分组数据;

比较每个原始分组数据中的原始数据的数据量与对应的预设堆结构的元素数量,在所述原始数据的数据量小于等于所述元素数量的情况下,将所述原始数据放入所述堆结构中,将所述堆结构中的数据作为所述初始数据,其中,所述元素数量等于所述目标数据量;

在所述原始数据的数据量大于所述元素数量的情况下,从所述原始数据中取出所述元素数量的数据放入所述堆结构中,将所述原始数据中的其他数据插入所述堆结构,将所述堆结构中的数据作为所述初始数据,其中,所述其他数据为未放入所述堆结构的原始数据。

其中,分组标识可以理解为在数据查询指令中的存在分组的命令,从而在得到的数据中带有分组标识。

在实际应用中,如果存在分组的情况下,则需要提前计算分组编号,然后对于每一个分组分别进行处理。

例如,目标数据量为100万,堆的元素数量为25万,数据节点A中存在的原始数据为1000万行数据,根据分组标识可以确定分1000万行数据为四组,原始数据的数据量大于元素数量,先从1000万行数据中取出四组25万行数据插入到堆中,再将剩下的700万行数据依次进行判断,判断是否可以插入到每组的堆中,当处理完1000万行数据的情况下,堆中的数据就是100万共四组有序的初始数据,将这100万有序的初始数据发送给最终计算节点。

又例如,堆的元素数量为20万,数据节点A中存在的原始数据为90万行数据,根据分组标识可以确定分90万行数据为四组,分别为20万行数据、20万行数据、20万行数据和30万行数据,前三组原始数据的数据量小于等于元素数量,直接将20万行数据插入到堆中,剩下一组按照上述方法处理完30万行数据,每组对应的堆中的数据就是20万有序的初始数据,将这四组20万有序的初始数据发送给最终计算节点。

在一种可实现的方式中,所述将所述原始数据中的其他数据插入所述堆结构,包括:

所述第一计算节点,获取所述原始数据中第i个数据,将所述第i个数据与堆结构的末尾元素进行比较,其中,i的初始值为1;

在所述第i个数据满足堆插入规则的情况下,将所述末尾元素删除,将所述第i个数据插入所述堆结构,使i自增1,并继续执行所述获取所述原始数据中第i个数据,直至所述原始数据中的最后一个数据。

其中,末尾元素可以理解为堆的结构中的叶子节点;堆插入规则可以根据堆的类型进行确定,例如,堆的类型为最小堆,则第i个数据小于末尾元素的情况下,将末尾元素删除,将第i个数据插入堆中。

举例来说,堆的元素数量为5,数据节点A中存在的原始数据为6行数据,则原始数据的数据量大于元素数量,先从6行数据中取出5行数据插入到堆中,再将剩下的1行数据依次进行判断,判断是否可以插入到堆中。其中,6行数据分别为1、2、3、4、5、6,堆为最小堆,也就是从小到大进行排序,首先将2、3、4、5、6插入堆中,将1与6进行比较,1小于6,则可以将6删除,将1插入堆中,这样,堆中的数据为1、2、3、4、5。

本说明书实施例采用了合理的堆数据结构,在保证正确性的前提下,避免了不必要的比较和更新操作。

步骤206:所述第二计算节点,根据所述第二计算任务,从所述排序后的初始数据中顺序获取目标数据量的目标数据。

其中,从所述排序后的初始数据中顺序获取,可以理解为在有序的初始数据中依次获取每个数据。

在实际应用中,全局计算阶段执行,采用有序链表数据结构实现有序行数限定算法,由于局部计算阶段的输出数据集,能够保证有序性,因此有序链表是全局计算较为合理的数据结构。相当于两个有序集合进行合并,只需要移动对应的游标即可,并且在某些情况可以实现短路,因此提升了执行效率。

在一种可实现的方式中,所述根据所述第二计算任务,从所述排序后的初始数据中顺序获取目标数据量的目标数据,包括:

所述第二计算节点,确定所述目标数据量与所述初始数据的数量,在所述目标数据量大于所述初始数据的数量的情况下,将所述初始数据顺序放入预设链表结构中,将所述链表结构中的数据作为所述目标数据;

在所述目标数据量小于等于所述初始数据的数量的情况下,从所述初始数据中取出所述目标数据量的数据放入所述链表结构中,将所述初始数据中的其他数据插入所述链表结构,将所述链表结构中的数据作为所述目标数据,其中,所述其他数据为未放入所述链表结构的初始数据。

其中,预设链表结构可以理解为链表数据结构,例如:有序链表。

在实际应用中,如果堆元素数小于行数限定值,则将数据集元素直接插入有序链表。如果堆元素数大于等于行数限定值,逐行遍历数据集,比较数据集元素与有序链表最小元素。如果数据集元素较大,则将有序链表最小元素去除,然后将当前元素插入有序链表。如果当前元素相等或者较小,则停止遍历数据集。

例如,目标数据量为100万,接收到有序的初始数据为三个节点发送来的100万,共300万行数据,则初始数据的数据量大于元素数量,先从300万行数据中取出100万行数据插入到有序链表中,再将剩下的200万行数据依次进行判断,判断是否可以插入到有序链表中,当处理到相等、小于或者大于的数据的情况下,停止进行数据处理,有序链表中的数据就是100万目标数据。

又例如,目标数据量为150万,接收到有序的初始数据为三个节点发送来的50万,共150万行数据,则初始数据的数据量等于元素数量,将150万行数据插入到有序链表中,当处理完150万行数据的情况下,有序链表中的数据就是150万目标数据。

在另一种可实现的方式中,所述根据所述第二计算任务,从所述排序后的初始数据中顺序获取目标数据量的目标数据,包括:

所述第二计算节点,根据所述初始数据携带的分组标识确定初始分组数据;

确定所述目标数据量与每个初始分组数据中初始数据的数量,在所述目标数据量大于所述初始数据的数量的情况下,将所述初始数据顺序放入对应的预设链表结构中,将所述链表结构中的数据作为所述目标数据;

在所述目标数据量小于等于所述初始数据的数量的情况下,从所述初始数据中取出所述目标数据量的数据放入所述链表结构中,将所述初始数据中的其他数据插入所述链表结构,将所述链表结构中的数据作为所述目标数据,其中,所述其他数据为未放入所述链表结构的初始数据。

其中,分组标识可以理解为在数据查询指令中的存在分组的命令,从而在得到的数据中带有分组标识,同上述实施例中的分组标识。

在实际应用中,如果存在分组的情况下,则需要提前计算分组编号,然后对于每一个分组分别进行处理。

例如,目标数据量为20万,接收到有序的初始数据为三个节点发送来的100万,每个节点分别为4组25万行数据,共300万行数据,则每组初始数据的数据量大于每组对应的链表的元素数量,先从每组25万行数据中取出20万行数据插入到有序链表中,再将剩下的5万行数据依次进行判断,判断是否可以插入到有序链表中,当处理到相等、小于或者大于的数据的情况下,停止进行数据处理,有序链表中的数据就是20万目标数据。

在一种可实现的方式中,所述将所述初始数据中的其他数据插入所述链表结构,包括:

所述第二计算节点,获取所述初始数据中第j个数据,将所述第j个数据与链表结构的末尾元素进行比较,其中,j的初始值为1;

在所述第j个数据满足链表插入规则的情况下,将所述末尾元素删除,将所述第j个数据插入所述链表结构,使j自增1,并继续执行所述获取所述初始数据中第j个数据,直至所述第j个数据不满足链表插入规则。

其中,链表插入规则可以根据堆的类型进行确定,例如,有序链表为从小到大进行排序,则第j个数据比链表中最后一个数据小的情况下,删除最后一个数据,将第j个数据插入链表。

例如,链表的元素数量为5,接收到初始数据为两个接节点发送来的,分别为1、2、3、4和1、2、3、5,则初始数据的数据量大于元素数量,先从8行数据中取出5行数据插入到有序链表中,再将剩下的3行数据依次进行判断,判断是否可以插入到有序链表中。其中,有序链表从小到大进行排序,首先将1、1、2、3、4插入链表中,还剩下2、3、5,将2与4进行比较,2小于4,则可以将4删除,将2插入链表中,此时链表为:1、1、2、2、3,将3与3进行比较,3与3大小相同,则不进行插入,并且因为数据是有序的,可以不对后面的5进行处理,这样,链表中的数据为:1、1、2、2、3。

本说明书实施例有序集合进行合并,只需要移动对应的游标即可,并且在可以实现短路,即,达到条件不处理后续的数据,因此提升了处理效率。并且根据各个执行阶段的数据的特征,选择了较为合理的数据结构,降低了数据处理的时间复杂度。

本说明书实施例提供一种数据处理方法以及系统,其中所述数据处理方法应用于数据处理系统,所述系统包括调度节点、第二计算节点和至少两个第一计算节点,包括:所述调度节点,响应于数据查询命令确定第一计算任务和第二计算任务,将所述第一计算任务分配到所述至少两个第一计算节点,将所述第二计算任务分配到所述第二计算节点,其中,所述第一计算任务以及所述第二计算任务中携带有目标数据量;所述第一计算节点,根据第一计算任务进行数据查询得到与所述目标数据量相同的初始数据,并对所述初始数据进行排序,且将排序后的初始数据发送至第二计算节点,所述第二计算节点,根据所述第二计算任务,从所述排序后的初始数据中顺序获取目标数据量的目标数据。通过第一计算节点对初始数据进行排序,将排序后的初始数据发送至第二计算节点,第二计算节点从接收到初始数据中顺序取得目标数据量的目标数据,由于第二计算节点接收到的初始数据为有序的,所以在获取目标数据时可以顺序获取目标数据量的目标数据即可,不用处理所有初始数据,减少了数据处理量和使用的处理资源,提高了数据处理效率。

下述结合附图3,以本说明书提供的数据处理方法在分布式系统的应用为例,对所述数据处理方法进行进一步说明。其中,图3示出了本说明书一个实施例提供的一种数据处理方法的处理过程流程图,具体包括以下步骤。

步骤302:对数据查询命令进行语句词语法解析得到初始抽象语法树。

步骤304:将无分组和有排序的行数限定转化为目标抽象语法树。

步骤306:将目标抽象语法树拆分为局部计算阶段和全局计算阶段。

步骤308:判断是否为局部计算阶段。若是,执行步骤310至步骤318。若否,执行步骤320至步骤328。

步骤310:按照数据源分片调度到局部计算节点。

步骤312:判断数据集是否有剩余元素。若是,执行步骤314。若否,则结束。

步骤314:判断堆元素数是否小于行数限定值。若是,执行步骤316。若否,执行步骤318。

步骤316:将数据集元素直接插入堆。

步骤318:在保证堆顺序的前提下,将数据集元素插入堆。

步骤320:随机选择一个最终计算节点。

步骤322:判断数据集是否有剩余元素。若是,执行步骤324。若否,则结束。

步骤324:判断元素数是否小于行数限定值。若是,执行步骤326。若否,执行步骤328。

步骤326:将数据集元素直接插入有序链表。

步骤328:将两个有序集合进行合并,如果数量达到限定值则停止操作。

通过局部计算节点对初始数据进行排序,将排序后的初始数据发送至最终计算节点,最终计算节点从接收到初始数据中顺序取得目标数据量的目标数据,由于最终计算节点接收到的初始数据为有序的,所以在获取目标数据时可以顺序获取目标数据量的目标数据即可,不用处理所有初始数据,减少了数据处理量和使用的处理资源,提高了数据处理效率。

与上述方法实施例相对应,本说明书还提供了数据处理系统实施例,图4示出了本说明书一个实施例提供的一种数据处理系统的结构示意图。如图4所示,该数据处理系统,包括调度节点402、第二计算节点406和至少两个第一计算节点404;

所述调度节点402,被配置为响应于数据查询命令确定第一计算任务和第二计算任务,将所述第一计算任务分配到所述至少两个第一计算节点,将所述第二计算任务分配到所述第二计算节点,其中,所述第一计算任务以及所述第二计算任务中携带有目标数据量;

所述第一计算节点404,被配置为根据第一计算任务进行数据查询得到与所述目标数据量相同的初始数据,并对所述初始数据进行排序,且将排序后的初始数据发送至第二计算节点;

所述第二计算节点406,被配置为根据所述第二计算任务,从所述排序后的初始数据中顺序获取目标数据量的目标数据。

所述调度节点402,还被配置为响应于数据查询指令,对所述数据查询指令进行语义解析得到初始抽象语法树;

将所述初始抽象语法树进行组装得到目标抽象语法树;

根据所述目标语法树确定第一计算任务和第二计算任务。

所述调度节点402,还被配置为根据所述第一计算任务确定数据节点;

根据所述数据节点中原始数据的数量,确定所述数据节点对应的第一计算节点的数量;

根据所述第一计算节点的数量和亲和性规则确定原始数据对应的第一计算节点。

所述调度节点402,还被配置为在所述数据节点中原始数据的数量超过数量阈值的情况下,确定所述数据节点对应至少两个第一计算节点,其中,所述至少两个第一计算节点包括所述数据节点;

在所述数据节点中原始数据的数量未超过数量阈值的情况下,确定所述数据节点为第一计算节点。

所述调度节点402,还被配置为确定所述数据节点中原始数据的数量和所述数量阈值的比值,在所述比值为整数的情况下,确定所述比值数量为所述数据节点对应的第一计算节点的数量;

在所述比值不为整数的情况下,确定大于所述比值的整数为所述数据节点对应的第一计算节点的数量。

所述第一计算节点404,还被配置为根据第一计算任务确定数据节点,并获取所述数据节点中的原始数据;

确定所述原始数据的数据量与预设堆结构的元素数量,在所述原始数据的数据量小于等于所述元素数量的情况下,将所述原始数据放入所述堆结构中,将所述堆结构中的数据作为所述初始数据,其中,所述元素数量等于所述目标数据量;

在所述原始数据的数据量大于所述元素数量的情况下,从所述原始数据中取出所述元素数量的数据放入所述堆结构中,将所述原始数据中的其他数据插入所述堆结构,将所述堆结构中的数据作为所述初始数据,其中,所述其他数据为未放入所述堆结构的原始数据。

所述第一计算节点404,还被配置为根据第一计算任务确定数据节点,并获取所述数据节点中的原始数据,其中,所述原始数据携带分组标识;

根据所述分组标识对所述初始数据进行分组得到原始分组数据;

比较每个原始分组数据中的原始数据的数据量与对应的预设堆结构的元素数量,在所述原始数据的数据量小于等于所述元素数量的情况下,将所述原始数据放入所述堆结构中,将所述堆结构中的数据作为所述初始数据,其中,所述元素数量等于所述目标数据量;

在所述原始数据的数据量大于所述元素数量的情况下,从所述原始数据中取出所述元素数量的数据放入所述堆结构中,将所述原始数据中的其他数据插入所述堆结构,将所述堆结构中的数据作为所述初始数据,其中,所述其他数据为未放入所述堆结构的原始数据。

所述第一计算节点404,还被配置为获取所述原始数据中第i个数据,将所述第i个数据与堆结构的末尾元素进行比较,其中,i的初始值为1;

在所述第i个数据满足堆插入规则的情况下,将所述末尾元素删除,将所述第i个数据插入所述堆结构,使i自增1,并继续执行所述获取所述原始数据中第i个数据,直至所述原始数据中的最后一个数据。

所述第二计算节点406,还被配置为确定所述目标数据量与所述初始数据的数量,在所述目标数据量大于所述初始数据的数量的情况下,将所述初始数据顺序放入预设链表结构中,将所述链表结构中的数据作为所述目标数据;

在所述目标数据量小于等于所述初始数据的数量的情况下,从所述初始数据中取出所述目标数据量的数据放入所述链表结构中,将所述初始数据中的其他数据插入所述链表结构,将所述链表结构中的数据作为所述目标数据,其中,所述其他数据为未放入所述链表结构的初始数据。

所述第二计算节点406,还被配置为根据所述初始数据携带的分组标识确定初始分组数据;

确定所述目标数据量与每个初始分组数据中初始数据的数量,在所述目标数据量大于所述初始数据的数量的情况下,将所述初始数据顺序放入对应的预设链表结构中,将所述链表结构中的数据作为所述目标数据;

在所述目标数据量小于等于所述初始数据的数量的情况下,从所述初始数据中取出所述目标数据量的数据放入所述链表结构中,将所述初始数据中的其他数据插入所述链表结构,将所述链表结构中的数据作为所述目标数据,其中,所述其他数据为未放入所述链表结构的初始数据。

所述第二计算节点406,还被配置为获取所述初始数据中第j个数据,将所述第j个数据与链表结构的末尾元素进行比较,其中,j的初始值为1;

在所述第j个数据满足链表插入规则的情况下,将所述末尾元素删除,将所述第j个数据插入所述链表结构,使j自增1,并继续执行所述获取所述初始数据中第j个数据,直至所述第j个数据不满足链表插入规则。

所述调度节点402,还被配置为接收数据查询语句,确定所述数据查询语句的类型;

在所述数据查询语句的类型为所述目标类型的情况下,确定所述数据查询语句为所述数据查询命令。

本说明书实施例提供一种数据处理方法以及系统,其中所述数据处理方法应用于数据处理系统,所述系统包括调度节点、第二计算节点和至少两个第一计算节点,包括:所述调度节点,响应于数据查询命令确定第一计算任务和第二计算任务,将所述第一计算任务分配到所述至少两个第一计算节点,将所述第二计算任务分配到所述第二计算节点,其中,所述第一计算任务以及所述第二计算任务中携带有目标数据量;所述第一计算节点,根据第一计算任务进行数据查询得到与所述目标数据量相同的初始数据,并对所述初始数据进行排序,且将排序后的初始数据发送至第二计算节点,所述第二计算节点,根据所述第二计算任务,从所述排序后的初始数据中顺序获取目标数据量的目标数据。通过第一计算节点对初始数据进行排序,将排序后的初始数据发送至第二计算节点,第二计算节点从接收到初始数据中顺序取得目标数据量的目标数据,由于第二计算节点接收到的初始数据为有序的,所以在获取目标数据时可以顺序获取目标数据量的目标数据即可,不用处理所有初始数据,减少了数据处理量和使用的处理资源,提高了数据处理效率。

上述为本实施例的一种数据处理系统的示意性方案。需要说明的是,该数据处理系统的技术方案与上述的数据处理方法的技术方案属于同一构思,数据处理系统的技术方案未详细描述的细节内容,均可以参见上述数据处理方法的技术方案的描述。

图5示出了根据本说明书一个实施例提供的一种计算设备500的结构框图。该计算设备500的部件包括但不限于存储器510和处理器520。处理器520与存储器510通过总线530相连接,数据库550用于保存数据。

计算设备500还包括接入设备540,接入设备540使得计算设备500能够经由一个或多个网络560通信。这些网络的示例包括公用交换电话网(PSTN)、局域网(LAN)、广域网(WAN)、个域网(PAN)或诸如因特网的通信网络的组合。接入设备540可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(NIC))中的一个或多个,诸如IEEE802.11无线局域网(WLAN)无线接口、全球微波互联接入(Wi-MAX)接口、以太网接口、通用串行总线(USB)接口、蜂窝网络接口、蓝牙接口、近场通信(NFC)接口,等等。

在本说明书的一个实施例中,计算设备500的上述部件以及图5中未示出的其他部件也可以彼此相连接,例如通过总线。应当理解,图5所示的计算设备结构框图仅仅是出于示例的目的,而不是对本说明书范围的限制。本领域技术人员可以根据需要,增添或替换其他部件。

计算设备500可以是任何类型的静止或移动计算设备,包括移动计算机或移动计算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或PC的静止计算设备。计算设备500还可以是移动式或静止式的服务器。

其中,处理器520用于执行如下计算机可执行指令,该计算机可执行指令被处理器执行时实现上述数据处理方法的步骤。

上述为本实施例的一种计算设备的示意性方案。需要说明的是,该计算设备的技术方案与上述的数据处理方法的技术方案属于同一构思,计算设备的技术方案未详细描述的细节内容,均可以参见上述数据处理方法的技术方案的描述。

本说明书一实施例还提供一种计算机可读存储介质,其存储有计算机可执行指令,该计算机可执行指令被处理器执行时实现上述数据处理方法的步骤。

上述为本实施例的一种计算机可读存储介质的示意性方案。需要说明的是,该存储介质的技术方案与上述的数据处理方法的技术方案属于同一构思,存储介质的技术方案未详细描述的细节内容,均可以参见上述数据处理方法的技术方案的描述。

本说明书一实施例还提供一种计算机程序,其中,当所述计算机程序在计算机中执行时,令计算机执行上述数据处理方法的步骤。

上述为本实施例的一种计算机程序的示意性方案。需要说明的是,该计算机程序的技术方案与上述的数据处理方法的技术方案属于同一构思,计算机程序的技术方案未详细描述的细节内容,均可以参见上述数据处理方法的技术方案的描述。

上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。

所述计算机指令包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。

需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本说明书实施例并不受所描述的动作顺序的限制,因为依据本说明书实施例,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本说明书实施例所必须的。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。

以上公开的本说明书优选实施例只是用于帮助阐述本说明书。可选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书实施例的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本说明书实施例的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本说明书。本说明书仅受权利要求书及其全部范围和等效物的限制。

相关技术
  • 数据处理设备、数据处理方法、程序转换处理设备和程序转换处理方法、程序转换处理设备、数据处理设备、程序转换处理方法和数据处理方法、数据处理设备、数据处理方法、程序分析处理设备和程序分析处理方法、数据处理设备、历史保存设备、数据处理方法和程序、以及编译处理设备
  • 处理装置、处理方法、数据处理装置、数据处理系统、数据处理方法和程序
技术分类

06120114791294