一种数据查询方法及装置的制造方法_2

文档序号:9750944阅读:来源:国知局
并至已确定数据节点的区间(S卩,移动代价最大的区间)中,可以首先选择与该剩余区间最近的区间,以提高迀移效率,进一步还可以在最近的区间中选择数据量最小的区间,由于数据节点的数据量越小1资源越充裕,查询效率越高。
[0067]实施中,所述计算并集后区间的移动代价,具体可以为:
[0068]如果所述区间在分区表中的数据节点不一致且至少一个数据节点可用,所述区间的移动代价cost=max_min;
[0069]如果所述区间在分区表中的数据节点不可用,所述区间的移动代价cost= 2*(max-min);
[0070]其中,max为所述区间的最大值,min为所述区间的最小值。
[0071]具体实施时,在计算每个区间的移动代价时,如果该区间在各个分区表中的数据节点不一致且至少一个数据节点可用,则所述区间的移动代价为所述区间的范围值,即cost=max-min;如果所述区间在分区表中的数据节点不可用,所述区间的移动代价cost =2*(max_min)。
[0072]本申请实施例中区间移动代价的计算方法可以如下:
[0073]如果所述区间的两表节点一致,假设为nodel,且nodel节点未被占用,则该区间数据节点不变,移动代价cost为O;
[0074]如果所述区间的两表节点不一致,假设为nodel和node2,
[0075]I)如果节点nodel可用,该区间重划分后所述区间对应的节点为nodel,将node2中该区间移动到nodel,移动代价cost=max_min;
[0076]2)如果节点node2可用,该区间重划分后所述区间对应的节点为node2,将nodel中该区间移动到node2,移动代价cost =max_min ;
[0077]如果所述区间对应的数据节点均不可用,该区间重划分后对应的节点为其他节点,移动代价为cost = 2*(max_min)。
[0078]其中,max为区间的最大值,min为区间的最小值。
[0079]本申请实施例所提供的技术方案具有如下优点:
[0080]1、数据迀移量小
[0081]对各个分区数据量进行近似度量,生成的重划分策略使得数据迀移量最小,当数据分布较为均匀时,分区跨度可以近似代表该分区的数据量。
[0082]2、数据迀移次数少
[0083]由于节点间网络资源有限,数据迀移次数与占用的网络资源成正比,本申请实施例使用较少的数据迀移次数完成数据迀移,降低了网络资源的占用。
[0084]3、避免了数据倾斜
[0085]采用本申请实施例生成的重划分策略避免了分区表的数据倾斜,确保各节点负载均衡。
[0086]本申请实施例中重划分可以指对分区表的分区条件进行变更,重新划分数据的过程,数据倾斜可以指不同分区的数据量差距较大、数据分布不均匀。
[0087]图3示出了本申请实施例中range分区表的重划分方法实施的流程示意图,如图所示,本申请实施例中range分区表的重划分方法可以包括如下步骤:
[0088]步骤301、获取表的分区信息,统计两张表构成的区间状态,得到节点数M、区间数N;
[0089]步骤302、计算每个区间的移动代价cost;
[0090]步骤303、按照移动代价从大到小进行区间排序,从N个区间中选出M个移动代价最大的区间;
[0091]步骤304、为选出的区间指定数据节点,并重新计算移动代价,确保数据迀移量及迀移次数最少;
[0092]步骤305、将剩余区间合并到已选区间(S卩,将剩余区间中的数据迀移至已选区间的数据节点中),选取最近的区间中数据量较小的进行合并。
[0093]本申请实施例充分利用了不同分区表存在分布重合的情况,将各个区间重新分布到相应的数据节点中,去除了冗余数据,从而减少了数据迀移量、降低了查询工作量,提高了查询效率。
[0094]为了便于本申请的实施,下面以实例进行说明。
[0095]图4示出了本申请实施例中分区表区间示意图,如图所示,可以包括表A和表B两张表,表A可以包括5个分区并对应5个数据节点(a、b、c、d、e),表B可以包括5个分区并对应5个数据节点(d、e、c、f、a)。
[0096]统计两张表构成的区间状态,两张表的分区取并集,可以得到9个区间、6个节点{a、b、c、d、e、f},即节点数M=6、区间数N=9。
[0097]区间l(a、d节点):-oo?10;
[0098]区间2(b、d 节点):10 ?14;
[0099]区间3(b、e 节点):14 ?25;
[0100]区间4(c、e 节点):25 ?28;
[0101]区间5(c、c 节点):28 ?32;
[0102]区间6(c、f 节点):32 ?40;
[0103]区间7(d、f 节点):40 ?50;
[0104]区间8(e、f 节点):50 ?55;
[0105]区间9(e、a节点):55?+⑴;
[0106]计算每个区间的移动代价cost:
[0107]区间I和区间9的cost为oo ;
[0108]区间2的cost 为14-10 = 4;
[0109]区间3的 cost 为 25-14 = 11;
[0110]区间4的 cost 为 28-25 = 3;
[0111]区间5的 cost 为 35-28 = 7;
[0112]区间6的 cost 为40-35 = 5;
[0113]区间7的 cost 为 50-40 = 10;
[0114]区间8的 cost 为 56-50 = 6;
[0115]可以为区间I和区间9优先选择单独的数据节点,区间I的数据节点为a、d,区间9的数据节点为a、e,那么区间I和区间9的数据节点选择可以有四种情况,即将数据节点a、d、a、e进行组合后得到ae、de、da、aa;但由于aa使得不相邻的两个区间占用同一数据节点、不符合要求,所以剩下三种情况可以选择,即ae、de、da。
[0116]1、本申请实施例首先可以以第一种情况ae进行计算。即,假设为区间I指定数据节点为a,区间9指定数据节点为e;
[0117]然后将剩余的区间按照cost从大到小排序,构建状态树。
[0118]按照cost从大到小排序为:区间3(cost = 11)、区间7(cost = 10)、区间5(cost =7)、区间8(cost = 6)、区间6(cost = 5)、区间2(cost = 4)、区间4(cost = 3)。
[0119]图5示出了本申请实施例中表A与表B并集状态树的结构示意图,如图所示,
[0120]区间3的两条选择为b、e,到达区间7;
[0121]区间7的两条选择为d、f,到达区间5;
[0122]区间5的两条选择为c、c,到达区间8;
[0123]区间8的两条选择为e、f,到达区间6;
[0124]区间6的两条选择为c、f,到达区间2;
[0125]其中,有部分节点由于上面的区间已将该数据节点占用,从而执行了剪枝操作。
[0126]最终,通过深度优先遍历,确定最优的路径为:区间3—b—区间7—d—区间5—c—区间8—e—区间—区间2。
[0127]因此,可以确定:
[0128]区间3的数据节点为b;将数据节点e中的区间3数据迀移到数据节点b中,移动代价cost — 11;
[0129]区间7的数据节点为d;将数据节点f中的区间7数据迀移到数据节点d中,移动代价cost = 10;
[0130]区间5的数据节点为c;由于区间5的两表节点一致,均为数据节点C,且c未被占用,则区间5的数据节点不变,移动代价cost为O;
[0131]区间8的数据节点为e;将数据节点f中的区间8数据迀移到数据节点e中,移动代价cost = 6
[0132]区间6的数据节点为f;将数据节点c中的区间6数据迀移到数据节点f中,移动代价cost — 5 ο
[0133]2、本申请实施例还可以以第二种情况de进行计算。即,假设为区间I指定数据节点为d,区间9指定数据节点为e。
[0134]按照上述计算方式进行计算,可以得到各个区间的cost值,本申请在此不做赘述。
[0135]3、本申请实施例还可以以第三种情况da进行计算。即,假设为区间I指定数据节点为d,为区间9指定数据节点为a。
[0136]依然按照上述计算方式进行计算,可以得到各个区间的cost值,本申请在此不做赘述。
[0137]最终,将三种情况分别计算后,可以确定哪一种情况的移动代价最小,则可以选择移动代价最小的那种情况。
[0138]这里,本申请实施例假设第一种情况(ae情况,即,假设区间I指定数据节点a、区间9指定数据节点e)计算的移动代价最小,那么,接下来可以按照计算出来的结果将剩余区间进行合并,具体过程可以如下所示。
[0139]剩余区间为区间2、区间4,将这两个区间合并至上述区间中,具体合并可以为:
[0140]与区间2最近的区间为区间I和区间3,区间3的数据量(11)小于区间I的数据量(⑴),因此,将区间2合并至区间3(数据节点b)中;
[0141]与区间4最近的区间为区间3和区间5,区间5的数据量(7)小于区间3的数据量
(11),因此,将区间4合并至区间5(数据节点c)中;
[0142]本申请实施例中,重新分区后的数据节点对应的分区分别为:
[0143]数据节点a
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1