多表关联方法、主服务节点、计算节点及系统
技术领域
本发明涉及信息技术领域,特别涉及一种多表关联方法、主服务节点、计算节点及系统。
背景技术
目前,随着互联网及信息技术的不断发展,多表关联技术的应用也越来越广泛。多表关联技术具体为通过两个或多个表中相同的某一个数据列作为关联列,从而建立多个表之间的关联。在传统数据库中,多表关联操作适用于进行数据量较小的多个表之间的关联操作,当进行数据量较大的多个表之间的关联操作时,耗时较长,效率较低。
针对在传统数据库中无法进行数据量较大的多个表之间的关联操作问题,现有技术通常通过在Hadoop(分布式系统基础架构)中的任务reduce端或者任务map端实现表关联操作。然而,在reduce端进行多表关联操作时,在函数shuffle阶段要进行大量的数据传输,造成多表关联效率较低;而在map端进行多表关联操作时,由于进行关联操作的多个表中,需要至少有一个表的数据量要小于或等于机器内存容量,从而造成在map端进行的多表关联操作,不适用于进行数据量较大的多个表之间的关联。
发明内容
本发明实施例提供一种多表关联方法、主服务节点、计算节点及系统。可以适用于进行数据量较大的多个表之间的关联,同时,提升了多表关联效率。
本发明实施例采用的技术方案为:
第一方面,提供一种多表关联方法,包括:
主服务节点获取第一表项的数据量和所述第一表项中的关联数据列,所述关联数据列用于与第二表项进行关联;
若所述第一表项的数据量大于预设内存加载阈值,则所述主服务节点将所述关联数据列中的数据划分为多个数据组,所述每一个数据组中的数据和与所述数据对应的所述第一表项的其他数据列的数据量之和,小于所述预设内存加载阈值;
所述主服务节点保存所述每一个数据组中的数据和与所述数据对应的所述第一表项的其他数据列的数据,以使得至少一个计算节点根据分别对应的数据组中的数据和所述数据对应的其他数据列的数据,进行所述第一表项与所述第二表项的表关联操作。
第二方面,提供一种多表关联方法,包括:
计算节点从主服务节点中获取与所述计算节点对应的数据组中的数据和与所述数据对应的所述第一表项的其他数据列的数据,所述主服务节点保存有每一个数据组中的数据和与所述数据对应的所述第一表项的其他数据列的数据,所述每一个数据组为所述主服务节点根据所述第一表项的关联数据列中的数据进行划分的;
所述计算节点按行获取第二表项的数据,并且获取当前行数据对应的所述第二表项的关联数据列中的数据;
所述计算节点判断所述当前行数据对应的所述第二表项的关联数据列中的数据,是否与所述计算节点对应的所述数据组中的数据相同;
若所述当前行数据对应的所述第二表项的关联数据列中的数据与所述数据组中的数据相同,所述计算节点建立所述当前行数据与所述数据组中的数据对应的所述第一表项中其他数据列的数据之间的对应关系。
第三方面,提供一种主服务节点,包括:
获取单元,用于获取第一表项的数据量和所述第一表项中的关联数据列,所述关联数据列用于与第二表项进行关联;
划分单元,若所述获取单元获取的所述第一表项的数据量大于预设内存加载阈值,则将所述关联数据列中的数据划分为多个数据组,所述每一个数据组中的数据和与所述数据对应的所述第一表项的其他数据列的数据量之和,小于所述预设内存加载阈值;
保存单元,用于保存所述每一个数据组中的数据和与所述数据对应的所述第一表项的其他数据列的数据,以使得至少一个计算节点根据分别对应的数据组中的数据和所述数据对应的其他数据列的数据,进行所述第一表项与所述第二表项的表关联操作。
第四方面,提供一种计算节点,包括:
获取单元,用于从主服务节点中获取与所述计算节点对应的数据组中的数据和与所述数据对应的所述第一表项的其他数据列的数据,所述主服务节点保存有每一个数据组中的数据和与所述数据对应的所述第一表项的其他数据列的数据,所述每一个数据组为所述主服务节点根据所述第一表项的关联数据列中的数据进行划分的;
获取单元,还用于按行获取第二表项的数据,并且获取当前行数据对应的所述第二表项的关联数据列中的数据;
判断单元,用于判断所述获取单元获取的所述当前行数据对应的所述第二表项的关联数据列中的数据,是否与所述计算节点对应的所述数据组中的数据相同;
建立单元,用于若所述判断单元判断所述当前行数据对应的所述第二表项的关联数据列中的数据与所述数据组中的数据相同,建立所述当前行数据和与所述数据组中的数据对应的所述第一表项中其他数据列的数据之间的对应关系。
第五方面,提供一种多表关联系统,包括:主服务节点和至少一个计算节点;
所述主服务节点,用于获取第一表项的数据量和所述第一表项中的关联数据列,所述关联数据列用于与第二表项进行关联;
所述主服务节点,还用于若所述第一表项的数据量大于预设内存加载阈值,则将所述关联数据列中的数据划分为多个数据组,所述每一个数据组中的数据和与所述数据对应的所述第一表项的其他数据列的数据量之和,小于所述预设内存加载阈值;
所述主服务节点,还用于保存所述每一个数据组中的数据和与所述数据对应的所述第一表项的其他数据列的数据;
所述计算节点,用于从所述主服务节点中获取与所述计算节点对应的数据组中的数据和与所述数据对应的所述第一表项的其他数据列的数据;
所述计算节点,还用于按行获取第二表项的数据,并且获取当前行数据对应的所述第二表项的关联数据列中的数据;
所述计算节点,还用于若所述当前行数据对应的所述第二表项的关联数据列中的数据与所述数据组中的数据相同,建立所述当前行数据和与所述数据组中的数据对应的所述第一表项中其他数据列的数据之间的对应关系。
本发明实施例提供的多表关联方法、主服务节点、计算节点及系统,首先主服务节点获取第一表项的数据量和所述第一表项中的关联数据列,若所述第一表项的数据量大于预设内存加载阈值,则所述主服务节点将所述关联数据列中的数据划分为多个数据组,然后所述主服务节点保存所述每一个数据组中的数据和与所述数据对应的所述第一表项的其他数据列的数据,以使得至少一个计算节点根据分别对应的数据组中的数据和所述数据对应的其他数据列的数据,进行所述第一表项与所述第二表项的表关联操作。与目前通过在Hadoop(分布式系统基础架构)中的reduce端或者map端实现表关联操作相比,本发明实施例通过将数据量较大的表项预先进行分片处理,可以实现数据量较大的多个表之间的关联,同时,提升了多表关联效率。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为本发明实施例提供的一种多表关联方法流程图;
图2为本发明实施例提供的另一种多表关联方法流程图;
图3为本发明实施例提供的主服务节点结构示意图;
图4为本发明实施例提供的计算节点结构示意图;
图5为本发明实施例提供的多表关联系统示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
为使本发明技术方案的优点更加清楚,下面结合附图和实施例对本发明作详细说明。
本发明实施例提供一种多表关联方法,如图1所示,所述方法包括:
101、主服务节点获取第一表项的数据量和所述第一表项中的关联数据列。
其中,所述关联数据列用于与第二表项进行关联。第一表项和第二表项具体可以为维表、数据表等,通过本发明实施例提供的方法可以进行一个维表与一个或多个数据表之间的关联操作,本发明实施例不做限定。对于本发明实施例,关联数据列可以为需要进行关联的多个表中都包含的某一列数据,通过该关联数据列,可以将多个表中的其他数据列中的数据进行关联。例如,需要关联的维表和数据表中都包含的关联数据列为用户编号,维表中的其他数据列中某一个数据列的数据为不同用户年龄段,数据表中的其他数据列中某一个数据列的数据为不同用户的上网时间信息,则此时通过用户编号这个关联数据列,就可以将维表和数据表进行关联,从而使得用户只需要输入用户编号,就可以查询到该用户编号对应的用户年龄段和对应的上网时间信息统计。
102、主服务节点判断第一表项的数据量是否大于预设内存加载阈值。
103a、若所述数据量大于预设内存加载阈值,则主服务节点将所述关联数据列中的数据划分为多个数据组。
其中,预设内存加载阈值具体可以根据进行多表关联操作的各个计算节点的内存容量进行设定,本发明实施例不做限定。所述每一个数据组中的数据和与所述数据对应的所述第一表项的其他数据列的数据量之和,小于所述预设内存加载阈值。通过将每一个数据组中的数据和与该数据对应的所述第一表项的其他数据列的数据量之和,配置小于所述预设内存加载阈值,可以保证进行表关联操作的每一个计算节点的内存容量,都可以加载并高效处理每一个数据组中的数据和与该数据对应的所述第一表项的其他数据列的数据。
具体地,所述主服务节点可以根据所述第一表项的数据量,将所述关联数据列中的数据划分为多个数据组。例如,关联数据列中的数据为用户编号,具体包括:编号1、编号2、编号3、编号4,若第一表项的数据量较大时,可以将用户编号划分为4个数据组,每一个数据组中包含一个用户编号,以保证每个数据组的数据和与该数据对应的所述第一表项的其他数据列的数据量之和,小于预设内存加载阈值;若第一表项的数据量较小,但是大于预设内存加载阈值时,可以将用户编号划分为2个数据组,每一个数据组中包含两个用户编号,以保证每个数据组的数据和与各个数据分别对应的所述第一表项的其他数据列的数据量之和,小于预设内存加载阈值的同时,节约系统资源。
可选地,所述主服务节点还可以根据所述关联数据列中各个数据分别对应的统计热度值,将所述关联数据列中的数据划分为多个数据组。例如,关联数据列中的数据为用户编号,具体包括:编号1、编号2、编号3、编号4、编号5、编号6,由于数字含义的不同,编号6对应的统计热度值较高,即对应的第一表项的其他数据列的数据量较大,而编号4、编号2对应的统计热度值较低,则此时可以将编号6单独划分在一个数据组,而将编号2和编号4划分在一个数据组中,从而保证均衡分配进行多表关联的各个计算节点需要处理的数据量,提升了多表关联的效率。
对于本发明实施例,对关联数据列中的数据划分为多个数据组的方式,即对数据量较大的第一表项的分片预处理的方式包括但不限于上述两种方式。
104a、主服务节点保存所述每一个数据组中的数据和与所述数据对应的所述第一表项的其他数据列的数据。
例如,第一表项的关联数据列为用户ID,第一表项的其他数据列包含的数据分别为性别信息、年龄信息、省份信息等,则此时每一个数据组中的数据为一个或多个用户ID,该数据组对应的第一表项的其他数据列的数据为该数据组中的一个或多个用户ID分别对应的性别信息、年龄信息、省份信息。
进一步地,以使得至少一个计算节点根据分别对应的数据组中的数据和所述数据对应的其他数据列的数据,进行所述第一表项与所述第二表项的表关联操作.
对于本发明实施例中计算节点的个数可以根据实际需求进行配置,具体可以大于、小于、或者等于上述数据组的个数,本发明实施例不做限定。当计算节点个数大于数据组个数时,可以从计算节点中选择负载较低的与数据组个数等量的多个计算节点分别处理一个数据组的数据和与该数据对应的表项中其他数据列的数据;当计算节点个数等于数据组个数时,每一个计算节点可以分别处理一个数据组的数据和与该数据对应的表项中其他数据列的数据;当计算节点个数小于数据组个数时,可以从计算节点中选择负载较低的计算节点进行多个数据组的数据和与该数据对应的表项中其他数据列的数据的处理,本发明实施例不做限定。
与步骤103a并列的步骤103b、若所述数据量小于或等于所述预设内存加载阈值,则所述主服务节点进行所述第一表项与所述第二表项的表关联操作。
对于本发明实施例,当第一表项的数据量小于或等于所述预设内存加载阈值时,可以直接进行第一表项与所述第二表项的表关联操作,而不再对第一表项进行分片预处理操作,从而可以进一步提升多表关联操作的效率。
本发明实施例提供的一种多表关联方法,首先主服务节点获取第一表项的数据量和所述第一表项中的关联数据列,若所述数据量大于预设内存加载阈值,则所述主服务节点将所述关联数据列中的数据划分为多个数据组,然后所述主服务节点保存所述每一个数据组中的数据和与所述数据对应的所述第一表项的其他数据列的数据,以使得至少一个计算节点根据分别对应的数据组中的数据和所述数据对应的其他数据列的数据,进行所述第一表项与所述第二表项的表关联操作。与目前通过在Hadoop中的reduce端或者map端实现表关联操作相比,本发明实施例通过将数据量较大的表项预先进行分片处理,可以实现数据量较大的多个表之间的关联,同时,提升了多表关联效率。
进一步地,本发明实施例提供另一种多表关联方法,如图2所示,所述方法包括:
201、计算节点从主服务节点中获取与所述计算节点对应的数据组中的数据和与所述数据对应的所述第一表项的其他数据列的数据。
其中,所述主服务节点保存有每一个数据组中的数据和与所述数据对应的所述第一表项的其他数据列的数据,所述每一个数据组为所述主服务节点根据所述第一表项的关联数据列中的数据进行划分的。
对于本发明实施例中计算节点的个数可以根据实际需求进行配置,具体可以大于、小于、或者等于上述数据组的个数,本发明实施例不做限定。当计算节点个数大于数据组个数时,可以从计算节点中选择负载较低的与数据组个数等量的多个计算节点分别处理一个数据组的数据和与该数据对应的表项中其他数据列的数据;当计算节点个数等于数据组个数时,每一个计算节点可以分别处理一个数据组的数据和与该数据对应的表项中其他数据列的数据;当计算节点个数小于数据组个数时,可以从计算节点中选择负载较低的计算节点进行多个数据组的数据和与该数据对应的表项中其他数据列的数据的处理,本发明实施例不做限定。
202、计算节点按行获取第二表项的数据,并且获取当前行数据对应的所述第二表项的关联数据列中的数据。
203、计算节点判断所述当前行数据对应的所述第二表项的关联数据列中的数据,是否与所述计算节点对应的所述数据组中的数据相同。若相同则跳转到步骤204,不同则跳转到步骤205。
204、若所述当前行数据对应的所述第二表项的关联数据列中的数据与所述数据组中的数据相同,计算节点建立所述当前行数据与所述数据组中的数据对应的所述第一表项中其他数据列的数据之间的对应关系。
例如,用于关联维表和数据表的关联列数据为用户编号,此时通过将与用户编号对应的维表中的用户性别、用户年龄等数据,和与用户编号对应的数据表中的用户上网时间信息、用户常用应用程序的统计信息等建立对应关系,可以使得用户只需要输入一个用户编号,即可获取到维表和数据表中与该用户编号对应的性别信息、年龄信息、上网时间信息、和用户常用应用程序的统计信息等。
可选地,若所述当前行数据对应的所述第二表项的关联数据列中的数据与所述数据组中的数据不相同,则不对当前行数据进行处理,并跳转到步骤205。
205、计算节点判断所述第二表项的数据中是否存在未获取到的数据。若存在,则跳转到步骤202,若不存在,则跳转到步骤206。
对于本发明实施例,计算节点具体可以根据获取的当前行数据中存在结束符标记,确认第二表项的数据中不存在未获取到的数据;或者计算节点还可以根据本次当前行数据获取操作未获取到数据,确认不存在未获取到的数据,本发明实施例不做限定。
206、若所述第二表项的数据中不存在未获取到的数据,所述计算节点终止再次获取所述第二表项的数据。
对于本发明实施例,当第二表项的数据中不存在未获取到的数据时,说明此时第二表项的数据已经全部与第一表项中的数据进行了关联操作,计算节点终止再次获取所述第二表项的数据,可以避免计算节点重复进行数据获取操作。
本发明实施例提供的另一种多表关联方法,首先主服务节点获取第一表项的数据量和所述第一表项中的关联数据列,若所述数据量大于预设内存加载阈值,则所述主服务节点将所述关联数据列中的数据划分为多个数据组,然后所述主服务节点保存所述每一个数据组中的数据和与所述数据对应的所述第一表项的其他数据列的数据,以使得至少一个计算节点根据分别对应的数据组中的数据和所述数据对应的其他数据列的数据,进行所述第一表项与所述第二表项的表关联操作。与目前通过在Hadoop中的reduce端或者map端实现表关联操作相比,本发明实施例通过将数据量较大的表项预先进行分片处理,可以实现数据量较大的多个表之间的关联,同时,提升了多表关联效率。
进一步地,作为图1所示方法的具体实现,本发明实施例提供一种主服务节点,所述主服务节点可以为终端设备,例如服务器,如图3所示,包括:获取单元31、划分单元32、保存单元33、关联单元34。
获取单元31,可以用于获取第一表项的数据量和所述第一表项中的关联数据列,所述关联数据列用于与第二表项进行关联。
划分单元32,可以用于若所述获取单元31获取的所述数据量大于预设内存加载阈值,则将所述关联数据列中的数据划分为多个数据组,所述每一个数据组中的数据和与所述数据对应的所述第一表项的其他数据列的数据量之和,小于所述预设内存加载阈值。
保存单元33,可以用于保存所述每一个数据组中的数据和与所述数据对应的所述第一表项的其他数据列的数据,以使得至少一个计算节点根据分别对应的数据组中的数据和所述数据对应的其他数据列的数据,进行所述第一表项与所述第二表项的表关联操作。
划分单元32,可以用于根据所述第一表项的数据量,将所述关联数据列中的数据划分为多个数据组,和/或
划分单元32,可以用于根据所述关联数据列中各个数据分别对应的统计热度值,将所述关联数据列中的数据划分为多个数据组。
关联单元34,可以用于若所述数据量小于或等于所述预设内存加载阈值,则进行所述第一表项与所述第二表项的表关联操作。
需要说明的是,本发明实施例提供的主服务节点所涉及各功能单元的其他相应描述,可以参考图1中的对应描述,在此不再赘述。
再进一步地,作为图2所示方法的具体实现,本发明实施例提供一种计算节点,所述计算节点可以为终端设备,例如计算机,如图4所示,所述计算节点包括:获取单元41、判断单元42、建立单元43、终止单元44。
获取单元41,可以用于从主服务节点中获取与所述计算节点对应的数据组中的数据和与所述数据对应的所述第一表项的其他数据列的数据,所述主服务节点保存有每一个数据组中的数据和与所述数据对应的所述第一表项的其他数据列的数据,所述每一个数据组为所述主服务节点根据所述第一表项的关联数据列中的数据进行划分的。
获取单元41,还可以用于按行获取第二表项的数据,并且获取当前行数据对应的所述第二表项的关联数据列中的数据。
判断单元42,用于判断所述获取单元41获取的所述当前行数据对应的所述第二表项的关联数据列中的数据,是否与所述计算节点对应的所述数据组中的数据相同。
建立单元43,可以用于若所述判断单元42判断所述当前行数据对应的所述第二表项的关联数据列中的数据与所述数据组中的数据相同,建立所述当前行数据和与所述数据组中的数据对应的所述第一表项中其他数据列的数据之间的对应关系。
判断单元42,还可以用于判断所述第二表项的数据中是否存在未获取到的数据。
终止单元44,可以用于若所述判断单元42判断所述第二表项的数据中不存在未获取到的数据,终止再次获取所述第二表项的数据。
判断单元42,还可以用于若所述当前行数据对应的所述第二表项的关联数据列中的数据与所述数据组中的数据不相同,则所述计算节点判断所述第二表项的数据中是否存在未获取到的数据。
需要说明的是,本发明实施例提供的计算节点所涉及各功能单元的其他相应描述,可以参考图2中的对应描述,在此不再赘述。
本发明实施例提供的装置,首先主服务节点获取第一表项的数据量和所述第一表项中的关联数据列,若所述数据量大于预设内存加载阈值,则所述主服务节点将所述关联数据列中的数据划分为多个数据组,然后所述主服务节点保存所述每一个数据组中的数据和与所述数据对应的所述第一表项的其他数据列的数据,以使得至少一个计算节点根据分别对应的数据组中的数据和所述数据对应的其他数据列的数据,进行所述第一表项与所述第二表项的表关联操作。与目前通过在Hadoop中的任务reduce端或者任务map端实现表关联操作相比,本发明实施例通过将数据量较大的表项预先进行分片处理,可以实现进行数据量较大的多个表之间的关联,同时,提升了多表关联效率。
再进一步地,作为上述各个实施例的具体实现,本发明实施例提供一种多表关联系统,如图5所示,所述多表关联系统可以包括:主服务节点51和至少一个计算节点52。
主服务节点51,可以用于获取第一表项的数据量和所述第一表项中的关联数据列,所述关联数据列用于与第二表项进行关联。
主服务节点51,还可以用于若所述数据量大于预设内存加载阈值,则将所述关联数据列中的数据划分为多个数据组,所述每一个数据组中的数据和与所述数据对应的所述第一表项的其他数据列的数据量,小于所述预设内存加载阈值。
主服务节点51,还可以用于保存所述每一个数据组中的数据和与所述数据对应的所述第一表项的其他数据列的数据。
计算节点52,可以用于从所述主服务节点51中获取与所述计算节点对应的数据组中的数据和与所述数据对应的所述第一表项的其他数据列的数据。
计算节点52,还可以用于按行获取第二表项的数据,并且获取当前行数据对应的所述第二表项的关联数据列中的数据。
计算节点52,还可以用于若所述当前行数据对应的所述第二表项的关联数据列中的数据与所述数据组中的数据相同,建立所述当前行数据和与所述数据组中的数据对应的所述第一表项中其他数据列的数据之间的对应关系。
本发明实施例提供的多表关联系统所涉及各功能单元的其他相应描述,可以参考图1和图2中的对应描述,在此不再赘述。
本发明实施例提供的多表关联系统,首先主服务节点获取第一表项的数据量和所述第一表项中的关联数据列,若所述数据量大于预设内存加载阈值,则所述主服务节点将所述关联数据列中的数据划分为多个数据组,然后所述主服务节点保存所述每一个数据组中的数据和与所述数据对应的所述第一表项的其他数据列的数据,以使得至少一个计算节点根据分别对应的数据组中的数据和所述数据对应的其他数据列的数据,进行所述第一表项与所述第二表项的表关联操作。与目前通过在Hadoop中的任务reduce端或者任务map端实现表关联操作相比,本发明实施例通过将数据量较大的表项预先进行分片处理,可以实现数据量较大的多个表之间的关联,同时,提升了多表关联效率。
本发明实施例提供的主服务节点、计算节点和多表关联系统可以实现上述提供的方法实施例,具体功能实现请参见方法实施例中的说明,在此不再赘述。本发明实施例提供的多表关联方法、主服务节点、计算节点及系统可以适用于信息技术领域,但不仅限于此。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。