发明内容
技术问题:本发明的目的是提供一种基于时间/空间局部性的网格数据副本生成方法,通过分析用户在过去某一段时间内数据访问的规律,或者典型用户数据访问的行为特征,来确定网格中数据副本的生成方法。
技术方案:本发明的方法是一种基于时间/空间局部性的网格数据副本生成方法,基于网格用户数据访问的行为特征,来确定网格中数据副本的数目和其在网格节点上的分布。其基本思想是利用用户访问数据的时间局部性分布来获取网格中数据之间的空间局部性,然后基于空间局部性确定数据副本的数目以及分布原则,从而复制和分布数据的各个副本。
该方法基于网格中数据被访问时表现出的时间局部性来分析数据之间的空间局部性,然后根据空间局部性生成数据在网格中的副本,其步骤主要如下:步骤1.标记网格中存储的数据集合为{D1,D2,...,Dn},具有存储能力的节点集合为{X1,X2,...,Xm},其中m>n,记录k个典型网格用户的访问数据序列分别为S1,S2,...,Sk,则有Si={Da...Db}(0≤i≤k,0≤a,b≤n);
步骤2.对用户t访问数据序列St(0≤t≤k),依据下面的公式1计算访问距离:
dist(a,j)=j-i-1 公式1
其中dist(a,j)表示数据序列中第j次访问所访问的数据a的访问距离,i表示上一次访问数据a为访问序列中第i次访问,依次计算该序列中每次访问的访问距离。然后依据公式2计算所有用户对数据a的访问的距离集合Dis(a),
公式2
其中
表示用户u第k次访问的距离,U表示所有用户的集合;
步骤3.对每个数据D的访问距离集合Dis(D
j)中的值按照区间[2
i-1,2
i)进行分组,其中0和∞除外,统计每个分组i中访问距离出现的访问次数
步骤4.从数据集合{D
1,D
2,...,D
n}选择两个数据D
p和D
q,其中0≤p≤n,0≤q≤n,p≠q,根据公式3和公式4计算两者分布的差异
公式3
公式4
其中
和
分别为数据D
p和D
q按步骤3中计算得到的访问距离在分组i中的次数,
为第i组的差异。然后根据公式5分别计算
和
公式5
其中
为数据D
p按步骤3中计算得到的访问距离在分组i中的次数。在此基础上根据(6)计算数据D
p和D
q的差异Diff(D
p,D
q):
公式6
其中
为D
p和D
q之间分布的差异,
和
为D
p和D
q的分布次数,
步骤5.建立邻近关系图G=(V,E),其中顶点集合V为数据集合{D1,D2,...,Dn},E为边集,如果两个顶点Dp和Dq之间存在Diff(Dp,Dq)≤δ,则两个顶点Dp和Dq之间存在边,其权值为Diff(Dp,Dq);δ为阀值,可以根据需要进行调整,初始值为0.5;
步骤6.从邻近图G中寻找任意一条边,如果不存在,将邻近图中没有标记为已分组的顶点各自作为一组分组保存到组集合R中,同时跳转到第11步;
步骤7.如果存在一条边,则选择该边的两顶点表示的数据Dp,Dq组成集合T,并将Dp,Dq标记为已分组,同时将该边从图G中去掉;
步骤8.从邻近图中寻找不属于集合S的顶点Dw,并且Dw到集合T中每个元素所表示的顶点存在一条边;
步骤9.如果Dw存在,则从邻近图中去掉Dw到集合T中每个元素所表示的顶点的边,并且将Dw加入到集合T中,将Dw标记为已分组,然后跳转到第8步;
步骤10.如果Dw不存在,则将集合T中的元素作为一组邻近数据保存到组集合R中,并跳转到第6步;
步骤11.从组集合R中选择每一组Rz,从数据集合{D1,D2,...,Dn}中复制Rz所包含的数据Dtemp={Di|i∈Rz},然后从节点集合{X1,X2,...,Xm}中找到拥有足够存储空间的节点Xt,将数据组合Dtemp拷贝到网格节点Xt上。
有益效果:本发明方法提出了一种基于时间/空间局部性的网格数据副本生成方法,主要解决网格数据副本的生成问题。通过使用本发明的方法,能够采用尽量少的网格数据副本,节省网格节点存储空间,同时通过对这些数据副本的有效分布,达到减少网格数据访问延迟,减轻网络带宽压力的目的。下面给出具体的说明。
基于用户的时间/空间局部性特征生成网格数据副本,既限制了副本生成的数目,节省存储空间,又根据用户行为特征生成较为足够的副本,尽量降低数据的访问延迟和减少带宽消耗。目前网格中的数据副本在初始时数目固定,然后根据数据被访问时动态生成数据副本。基于固定的副本数目忽略了数据被访问的模式,由于局部性原理,大部分时候用户访问的数据集中在少量数据,固定的副本数目为不经常使用的数据生成了大量的副本,浪费了存储空间。并且副本的分布主要考虑网格节点负载均衡,并没有基于用户访问数据的模式,使用户难以在与任务执行节点相邻近的各节点上获取全部所需的数据。本发明方法基于用户访问数据时的行为特征,提出了一种副本数目不相等的副本生成方法,有效地弥补了过去副本生成中的这些弱点。
具体实施方式
整个副本生成的流程如图1所示,主要包含下面几个主要的子过程:
一、访问距离(Reference Distance)计算
用户对网格中某数据某次访问的访问距离(Reference Distance)是指用户在对该数据前一次访问和这次访问这两次相继访问中所访问的数据的数目。其中的相继访问指两次访问该数据中没有再访问该数据,例如,假设用户对网格中数据的访问序列为adcdcfageft,两次对数据a的访问中只访问了d,c,f三个数据,没有再次访问a,则这两次对a的访问就是相继访问。
在用户对网格中数据的访问序列中,如果两次对某数据(记为a)的相继访问的序号分别为i和j,则序号为j的对a的访问的距离dist(a,j)可以通过下面的公式计算:
dist(a,j)=j-i-1 (1)
例如,假设用户对网格中数据的访问序列为adcdcfageft,则根据公式可以得出第二次对a的访问距离为5。需要注意的是,如果是第一次对某个数据进行访问,由于没有前面访问作为基准,则认为访问距离极为∞,如前面访问序列中的第一次对a的访问距离。
二、数据访问距离分布
一般来说,网格中各用户对数据的访问各自独立,相互之间不受影响。这样,网格中所有用户对数据a的访问的距离Dis(a)由各个用户自己对该数据的访问的距离组成。下面给出了相应的计算公式:
其中
表示用户u第k次访问的距离,U表示所有用户的集合。
在本发明中,我们用如图2所示的柱状图来表示某一数据的访问距离分布。在图中,横坐标i表示访问距离属于区间[2i-1,2i),纵坐标的值表示访问距离在该区间的访问次数。需要注意的是,有两个例外的情况:横坐标为0时,表示此时的访问距离为0;横坐标为∞时,表示此时的访问距离为∞。由于访问距离较大的访问的次数一般较少,我们通常将超出某一大小的访问距离也认为是∞。在图2中,我们将访问距离大小超出217的访问的距离都认为是∞。
实际上,数据的访问距离分布表示了该数据被访问过程中的时间局部性。如果对一个数据的绝大部分访问的访问距离较小,即在图中绝大部分的访问都集中在横坐标值比较小的区域,则表示对该数据的访问具有较好的时间局部性。反之,如果数据的绝大部分访问的访问距离较大,则表示对该数据的访问的时间局部性较差。
三、数据邻近关系
数据邻近关系分析指分析网格中数据被在一起访问的机会,也就是网格中各数据之间的空间局部性。即两个数据之间的空间局部性取决于这两个数据被访问时邻近的概率。
通常,如果两个数据之间的空间局部性较好,两者被邻近访问的机会较大,则它们各自的时间局部性分布比较相近。在本发明中,就是依据这一基本思想,基于数据的访问距离分布来进行数据邻近关系分析。
在前面我们用网格中数据的访问距离分布图来表示数据的时间局部性,则分析数据访问距离分布图之间的相似程度就可以用来表示其时间局部性分布的相似程度了。
在分析网格中数据的访问距离分布图之间的差异时,我们将访问距离分布图中分组集合记为G(横坐标值为0和∞的分组不进行统计),集合中第i组表示访问距离的区间为[2i-1,2i),则数据A和B之间第i组访问次数的差异NA,B,i可以通过下面的公式来计算:
NA,B,i=|NA,i-NB,i| (3)
其中NA,i表示数据A在第i组中出现的次数。从而,数据A和B之间的整个访问距离分布图的差异NA,B可以通过下面的公式来计算:
由于网格中不同数据被访问的次数基本上不会相同,为了便于比较数据之间的邻近关系,我们通过下面的公式对上面的整个访问距离分布图的差异进行归一化处理:
Diff(A,B)=NA,B/NA+NB (6)
其中NA和NB分别表示数据A和B的总的访问次数。
根据Diff(A,B)的值,我们就可以量化数据A和B之间的邻近关系:如果A和B之间的空间局部性较好,则其时间局部性分布比较相似,则Diff(A,B)的值比较小。反之则比较大。
我们可以通过给Diff(A,B)值限定一个阀值δ,只有其值小于这个阀值,才认为这两个数据具有较好的邻近关系,在网格中复制副本并分布时,需要将这两个数据的副本分布在一起,以便用户访问网格中数据时经常在一起访问这两个数据。
对网格中的数据进行邻近关系分析,就能得到整个网格中所有数据的邻近关系图。图3给出了一个网格中部分数据邻近关系图的示例,图中每个顶点表示一个数据,相互之间的边表示这两个数据之间的Diff值小于阀值δ,经常在一起访问的机会比较大。
如果两个数据之间存在边,则表示这两个数据之间具有比较好的邻近关系,其副本应该位于网格中同一个节点上。同时,我们可以通过调整阀值δ的大小,根据网格所具备的存储能力调整副本的生成方法,达到既生成较少的副本数目,又充分利用网格存储能力,提高网格中数据访问的性能。
四、副本生成方案
根据前面得到的网格中数据的邻近关系图,我们就可以得到网格中应该分布在一起的数据分组了。下面给出了相应的分组算法:
算法1:邻近图中数据分组算法输入:数据邻近图G输出:存储数据分组的组集合R算法过程:(1)从邻近图G中寻找任意一条边,如果不存在,将邻近图中没有标记为已分组的顶点各自作为一组分组保存到组集合R中,同时退出;(2)如果存在一条边,则选择该边的两顶点表示的数据Dp,Dq组成集合T,并将Dp,Dq标记为已分组,同时将该边从图G中去掉;(3)从邻近图中寻找不属于集合S的顶点Dw,并且Dw到集合T中每个元素所表示的顶点存在一条边;(4)如果Dw存在,则从邻近图中去掉Dw到集合T中每个元素所表示的顶点的边,并且将Dw加入到集合T中,将Dw标记为已分组,然后跳转到第3步;(5)如果Dw不存在,则将集合T中的元素作为一组邻近数据保存到组集合R中,并跳转到第1步; |
根据上面的算法,我们对图3所示的网格中数据邻近关系图进行分组,就可以得到下面的分组:
<A,B>,<B,C,D>,<B,J>,<D,F>,<C,E>,<E,F>,<H,F>,<G,F>,<I>
这样网格中每个数据在分组中出现的次数就代表了该数据需要的数据数目,其减1就表示数据的副本数目,下面的表1给出了依据图3得到的数据数目和相应的副本数目。
表1 网格中数据分数和副本份数
数据 |
数据份数 |
副本份数 |
数据 |
数据份数 |
副本份数 |
A |
1 |
0 |
F |
4 |
3 |
B |
3 |
2 |
G |
1 |
0 |
C |
2 |
1 |
H |
1 |
0 |
D |
2 |
1 |
I |
1 |
0 |
E |
2 |
1 |
J |
1 |
0 |
五、数据副本分布
根据上面的副本生成方案中的数据分组就能够决定网格数据的数目,然后就可以进行数据副本分布了。数据副本分布的思想比较简单,对于副本生成方案中每个分组,计算分组中数据的大小,在网格节点中选择一个具有足够存储能力的节点,将分组中的数据复制一份,传输到该网格节点上,这样就完成了数据副本的分布。
为了方便描述,我们假设有如下应用实例:
网格中需要管理的数据集合{D1,D2,...,Dn},具有存储能力的节点集合{X1,X2,...,Xm}。同时,已经获取了k个典型网格用户的数据访问序列(S1,S2,...,Sk)。则其具体实施方式如下:
(1)对用户t的访问序列St(0≤t≤k),依次计算该序列中每次访问的访问距离,并将其值加入到该次访问的数据Dj(0≤j≤n)的访问距离的集合Dis(Dj)中;
(2)对每个数据D
j(0≤j≤n)的访问距离集合Dis(D
j)中的值按照区间[2
i-1,2
i)进行分组(0和∞除外),计算每个分组中出现的访问次数
(3)从数据集合{D1,D2,...,Dn}选择两个Dp和Dq(0≤p≤n,0≤q≤n,p≠q),分别计算其和从而计算Diff(Dp,Dq)的值;
(4)建立邻近关系图G=(V,E),其中顶点集合V为数据集合{D1,D2,...,Dn},E为边集,如果两个顶点Dp和Dq之间存在Diff(Dp,Dq)≤δ,则两个顶点Dp和Dq之间存在边,其权值为Diff(Dp,Dq)。δ为阀值,可以根据需要进行调整,初始值为0.5;
(5)从邻近图G中寻找任意一条边,如果不存在,将邻近图中没有标记为已分组的顶点各自作为一组分组保存到组集合R中,同时跳转到第10步;
(6)如果存在一条边,则选择该边的两顶点表示的数据Dp,Dq组成集合T,并将Dp,Dq标记为已分组,同时将该边从图G中去掉;
(7)从邻近图中寻找不属于集合S的顶点Dw,并且Dw到集合T中每个元素所表示的顶点存在一条边;
(8)如果Dw存在,则从邻近图中去掉Dw到集合T中每个元素所表示的顶点的边,并且将Dw加入到集合T中,将Dw标记为已分组,然后跳转到第7步;
(9)如果Dw不存在,则将集合T中的元素作为一组邻近数据保存到组集合R中,并跳转到第5步;
(10)从组集合R中选择每一组Rz,从数据集合{D1,D2,...,Dn}中复制Rz所包含的数据Dtemp={Di|i∈Rz},然后从节点集合{X1,X2,...,Xm}中找到拥有足够存储空间的节点Xt,将数据组合Dtemp拷贝到网格节点Xt上。