著录项信息
专利名称 | 数据分布的方法、装置及系统 |
申请号 | CN201280002465.X | 申请日期 | 2012-07-26 |
法律状态 | 授权 | 申报国家 | 暂无 |
公开/公告日 | 2014-04-23 | 公开/公告号 | CN103748578A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F17/30 | IPC分类号 | G;0;6;F;1;7;/;3;0查看分类表>
|
申请人 | 华为技术有限公司 | 申请人地址 | 广东省深圳市龙岗区坂田华为总部办公楼
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 华为技术有限公司 | 当前权利人 | 华为技术有限公司 |
发明人 | 吴向阳;曹俊亮;曹莉 |
代理机构 | 北京中博世达专利商标代理有限公司 | 代理人 | 申健 |
摘要
本发明公开了一种数据分布的方法、装置及系统,涉及信息技术领域,为节省查询时间,提高查询效率而发明。所述方法包括:在数据查询前,控制节点根据创建规则设置分布表创建指示,所述分布表创建指示中携带逻辑数据表的标识ID以及选定分布列的分布列标识,其中所述选定分布列为所述逻辑数据表中的分布列,所述逻辑数据表为所述控制节点中已创建的逻辑数据表;所述控制节点向数据节点发送所述分布表创建指示,以便所述数据节点根据所述分布表创建指示创建所述逻辑数据表的分布表。本发明主要应用于并行数据库系统中的数据分布过程中。
数据分布的方法、装置及系统\n技术领域\n[0001] 本发明涉及信息技术领域,尤其涉及一种数据分布的方法、装置及系统。\n背景技术\n[0002] 并行数据库系统是一种将数据内容分布存储在多个数据节点上的数据存储技术,可以根据哈希(Hash)、范围(Range)、轮转(Round-bin)等算法,将一个逻辑数据表分布在各个数据节点上。并行数据库系统在各个数据节点上并行查询用户需要的数据内容,相对非并行数据库系统而言查询速度快,并且易于管理数据内容。\n[0003] 通常,逻辑数据表中会包含多个字段,并行数据库系统以其中的一个(或多个)字段内容作为上述算法的自变量对该逻辑数据表在数据节点上进行分布存储,作为自变量的字段称为该逻辑数据表的分布列。\n[0004] 现有技术中,并行数据库系统对多个逻辑数据表的分布表进行分布列联合(Join)查询时,如果具有查询关系的多个分布表的分布列不相同,则需要根据多个分布表共有的分布列对多个逻辑数据表重新进行分布,从而影响查询效率。\n发明内容\n[0005] 本发明的实施例提供一种数据分布的方法、装置及系统,能够节省查询时间,提高查询效率。\n[0006] 一方面,本发明实施例提供了一种数据分布的方法,包括:\n[0007] 在数据查询前,控制节点根据创建规则设置分布表创建指示,所述分布表创建指示中携带逻辑数据表的标识ID以及选定分布列的分布列标识,其中所述选定分布列为所述逻辑数据表中的分布列,所述逻辑数据表为所述控制节点中已创建的逻辑数据表;\n[0008] 所述控制节点向数据节点发送所述分布表创建指示,以便所述数据节点根据所述分布表创建指示创建所述逻辑数据表的分布表。\n[0009] 另一方面,本发明实施例还提供了一种控制节点,包括:\n[0010] 处理单元,用于在数据查询前,根据创建规则设置分布表创建指示,所述分布表创建指示中携带逻辑数据表的标识ID以及选定分布列的分布列标识,其中所述选定分布列为所述逻辑数据表中的分布列,所述逻辑数据表为所述控制节点中已创建的逻辑数据表;\n[0011] 发送单元,用于向数据节点发送所述处理单元设置的所述分布表创建指示,以便所述数据节点根据所述分布表创建指示创建所述逻辑数据表的分布表。\n[0012] 最后,本发明实施例还提供了一种数据分布的系统,包括:\n[0013] 控制节点,用于在数据查询前,根据创建规则设置分布表创建指示,所述分布表创建指示中携带逻辑数据表的标识ID以及选定分布列的分布列标识,其中所述选定分布列为所述逻辑数据表中的分布列,所述逻辑数据表为所述控制节点中已创建的逻辑数据表,向数据节点发送所述分布表创建指示;\n[0014] 所述数据节点,用于在数据查询前,接收所述控制节点发送的所述分布表创建指示,根据所述分布表创建指示创建所述逻辑数据表的分布表。\n[0015] 本发明实施例提供的数据分布的方法、装置及系统,能够在数据查询前,根据创建规则按照相同的分布列将多个逻辑数据表分布存储在各个数据节点上,分布存储后各个数据节点上建立的分布表用于后续的数据查询。可以避免在分布列联合查询的过程中,当具有查询关系的多个分布表的分布列不相同时,需要将多个逻辑数据表重新分布存储在各个数据节点上的问题,可以避免在分布列联合查询的过程中大量数据迁移带来的查询时延,能够提高查询效率。\n附图说明\n[0016] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。\n[0017] 图1为并行数据库系统的架构的示意图;\n[0018] 图2为并行数据库系统中逻辑数据表的示意图;\n[0019] 图3为数据节点创建分布表的示意图;\n[0020] 图4为另一个数据节点创建分布表的示意图;\n[0021] 图5为本发明实施例中数据分布的方法的流程图;\n[0022] 图6为本发明实施例中另一个数据分布的方法的流程图;\n[0023] 图7为本发明实施例中应用场景的示意图;\n[0024] 图8为本发明实施例中控制节点的结构示意图;\n[0025] 图9为本发明实施例中数据分布的系统示意图。\n具体实施方式\n[0026] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。\n[0027] 图1为并行数据库系统的一种架构,控制节点连接了三个数据节点,控制节点和每个数据节点都有独立的中央处理器(Central Processing Unit,简称CPU)、存储器(内存、硬盘)、节点与节点之间通过高速网络(例如以太网、光纤交换网)实现数据通信。其中,控制节点主要用于:1、根据逻辑数据表的字段以及预设算法将待管理数据分布存储到各个数据节点上,所述逻辑数据表为存储在控制节点中的具有数据结构属性的数据表,所述逻辑数据表为数据节点创建分布表的逻辑依据;2、为客户端提供查询接口,例如结构化查询语言(Structured Query Language,简称SQL)、Java数据库连接(Java Data Base Connectivity,简称JDBC)、开放数据库互连(Open Database Connectivity,ODBC)等;3、根据客户端的查询请求处理各个数据节点反馈的查询结果。数据节点主要用于:受控制节点控制根据分布列建立逻辑数据表的分布表、与其他数据节点进行数据迁移、作为独立数据库节点实现分布表的存储和查询。\n[0028] 以存储教学数据信息为例:图2中有三个逻辑数据表,逻辑数据表A(后续简称为表A)存储学号与姓名的数据,逻辑数据表B(后续简称为表B)存储学号、课程标识以及成绩的数据,逻辑数据表C(后续简称为表C)存储课程标识与课程名称的数据。其中,逻辑数据表中的任意一列(或称为字段或属性)均可作为该逻辑数据表分布存储的分布列,例如表B中的学号、课程标识和成绩为表B的三个字段。控制节点将学号字段作为分布列,通过哈希(Hash)模3算法将表A的数据分布存储到三个数据节点上。如图3所示,学号1除3余1,则学号\n1以及学号1对应的姓名(即表A中的第一行数据)存储到数据节点1上,学号2除3余2,则表A中的第二行数据存储到数据节点2上,学号3除3余0,则表A中的第三行数据存储到数据节点\n0上,其中哈希模3算法中的除数3为并行数据库系统中数据节点的个数。同理,控制节点分别以学号字段和课程标识字段作为分布列,将表B和表C的数据分布存储到三个数据节点上。其中,控制节点将学号字段作为表B的分布列(j)通过哈希模3算法对表B进行分布,将课程标识字段作为表C的分布列(k)通过哈希模3算法对表C进行分布。逻辑数据表分布后,每个数据节点上建立的数据表称为该逻辑数据表的分布表,分布表的名称可以由逻辑数据表标识+数据节点标识+分布列标识来表示,例如数据节点1中的B+mdt1+j,表示数据节点1以学号字段(j)作为分布列创建表B的分布表。当客户端执行查询语句select stu_name,course_id from A,Bwhere A:stu_id=B:stu_id时,该查询语句表示通过表A和表B的分布列联合查询(from A,B),查询姓名、课程标识和成绩的数据,以及三者之间的对应关系(select stu_name,course_id),其中表A和表B均以学号字段作为分布列分布存储在各个数据节点上(A:stu_id=B:stu_id)。查询结果为数据节点1查询到学号1对应的三个课程标识以及对应的三门成绩,数据节点2查询到学号2对应的三个课程标识以及对应的三门成绩,数据节点0查询到学号3对应的三个课程标识以及对应的三门成绩。三个数据节点分别将查询结果上报给控制节点,控制节点将接收的查询结果汇总上报给客户端,从而完成查询。\n[0029] 当客户端执行查询语句Select stu_id,course_name from B,C where B:\ncourse_id=C:course_id时,由于表B的分布列为学号字段,而表C的分布列为课程标识字段,两表的分布列不同,所以数据节点1只能查询到学号1对应的课程标识1的课程名称,学号1对应的课程标识2和3的课程名称则无法查询,并且数据节点2和数据节点0上也无法查询学号1对应的课程标识2和3的课程名称,类似的,数据节点2和数据节点0也存在相同的问题。此时控制节点需要以课程标识字段作为分布列对表B重新进行分布(由于表C没有学号字段,为使表B和表C按照相同的分布列进行分布,需要以课程标识字段作为分布列对表B按照哈希模3算法重新进行分布,重新创建表B的分布表)。三个数据节点上为表B重新创建的分布表如图4所示,其中分布表名称中的k为代表课程标识字段作为分布列的分布列标识。\n[0030] 在重新创建完成表B的分布表后,控制节点控制三个数据节点进行数据迁移,以便数据节点从其他数据节点处获取自身重建的分布表中新增表项所对应的数据。例如,在数据节点1中的分布表B+mdt1+k中,新增了学号2和学号3分别对应的课程1及课程1成绩两行表项,而数据节点1在创建分布表B+mdt1+j时不涉及这两行表项,所以数据节点1在创建分布表B+mdt1+j时未获取这两行表项的数据。数据节点1从数据节点2处获取学号2对应的课程1及课程1成绩的数据(即B+mdt2+j中第一行表项对应的数据),从数据节点0处获取学号3对应的课程1及课程1成绩的数据(即B+mdt0+j中第一行表项对应的数据)。数据节点2和数据节点0重建表B的分布表后,同样按照自身表项特征执行相应步骤,此处不进行一一赘述。\n[0031] 数据节点获取到重建表B分布表需要的数据后,将该数据添加到重建的表B分布表中对应的表项里,从而完成重建表B的分布表。此时,控制节点就可以控制数据节点根据表C的分布表以及重建后表B的分布表查询到每个学号对应的三门课程的课程名称了。\n[0032] 各个数据节点上对应同一个逻辑数据表的分布表的加和可以完整反映该逻辑数据表的内容。\n[0033] 本发明实施例提供了一种数据分布的方法,如图5所示,所述方法包括如下步骤:\n[0034] 501、在数据查询前,控制节点根据创建规则设置分布表创建指示。\n[0035] 所述分布表创建指示中携带逻辑数据表的标识(Identity,简称ID)以及选定分布列的分布列标识,其中所述选定分布列为所述逻辑数据表中的分布列,所述逻辑数据表为所述控制节点中已创建的逻辑数据表。\n[0036] 所述逻辑数据表的ID用于唯一标识逻辑数据表,所述分布列标识用于唯一标识选定的分布列。所述分布表创建指示中可以携带一个或多个逻辑数据表ID以及一个或多个分布列标识,当携带多个分布列标识时,所述多个分布列标识可以是一个逻辑数据表中的多个分布列标识,也可以是多个逻辑数据表中的多个分布列标识。\n[0037] 以图4中数据节点1上的分布表B+mdt1+j为例,B为表B的ID,j为以学号字段作为分布列的分布列标识,mdt1为数据节点的标识。\n[0038] 502、控制节点向数据节点发送分布表创建指示。\n[0039] 数据节点根据所述分布表创建指示中的逻辑数据表ID以及分布列标识创建该逻辑数据表的分布表,并完成数据节点间的数据迁移。\n[0040] 现有技术中,在客户端输入查询语句后(即开始查询后),如果参与分布列联合查询的多个分布表不是按同一分布列分布存储的,则需要在各个数据节点上根据相同分布列对相应的逻辑数据表重新进行分布,并且在数据节点间进行数据迁移,查询过程中的数据迁移会占用大量的查询时间,降低查询效率。本发明实施例提供的数据分布的方法,能够在数据存储阶段,按照创建规则选定分布列,数据节点基于选定分布列创建的分布表用于后续的分布列联合查询。当客户端输入查询语句时,数据节点直接根据按照预定分布列创建的多个分布表进行分布列联合查询,可以节省查询时间,提高查询效率。\n[0041] 进一步的,作为对图5所示实施例的进一步扩展,本发明实施例还提供了一种数据分布的方法,如图6所示,所述方法包括如下步骤:\n[0042] 601、在数据查询前,控制节点根据在预设周期内对逻辑数据表的统计结果创建规则设置分布表创建指示。\n[0043] 控制节点根据对逻辑数据表的数据的统计结果将逻辑数据表的至少一个字段作为选定分布列,将选定分布列的分布列标识以及逻辑数据表的ID添加到所述分布表创建指示中。\n[0044] 控制节点的统计对象为并行数据库系统中所有已创建的逻辑数据表,即图2中表A、表B和表C。所述统计结果包括:在一个预设周期内,逻辑数据表被查询的次数、逻辑数据表被查询的表项数据占该逻辑数据表总表项数据的比例以及逻辑数据表中分布列被查询的次数。其中,逻辑数据表被调用的次数为在一个预设周期内该逻辑数据表参与分布列联合查询的次数;逻辑数据表被调用的表项数据占该逻辑数据表总表项数据的比例为在一个预设周期内,逻辑数据表中任意一行表项数据的累计被访问量占该逻辑数据表总表项数据的比例,例如,某逻辑数据表一共有三行表项数据,第二阈值为120%。在5分钟内该逻辑数据表中第一行表项数据被查询了4次,则该行表项数据的查询量为4行(累计值),该行表项数据的查询量占该逻辑数据表总表项数据的133%(4/3=1.33),超过120%的第二阈值。其中,任意一行表项数据被查询不限于被分布列联合查询。逻辑数据表中分布列被查询的次数为在一个预设周期内,逻辑数据表中任意一个字段被作为分布列查询的次数,所述查询不限于分布列联合查询。\n[0045] 具体的:\n[0046] A)在一个预设周期内,当逻辑数据表被查询的次数超过第一阈值时,控制节点将逻辑数据表的ID以及该逻辑数据表中所有字段(作为分布列)的分布列标识添加到分布表创建指示中。\n[0047] B)在一个预设周期内,当逻辑数据表中被查询的表项数据占该逻辑数据表总表项数据的比例超过第二阈值时,控制节点将该逻辑数据表的ID以及该逻辑数据表中所有字段(作为分布列)的分布列标识添加到分布表创建指示中。\n[0048] C)在一个预设周期内,当逻辑数据表中分布列被查询的次数超过第三阈值时,控制节点将该逻辑数据表的ID以及该逻辑数据表中被查询次数超过第三阈值的分布列的分布列标识添加到分布表创建指示中。\n[0049] 在本发明实施例中,控制节点可以根据上述三个统计结果中的任意一个统计结果设置分布表创建指示,例如:\n[0050] 当逻辑数据表被查询的次数和逻辑数据表被查询的表项数据占该逻辑数据表总表项数据的比例均未达到各自阈值时,控制节点不将逻辑数据表的ID添加到分布表创建指示中。当逻辑数据表被查询的次数或逻辑数据表被查询的表项数据占该逻辑数据表总表项数据的比例这两个条件中任意一项达到其相应阈值时,控制节点将逻辑数据表的ID以及该逻辑数据表中所有的字段(作为分布列)的分布列标识添加到分布表创建指示中。当逻辑数据表中分布列被查询的次数达到第三阈值时,控制节点将查询次数达到第三阈值的分布列的分布列标识以及该逻辑数据表的ID添加到分布表创建指示中。\n[0051] 可选的,控制节点还可以将上述三种统计结果进行组合,作为添加逻辑数据表ID及分布列标识的依据。例如,在5分钟的预设周期内,若某逻辑数据表满足逻辑表达式(JoinTimes>6)and(Paccessed Lines Percent>180%)and(CFrenqence>8),则将该逻辑数据表的ID及相应分布列标识添加到分布表创建指示中。其中,(Join Times>6)表示该逻辑数据表被查询的次数大于6次,(Paccessed Lines Percent>180%)表示该逻辑数据表中某一表项数据的查询量占该逻辑数据表总表项数据的比例大于180%,(CFrenqence>\n8)表示该逻辑数据表中某一分布列被查询的次数大于8次,and表示三个判决条件之间为与的关系,即同时满足上述三个判决条件。或者,某逻辑数据表的逻辑表达式还可以为(Paccessed Lines Percent>5/Join Times>50%)and(CFrenqence>6),其中,“/”表示或关系,两个判决条件择一即可。\n[0052] 控制节点控制数据节点创建分布表的语句为:\n[0053]\n[0054] 其中加重字体为在当前标准SQL语言中新增的定义,解释如下:\n[0055] 控制节点控制数据节点创建分布表的语句为:[Distribution on KEY column_name[,column_name,…]…a11owMultipleDistribution,其中,column_name为分布列标识,column_name[,column_name,…]表示可以以多个分布列作为分布算法的自变量,allowMultipleDistribution表示允许创建分布表。\n[0056] 此外,控制节点还可以根据客户端的创建指示将逻辑数据表的ID以及逻辑数据表的选定分布列的分布列标识添加到分布表创建指示中。例如控制节点接收的创建指示中包含查询者或数据库管理员选定的逻辑数据表ID和该逻辑数据表中的至少一个分布列的分布列标识。控制节点将创建指示中的逻辑数据表ID和选定分布列的分布列标识添加到分布表创建指示中。\n[0057] 进一步的,为节省数据节点的存储空间,控制节点还可以定期删除数据节点中未被查询或很少被查询的分布表。具体的,控制节点统计数据节点中各个分布表被查询的次数,如果在一个预设周期内存在被查询次数小于第四阈值的分布表,则控制节点向该分布表所属的数据节点发送分布表删除指示,所述分布表删除指示携带被查询次数小于第四阈值的分布表对应分布列的分布列标识,以及所述分布列所属的逻辑数据表的ID。数据节点接收到所述分布表删除指示后,根据其中携带的逻辑数据表ID以及分布列标识删除对应的分布表。\n[0058] 再进一步的,为避免数据节点重复创建分布表,控制节点在设置分布表创建指示时,还可以判断数据节点是否已根据所述逻辑数据表的ID以及选定分布列的分布列标识创建所述逻辑数据表的分布表,所述逻辑数据表的ID为控制节点添加到分布表创建指示中的逻辑数据表的ID,所述选定分布列的分布列标识为控制节点添加到分布表创建指示中的分布列标识。如果数据节点已经按照该逻辑数据表ID以及选定分布列的分布列标识创建该逻辑数据表的分布表,则控制节点不将所述逻辑数据表的ID以及选定分布列的分布列标识添加到分布表创建指示中。\n[0059] 602、控制节点向数据节点发送分布表创建指示。\n[0060] 控制节点向数据节点发送分布表创建指示,以便数据节点根据分布表创建指示中逻辑数据表的ID、分布列标识以及预设的分布算法为该逻辑数据表创建分布表。\n[0061] 具体的,为表B创建的分布表如图4中B+mdt1+k、B+mdt2+k和B+mdt0+k表格所示。数据节点可以将逻辑数据表的一个字段作为分布列创建一个分布表(如图3所示),也可以将逻辑数据表的两个或多个字段作为分布列创建一个分布表。例如将学号字段和成绩字段加和作为模3算法的自变量。当数据节点根据逻辑数据表的一个字段(例如学号字段)创建一个分布表时,数据节点可创建分布表的最大数量为该逻辑数据表的字段数量。当根据逻辑数据表的两个或多个字段创建一个分布表时,数据节点可创建分布表的最大数量为该逻辑数据表至少两个字段的排列组合,可创建的分布表数量大于该逻辑数据表中字段的数量。\n[0062] 在本发明实施例中,数据节点进行分布或者创建分布表时使用的分布算法包括但不限于为哈希算法、范围算法和轮转算法。\n[0063] 数据节点根据分布表创建指示创建完分布表后,还需要从其他数据节点处获取新建分布表中包括的、但本数据节点中未存储的数据,由此完成数据节点间的数据迁移。\n[0064] 例如,在图4中,数据节点1在创建完分布表B+mdt1+k后,获取数据节点2和数据节点0发送的B+mdt2+j表和B+mdt0+j表中的所有表项数据。\n[0065] 进一步的,为减少数据迁移量,数据节点1还可以只获取数据节点2发送的B+mdt2+j中第一行表项的数据,以及数据节点0发送的B+mdt0+j中第一行表项的数据。\n[0066] 在数据节点创建完分布表并进行数据迁移后,当客户端发起查询请求时控制节点向数据节点发送查询指示,以便数据节点进行分布列联合查询。\n[0067] 当进行分布列联合查询时,可以选择查询代价较小的分布表进行查询,所述查询代价包括但不仅限于数据迁移量。例如,当客户端执行查询语句Select stu_id,course_name from B,C where B:course_id=C:course_id时,数据节点1上参与分布列联合查询的数据表为B+mdt1+k和C+mdt1+k,两表按照相同分布列(课程标识k)进行分布。数据节点1能够查找并向控制节点上报三个学号对应的课程1的成绩。同样数据节点2和数据节点0能够查找并向控制节点上报三个学号对应的课程2和课程3的成绩。控制节点将三个数据节点上报的查询结果汇总反馈给客户端,完成查询。\n[0068] 本发明实施例以两个数据表参与分布列联合查询为例进行说明,实际应用中参与分布列联合查询的数据表也可以为三个以上。\n[0069] 现有技术中,在客户端输入查询语句后(即开始查询后)才开始根据查询条件建立分布表并进行数据迁移,查询过程中的数据迁移会占用大量的查询时间,降低查询效率。本发明实施例提供的数据分布的方法,能够在数据存储阶段,按照对预设数据的统计结果或客户端的指示选定分布列,数据节点基于选定分布列创建的分布表用于后续的分布列联合查询。当客户端输入查询语句时,数据节点直接根据按照预定分布列创建的多个分布表进行分布列联合查询,可以节省查询时间,提高查询效率。\n[0070] 在本发明实施例的一个应用场景中,如图7所示,控制节点可以根据客户端指示或者统计结果指示数据节点再次创建表B的分布表。具体的,701、客户端向控制节点发送分布表创建指示,指示在并行数据库系统中为表B创建分布表。702、控制节点向三个数据节点分别发送分布表创建指示,所述分布表创建指示中携带表B的ID和分布列(课程标识字段)的标识。703、三个数据节点根据分布表创建指示创建表B的分布表。704、控制节点分别向三个数据节点发送数据迁移指示。705、数据节点根据数据迁移指示进行数据迁移。706、数据节点向控制节点发送创建成功消息。707、控制节点接收到数据节点发送的创建成功消息后,向客户端发送创建成功消息。\n[0071] 图7所示的应用场景,可以在客户端查询前在各个数据节点上创建分布表并完数据节点之间的数据迁移。由于分布表是在客户端查询前创建的,无法根据查询语句中的关键字确定创建分布表的分布列,所以在图7所示的应用场景中根据对用户查询数据的统计结果或者客户端事先设置的逻辑数据表ID和分布列创建分布表,创建的分布表用于后续的分布列联合查询。将创建分布表和数据迁移的步骤转移到客户端查询前进行,由此节省了查询过程中创建分布表及数据迁移对查询造成的时延,可以提高查询效率。\n[0072] 在本发明实施例及图7所示的应用场景中,所述数据迁移具体为,源数据节点复制自身存储的数据,将复制的数据传输到目的数据节点中。数据迁移后源数据节点中存储的数据依然存在,实际应用中,所述数据迁移为本领域技术人员的公知技术手段,本发明实施例对此不做过多介绍。\n[0073] 参考图6所示方法实施例的实现,本发明实施例还提供了一种控制节点,用于实现图6所示的方法实施例。如图8所示,所述控制节点包括:处理单元81、发送单元82以及接收单元83,其中,\n[0074] 所述处理单元81,用于在数据查询前,根据创建规则设置分布表创建指示,所述分布表创建指示中携带逻辑数据表的ID以及选定分布列的分布列标识,其中所述选定分布列为所述逻辑数据表中的分布列,所述逻辑数据表为所述控制节点中已创建的逻辑数据表;\n[0075] 所述发送单元82,用于向数据节点发送所述处理单元81设置的所述分布表创建指示,以便所述数据节点根据所述分布表创建指示创建所述逻辑数据表的分布表。\n[0076] 进一步的,所述处理单元81具体用于:统计在预设周期内所述逻辑数据表的数据,得出统计结果,根据所述统计结果将所述逻辑数据表的ID以及所述选定分布列的分布列标识添加到所述分布表创建指示中。\n[0077] 进一步的,所述接收单元83,用于接收客户端的创建指示,所述创建指示中携带所述逻辑数据表的ID以及所述选定分布列的分布列标识;\n[0078] 所述处理单元81还具体用于:\n[0079] 将所述接收单元83接收的所述创建指示中携带的所述逻辑数据表的ID以及所述选定分布列的分布列标识添加到所述分布表创建指示中。\n[0080] 进一步的,所述处理单元81进一步具体用于:在一个预设周期内,统计下述数据中的至少一项:所述逻辑数据表被查询的次数、所述逻辑数据表中被查询的表项数据占所述逻辑数据表总表项数据的比例以及所述逻辑数据表中分布列被查询的次数;\n[0081] 当所述逻辑数据表被查询的次数超过第一阈值时,将所述逻辑数据表的ID以及所述逻辑数据表中所有分布列的分布列标识添加到所述分布表创建指示中;\n[0082] 当所述逻辑数据表中被查询的表项数据占所述逻辑数据表总表项数据的比例超过第二阈值时,将所述逻辑数据表的ID以及所述逻辑数据表中所有分布列的分布列标识添加到所述分布表创建指示中;\n[0083] 当所述逻辑数据表中分布列被查询的次数超过第三阈值时,将所述逻辑数据表的ID以及所述逻辑数据表中被查询次数超过所述第三阈值的分布列的分布列标识添加到所述分布表创建指示中。\n[0084] 进一步的,所述发送单元82还用于:当所述处理单元81统计所述逻辑数据表中分布列对应的分布表被查询的次数小于第四阈值时,向所述数据节点发送分布表删除指示,所述分布表删除指示携带被查询次数小于所述第四阈值的分布表对应的分布列的分布列标识以及所述逻辑数据表的ID,所述分布表删除指示用于指示所述数据节点删除所述被查询次数小于所述第四阈值的分布表。\n[0085] 进一步的,所述处理单元81还用于:在所述控制节点将所述逻辑数据表的ID以及所述选定分布列的分布列标识添加到所述分布表创建指示中之前,判断所述数据节点是否已根据所述逻辑数据表的ID以及所述选定分布列的分布列标识创建所述逻辑数据表的分布表;\n[0086] 当所述数据节点未根据所述逻辑数据表的ID以及所述选定分布列的分布列标识创建所述逻辑数据表的分布表时,将所述逻辑数据表的ID以及所述选定分布列的分布列标识添加到所述分布表创建指示中;\n[0087] 当所述数据节点已根据所述逻辑数据表的ID以及所述选定分布列的分布列标识创建所述逻辑数据表的分布表时,不将所述逻辑数据表的ID以及所述选定分布列的分布列标识添加到所述分布表创建指示中。\n[0088] 本发明实施例提供的控制节点,能够在数据存储阶段,按照对预设数据的统计结果或客户端的指示选定分布列,数据节点基于选定分布列创建的分布表用于后续的分布列联合查询。当客户端输入查询语句时,数据节点直接根据按照预定分布列创建的多个分布表进行分布列联合查询,可以节省查询时间,提高查询效率。\n[0089] 进一步的,本发明实施例还提供了一种数据分布的系统,如图9所示,所述系统包括控制节点91和至三个数据节点92,其中,\n[0090] 所述控制节点91,用于在数据查询前,根据创建规则设置分布表创建指示,所述分布表创建指示中携带逻辑数据表的标识ID以及选定分布列的分布列标识,其中所述选定分布列为所述逻辑数据表中的分布列,所述逻辑数据表为所述控制节点中已创建的逻辑数据表,向所述数据节点92发送所述分布表创建指示。\n[0091] 所述数据节点92,用于在数据查询前,接收所述控制节点91发送的所述分布表创建指示,根据所述分布表创建指示创建所述逻辑数据表的分布表。\n[0092] 本发明实施例提供的数据分布的系统以包含三个数据节点92为例进行说明,实际应用中对数据节点92的数量不做限制。\n[0093] 本发明实施例提供的数据分布的系统,能够在数据存储阶段,控制节点按照对预设数据的统计结果或客户端的指示选定分布列,数据节点基于选定分布列创建的分布表用于后续的分布列联合查询。当客户端输入查询语句时,数据节点直接根据按照预定分布列创建的多个分布表进行分布列联合查询,可以节省查询时间,提高查询效率。\n[0094] 所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。\n[0095] 在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。\n[0096] 所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。\n[0097] 另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。\n[0098] 所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。\n[0099] 以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
法律信息
- 2022-03-01
专利权的转移
登记生效日: 2022.02.16
专利权人由华为技术有限公司变更为华为云计算技术有限公司
地址由518129 广东省深圳市龙岗区坂田华为总部办公楼变更为550025 贵州省贵阳市贵安新区黔中大道交兴功路华为云数据中心
- 2017-10-10
- 2014-05-21
实质审查的生效
IPC(主分类): G06F 17/30
专利申请号: 201280002465.X
申请日: 2012.07.26
- 2014-04-23
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2010-12-15
|
2010-07-28
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |