一种数据处理方法及装置
技术领域
本发明涉及网络应用领域,具体涉及一种数据处理方法以及数据处理装置。
背景技术
在大规模并行计算中,输入的数据通常是一系列的关键字‐值(key‐value)对。经过一系列的计算后,输出每个key对应的新的value。为了方便寻址,并且节省存储空间,可以对输入数据进行连续的id化,即将每个key‐value对中的key替换为0‐N的整数。
在输入数据较多时,为每个数据(例如每个key‐value对中的key)id化就会占用大量的时间,进而会降低数据的存储速度。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的数据处理装置和相应的数据处理方法。
依据本发明的一个方面,提供了一种数据处理方法,包括:
对输入的数据进行分组,其中,所述数据的组数根据处理该数据的结点数确定;
依次为每个结点分配一组待处理的数据,并利用各结点对各自对应的数据进行并行的连续id化处理,其中,所述连续id化处理是指将数据中的关键字替换为0‐N的整数;
存储经连续id化处理后的数据;
所述利用各结点对各自对应的组数据进行并行的连续id化处理包括:
对于任意一个节点,计算本结点起始id编号;
根据本节点起始id编号对本结点数据进行id化。
可选地,采用如下公式对本结点数据进行id化:
其中,rank为当前结点的编号,且rank>0,Ni为结点i的数目。
可选地,rank=0时,StartID=0。
可选地,所述利用各结点对各自对应的组数据进行并行的连续id化处理,包括:
对于任意一个结点,
在本结点内部设置多个工作线程,并将本结点处理的数据依次分配到每个工作线程上;
利用每个工作线程对各自对应的数据进行连续id化处理。
可选地,所述利用每个工作线程对各自对应的数据进行连续id化处理,包括:
对于任意一个工作线程,
判断当前处理的数据是否是自身所处理的最后一条数据;
若是,则结束并退出处理流程;
若否,则为当前数据赋予id,并触发下一条数据的处理。
可选地,所述触发下一条数据的处理,包括:利用原子递增atomic_inc,对下一条数据进行连续id化处理。
可选地,所述输入的数据为key‐value对。
可选地,所述方法采用MPI模型对数据进行并行的连续id化处理。
依据本发明的另一个方面,提供了一种数据处理装置,包括:
分组模块,配置为对输入的数据进行分组,其中,所述数据的组数根据处理该数据的结点数确定;
处理模块,配置为依次为每个结点分配一组待处理的数据,并利用各结点对各自对应的数据进行并行的连续id化处理,其中,所述连续id化处理是指将数据中的关键字替换为0‐N的整数;
存储模块,配置为存储经连续id化处理后的数据;
其中,所述处理模块还配置为:
对于任意一个节点,计算本结点起始id编号;
根据本节点起始id编号对本结点数据进行id化。
可选地,所述处理模块采用如下公式对本结点数据进行id化:
其中,rank为当前结点的编号,且rank>0,Ni为结点i的数目。
可选地,rank=0时,StartID=0。
可选地,所述处理模块还配置为:
对于任意一个结点,
在本结点内部设置多个工作线程,并将本结点处理的数据依次分配到每个工作线程上;
利用每个工作线程对各自对应的数据进行连续id化处理。
可选地,所述处理模块还配置为:
对于任意一个工作线程,
判断当前处理的数据是否是自身所处理的最后一条数据;
若是,则结束并退出处理流程;
若否,则为当前数据赋予id,并触发下一条数据的处理。
可选地,所述处理模块还配置为:利用原子递增atomic_inc,对下一条数据进行连续id化处理。
可选地,所述输入的数据为key‐value对。
可选地,所述装置采用MPI模型对数据进行并行的连续id化处理。
在本发明实施例中,将输入的数据根据处理该数据的结点数进行分组,然后,多个结点并行同步对各种被分配的数据进行连续id化处理。由此可见,本发明实施例中,数据并不是在一个队列中依次进行处理的,而是在多个队列中并行处理的,其处理速度相对现有技术中的id化处理有大幅度的提升。并行处理的结点数越多,该数据被处理结束的速度就越快。这样,经较短时间就能把所有数据id化,然后实现经连续id化处理后的数据的存储。采用本发明实施例能够缩短数据存储的时间,尤其是对于大规模数据的存储,能够起到节省时间提高存储速率的作用,满足大规模数据存储的时间性要求,节省系统资源。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明一个实施例的数据处理方法的处理流程图;
图2示出了根据本发明一个实施例的结点进行连续id化处理的流程示意图;
图3示出了根据本发明一个实施例的结点并行处理的流程图;
图4示出了根据本发明一个实施例的工作线程的数据处理流程图;以及
图5示出了根据本发明一个实施例的数据处理装置的结构示意图。
具体实施方式
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
为解决上述技术问题中的至少一个,本发明实施例提供了一种数据处理方法。图1示出了根据本发明一个实施例的数据处理方法的处理流程图。参见图1,该数据处理方法包括步骤S102至步骤S106。各步骤具体如下。
步骤S102、对输入的数据进行分组,其中,数据的组数根据处理该数据的结点数确定。
步骤S104、依次为每个结点分配一组待处理的数据,并利用各结点对各自对应的数据进行并行的连续id化处理,其中,连续id化处理是指将数据中的关键字替换为0‐N的整数。
步骤S106、存储经连续id化处理后的数据。
在本发明实施例中,将输入的数据根据处理该数据的结点数进行分组,然后,多个结点并行同步对各种被分配的数据进行连续id化处理。由此可见,本发明实施例中,数据并不是在一个队列中依次进行处理的,而是在多个队列中并行处理的,其处理速度相对现有技术中的id化处理有大幅度的提升。并行处理的结点数越多,该数据被处理结束的速度就越快。这样,经较短时间就能把所有数据id化,然后实现经连续id化处理后的数据的存储。采用本发明实施例能够缩短数据存储的时间,尤其是对于大规模数据的存储,能够起到节省时间提高存储速率的作用,满足大规模数据存储的时间性要求,节省系统资源。
其中,步骤S104中提及会利用各结点对各自对应的组数据进行并行的连续id化处理。具体的,对于任意一个结点,首先要计算本结点起始id编号,然后根据本结点起始id编号对本结点数据进行id化。例如,对于结点A,该结点的起始id编号为5,该结点需要处理的数据一共有3个需要进行id化处理,则后续两位数据的id编号应该依次为6、7。
本发明实施例为了将各数据利用各结点进行并行的连续id化,可将按某个规则将具有同一属性的数据标识集中发送到某个结点进行处理。也即每个结点,将当前读取的每个数据元素的数据,根据预置的规则进行计算,根据计算结果将处理结果发送给与相对应的计算结点。同时,每个结点也接收其他计算结点发送到本结点的数据信息。那么最终,每个结点则保存了未发送出去的数据和其他结点发送到本结点的数据信息。
对于如何进行id化,可以采用大量的id化公式,只要满足其计算结果为0‐N的整数即可。优选的,本发明实施例采用如下公式对本结点数据进行id化:
其中,rank为当前结点的编号,且rank>0,Ni为结点i的数目。
需要说明的是,当rank=0时,StartID=0。
在本发明实施例中,除了利用结点并行处理大模块数据以达到缩短数据处理时间的目的,在结点内部,也可以采用一定的处理方式对数据进行处理,来进一步达到缩短数据处理时间的目的。
考虑到每个结点内部工作线程,且数据最终是由工作线程处理并输出的,因此,可以考虑对工作线程的处理方式进行一定的规划。
具体的,对于任意一个结点,可以在本结点内部设置多个工作线程,并将本结点处理的数据依次分配到每个工作线程上。随后,利用每个工作线程对各自对应的数据进行连续id化处理。
也就是说,本发明实施例中,在结点外部通过多结点并行处理数据,而在结点内部进一步通过多工作线程实现数据的并行处理,两者均能够达到缩短数据处理时间的目的,将两者结合使用,则效果更佳。
综上可知,本发明实施例中,输入数据分布在多个计算结点(即结点)上,每个计算结点对本地数据进行连续id化,同时要保证id化的结果在全局也是连续的。图2示出了根据本发明一个实施例的结点进行连续id化处理的流程示意图。
参见图2,此处的处理为并发操作。
首先,是结点级别的并发。
此时,数据按照结点数目划分为若干块,每个计算结点处理一块数据。
其次,是结点内部的并发。
此时,结点内部根据CPU数目起多个工作线程并且将输入数据划分为若干块,每个线程处理一块数据。
需要说明的是,由于对数据进行连续id化处理是在进程中进行,而为了使其他结点的进程也能知道同步知道,需要每个结点将当前id化得到的数据通知给其他计算结点,以使整个计算系统全局均知道数据被id化后生成的数据,以使后续计算过程可以使各进程方便对相应的数据进行归类。因此,在并行处理的过程中,每个结点和其它结点进行必要的通信,最终输出本结点数据的id化结果。
图3示出了根据本发明一个实施例的结点并行处理的流程图。参见图3,该流程包括步骤S302至步骤S312。具体的各步骤描述如下。
步骤S302、获取待处理的数据。
步骤S304、起多个线程,统计数据个数。
步骤S306、将本结点数据个数广播到其它结点。
步骤S308、计算本结点起始id编号。
步骤S310、起多个线程,根据本结点起始id编号对本结点数据进行id化。
步骤S312、输出结果。
在利用每个工作线程对各自对应的数据进行连续id化处理的过程中,对于任意一个工作线程,首先需要判断当前处理的数据是否是自身所处理的最后一条数据。若是,则该工作线程可以结束并退出处理流程。若否,则为当前数据赋予id,并触发下一条数据的处理。
其中,触发下一条数据的处理的触发方式有多种,本例中优选原子递增(atomic_inc)实现对下一条数据进行连续id化处理的触发操作。
图4示出了根据本发明一个实施例的工作线程的数据处理流程图。在图4中,包括步骤S402至步骤S410。
步骤S402、读取本线程要进行id化的数据。
步骤S404、判断是否为最后一条数据,若是,执行步骤S406,若否,执行步骤S408及步骤S410。
步骤S406、结束并输出处理结果。
步骤S408、为当前数据赋予id。
步骤S410、使用atomic_inc触发下一条数据的id化处理。
由于是多线程操作,这里对id进行递增的操作使用了原子递增atomic_inc,通过汇编LOCK_PREFIX进行锁总线来达到互斥的效果。
在本发明实施例中,输入的数据优选为key‐value对,此时的id化处理通常是将key转化为id即可。若数据以其他形式出现,则根据出现的形式确定转化的元素。
本发明实施例提供的数据处理方法优选采用MPI模型对数据进行并行的连续id化处理,从而解决了大规模数据的快速ID化问题。
基于同一发明构思,本发明实施例还提供了一种数据处理装置,用以实现上述任意一个优选实施例中的数据处理方法。图5示出了根据本发明一个实施例的数据处理装置的结构示意图。参见图5,该数据处理装置包括分组模块510、处理模块520以及存储模块530。现分别对各模块的结构、功能以及架构进行详细说明。
首先,介绍分组模块510。该分组模块510对输入的数据进行分组,其中,数据的组数根据处理该数据的结点数确定。例如,数据的组数可以和结点数相同,再例如,数据的组数可以小于结点数,具体的组数根据实际情况而定。
其次,介绍处理模块520。参见图2,处理模块520与分组模块510相耦合。待分组模块510分组结束后,处理模块520依次为每个结点分配一组待处理的数据,并利用各结点对各自对应的数据进行并行的连续id化处理,其中,连续id化处理是指将数据中的关键字替换为0‐N的整数。
最后,介绍存储模块530。参见图2,存储模块530与处理模块520相耦合。待处理模块520对数据进行并行的连续id化处理之后,存储模块530存储经连续id化处理后的数据。
在本发明实施例中,将输入的数据根据处理该数据的结点数进行分组,然后,多个结点并行同步对各种被分配的数据进行连续id化处理。由此可见,本发明实施例中,数据并不是在一个队列中依次进行处理的,而是在多个队列中并行处理的,其处理速度相对现有技术中的id化处理有大幅度的提升。并行处理的结点数越多,该数据被处理结束的速度就越快。这样,经较短时间就能把所有数据id化,然后实现经连续id化处理后的数据的存储。采用本发明实施例能够缩短数据存储的时间,尤其是对于大规模数据的存储,能够起到节省时间提高存储速率的作用,满足大规模数据存储的时间性要求,节省系统资源。
其中,在一个优选的实施例中,对于任意一个结点,处理模块520可以先计算出本结点起始id编号。之后,处理模块520根据本结点起始id编号对本结点数据进行id化。例如,对于结点A,该结点的起始id编号为5,该结点需要处理的数据一共有3个需要进行id化处理,则后续两位数据的id编号应该依次为6、7。
对于如何进行id化,可以采用大量的id化公式,只要满足其计算结果为0‐N的整数即可。优选的,本发明实施例中,处理模块520可以采用如下公式对本结点数据进行id化:
其中,rank为当前结点的编号,且rank>0,Ni为结点i的数目。
需要说明的是,当rank=0时,StartID=0。
在本发明实施例中,除了利用结点并行处理大模块数据以达到缩短数据处理时间的目的,在结点内部,也可以采用一定的处理方式对数据进行处理,来进一步达到缩短数据处理时间的目的。
因此,考虑到每个结点内部工作线程,且数据最终是由工作线程处理并输出的,因此,处理模块520还可以考虑对工作线程的处理方式进行一定的规划。
具体的,对于任意一个结点,处理模块520可以在本结点内部设置多个工作线程,并将本结点处理的数据依次分配到每个工作线程上。随后,处理模块520进一步利用每个工作线程对各自对应的数据进行连续id化处理。
也就是说,本发明实施例中,在结点外部通过多结点并行处理数据,而在结点内部进一步通过多工作线程实现数据的并行处理,两者均能够达到缩短数据处理时间的目的,将两者结合使用,则效果更佳。
在利用每个工作线程对各自对应的数据进行连续id化处理的过程中,对于任意一个工作线程,处理模块520首先需要判断当前处理的数据是否是自身所处理的最后一条数据。若是,则该工作线程可以结束并退出处理流程。若否,则处理模块520为当前数据赋予id,并触发下一条数据的处理。
其中,触发下一条数据的处理的触发方式有多种,本例中处理模块520优选原子递增(atomic_inc)实现对下一条数据进行连续id化处理的触发操作。
在本发明实施例中,输入的数据优选为key‐value对,此时的id化处理通常是将key转化为id即可。若数据以其他形式出现,则根据出现的形式确定转化的元素。
本发明实施例提供的数据处理方法优选采用MPI模型对数据进行并行的连续id化处理,从而解决了大规模数据的快速ID化问题。
为将本发明实施例提供的数据处理方法及装置阐述地更清楚更明白,现以具体实施例对其进行说明。
实施例一
本实施例中将左边表一的原始数据(向量)进行连续id化,转换为右边表二的形式。
本例中使用2个结点(Node0、Node1),且每个结点内部起2个线程(Thread0、Thread1),根据结点数对于原始的数据可以有如表三的划分:
表三
参见表三可知,由每个结点处理5条数据。由公式计算得出可得,Node0的起始编号为0,Node1的起始编号为5。
每个Thread对Thread要处理的数据顺序访问,每处理一个就使用atomic操作递增起始编号。例如Node0的Thread0处理了第一个数据(10,3),则编号为(0,3),通过atomic_inc递增编号为1。Node0的Thread1处理到第一个数据(40,6),则编号为(1,6)。
采用本发明实施例提供的数据处理方法及装置可以达到如下有益效果:
在本发明实施例中,将输入的数据根据处理该数据的结点数进行分组,然后,多个结点并行同步对各种被分配的数据进行连续id化处理。由此可见,本发明实施例中,数据并不是在一个队列中依次进行处理的,而是在多个队列中并行处理的,其处理速度相对现有技术中的id化处理有大幅度的提升。并行处理的结点数越多,该数据被处理结束的速度就越快。这样,经较短时间就能把所有数据id化,然后实现经连续id化处理后的数据的存储。采用本发明实施例能够缩短数据存储的时间,尤其是对于大规模数据的存储,能够起到节省时间提高存储速率的作用,满足大规模数据存储的时间性要求,节省系统资源。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的数据处理装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。