一种分布式存储系统的数据分裂方法及装置与流程

文档序号:11250927阅读:565来源:国知局
一种分布式存储系统的数据分裂方法及装置与流程

本发明涉及数据存储技术领域,特别是涉及一种分布式存储系统的数据分裂方法及装置。



背景技术:

大数据时代,海量数据的存储是一项关键技术。随着数据规模的增加,单个存储结点的qps(querypersecond,每秒查询率)过大,无法承受访问的压力时,就需要采用分布式存储的解决方案,使用数据分片技术,将数据分发到不同的存储结点,以消除访问请求的热点,从而实现负载均衡。其中,访问请求的热点,指qps过大的数据分片对应的存储结点,而存储结点指存储服务器,可以是物理服务器,也可以是虚拟服务器。

其中,传统的关系型数据库以及大数据时代兴起的各类nosql(notonlysql,非关系型数据库)数据库,都已广泛应用数据分片技术,构成分布式存储系统,并且由于分布式存储系统采用了可扩展的系统结构,利用多台存储服务器来分担存储负荷、位置服务器来定位存储信息,不但提高了系统的可靠性、可用性和存取效率,还易于扩展,能够随着数据量、qps的增加,动态地扩展存储结点;例如hbase,一个分布式的、面向列的开源数据库,应用数据分片技术,会将一个数据表的数据划分为若干region(hbase数据存储和管理的基本单位),即若干个数据分片,并将region分配到集群的各个结点上,而当一个region的大小超过设定的阈值时,则会自动根据该region的rowkey(行键)范围对半分裂为两个子region,而分裂后的两个子region将会分配在不同的存储结点上。

目前,大部分的数据分片技术,都是采用基于索引的分裂策略。例如hbase,假设数据量基于主键索引有一定分布规律,那么,可以根据主键索引进行分裂,分裂后,将数据量均匀的划分到两个子region中;其中,主键索引为针对主键建立的唯一索引,它是对数据库表中主键对应列的值进行排序的一种结构。举例而言,数据表a中,索引键值小于或等于k1的数据总量与大于k1的数据总量相等,那么,便可以确定k1为分裂点,将索引键值小于或等于k1的数据划分为一个子region,大于k1的数据确定为另一个子region。

然而,在实际应用中,对于数据的访问并不均匀,也就是说,即使基于索引的分裂策略能保证数据量的均匀划分,但请求的访问仍然可能集中在部分的数据上,即,数据分片上数据量的分布,与访问请求的分布可能并不一致,从而使得基于索引的分裂策略失效,无法解决热点问题,导致访问请求的负载不均衡。



技术实现要素:

本发明实施例的目的在于提供一种分布式存储系统的数据分裂方法及装置,以实现访问请求的负载均衡。具体技术方案如下:

第一方面,本发明实施例提供了一种分布式存储系统的数据分裂方法,所述方法包括:

监测各个数据分片的每秒查询率qps是否大于第一预设阈值;

将qps大于第一预设阈值的数据分片确定为目标数据分片,对所述目标数据分片的访问请求进行采样,形成关于所采样的访问请求对应的索引键值的采样数据流;

判断所述目标数据分片的qps是否大于第二预设阈值;

若是,确定所述采样数据流中每预设时间段内的索引键值的中位数;

根据所确定的中位数,预测获得当前时刻对应的下一所述预设时间段内的索引键值的中位数,并将所预测获得的中位数确定为分裂点;

根据所述分裂点,对所述目标数据分片进行分裂。

可选地,本发明实施例提供的一种分布式存储系统的数据分裂方法,还包括:当监测到所述目标数据分片的qps大于所述第一预设阈值,且不大于所述第二预设阈值的第一状态时,记录所述第一状态对应的第一持续时间;

当所述第一持续时间大于第三预设阈值时,执行所述确定所述采样数据流中每预设时间段内的索引键值的中位数的步骤。

可选地,本发明实施例提供的一种分布式存储系统的数据分裂方法,还包括:

当监测到所述目标数据分片的qps小于所述第一预设阈值时,判断已记录的所述第一持续时间是否大于第四预设阈值;

如果是,则执行所述确定所述采样数据流中每预设时间段内的索引键值的中位数的步骤。

可选地,所述根据所述分裂点,对所述目标数据分片进行分裂的步骤,包括:

根据所述分裂点,对所述目标数据分片进行逻辑分裂,得到逻辑子数据分片;

针对每一所述逻辑子数据分片,判断该逻辑子数据分片的qps是否大于所述第一预设阈值;

若该逻辑子数据分片的qps大于所述第一预设阈值,以该逻辑子数据分片来更新所述目标数据分片,返回执行所述对所述目标数据分片的访问请求进行采样的步骤;

根据预设规则,将最终所得到的逻辑子数据分片对应的数据分配到所述分布式存储系统中的存储结点。

可选地,所述根据所述分裂点,对所述目标数据分片进行逻辑分裂,得到逻辑子数据分片的步骤,包括:

根据所述分裂点,将所述目标数据分片的元数据信息分裂为子元数据信息;

将所述子元数据信息对应的数据分片确定为逻辑子数据分片。

可选地,在所述将所述逻辑子数据分片对应的数据分配到所述分布式存储系统中的存储结点的步骤之前,所述方法还包括:

在该逻辑子数据分片的qps不大于所述第一预设阈值的情况下,判断该逻辑子数据分片的qps是否小于第五预设阈值;

若该逻辑子数据分片的qps小于所述第五预设阈值,确定所述目标数据分片的目标相邻数据分片;其中,所述目标相邻数据分片的qps在所述目标数据分片的相邻数据分片的qps中最小;所述相邻数据分片与所述目标数据分片在索引上连续;

判断所述目标相邻数据分片的qps是否小于第六预设阈值;

若所述目标相邻数据分片的qps小于所述第六预设阈值,将该逻辑子数据分片合并到所述目标相邻数据分片上。

第二方面,本发明实施例提供了一种分布式存储系统的数据分裂装置,所述装置包括:

监测模块,用于监测各个数据分片的每秒查询率qps是否大于第一预设阈值;

第一确定模块,用于将qps大于第一预设阈值的数据分片确定为目标数据分片;

采样模块,用于对所述目标数据分片的访问请求进行采样,形成关于所采样的访问请求对应的索引键值的采样数据流;

第一判断模块,用于判断所述目标数据分片的qps是否大于第二预设阈值;

第二确定模块,用于在所述第一判断模块的判断结果为是的情况下,确定所述采样数据流中每预设时间段内的索引键值的中位数;

第三确定模块,用于根据所述第二确定模块所确定的中位数,预测获得当前时刻对应的下一所述预设时间段内的索引键值的中位数,并将所预测获得的中位数确定为分裂点;

第一分裂模块,用于根据所述分裂点,对所述目标数据分片进行分裂。

可选地,本发明实施例提供的一种分布式存储系统的数据分裂装置,还包括:

记录模块,用于当所述监测模块监测到所述目标数据分片的qps大于所述第一预设阈值,且不大于所述第二预设阈值的第一状态时,记录所述第一状态对应的第一持续时间;当所述第一持续时间大于第三预设阈值时,触发所述第二确定模块。

可选地,本发明实施例提供的一种分布式存储系统的数据分裂装置,还包括:

第二判断模块,用于当所述监测模块监测到所述目标数据分片的qps小于所述第一预设阈值时,判断已记录的所述第一持续时间是否大于第四预设阈值;如果是,触发所述第二确定模块。

可选地,所述第一分裂模块,包括:

分裂子模块,用于根据所述分裂点,对所述目标数据分片进行逻辑分裂,得到逻辑子数据分片;

判断子模块,用于针对每一所述逻辑子数据分片,判断该逻辑子数据分片的qps是否大于所述第一预设阈值;

更新子模块,用于在所述判断子模块的判断结果为是的情况下,以该逻辑子数据分片来更新所述目标数据分片,触发所述采样模块;

分配子模块,用于根据预设规则,将最终所得到的逻辑子数据分片对应的数据分配到所述分布式存储系统中的存储结点。

可选地,所述分裂子模块,具体用于:

根据所述分裂点,将所述目标数据分片的元数据信息分裂为子元数据信息;

将所述子元数据信息对应的数据分片确定为逻辑子数据分片。

可选地,本发明实施例提供的一种分布式存储系统的数据分裂装置,所述装置还包括:

第三判断模块,用于在所述分配子模块将所述逻辑子数据分片对应的数据分配到所述分布式存储系统中的存储结点之前,在该逻辑子数据分片的qps不大于所述第一预设阈值的情况下,判断该逻辑子数据分片的qps是否小于第五预设阈值;

第四确定模块,用于在所述第三判断模块的判断结果为是的情况下,确定所述目标数据分片的目标相邻数据分片;其中,所述目标相邻数据分片的qps在所述目标数据分片的相邻数据分片的qps中最小;所述相邻数据分片与所述目标数据分片在索引上连续;

第四判断模块,用于判断所述目标相邻数据分片的qps是否小于第六预设阈值;

合并模块,用于在所述第四判断模块的判断结果为是的情况下,将该逻辑子数据分片合并到所述目标相邻数据分片上。

本发明实施例提供的一种分布式存储系统的数据分裂方法,首先,监测各个数据分片的每秒查询率qps是否大于第一预设阈值;将qps大于第一预设阈值的数据分片确定为目标数据分片,对目标数据分片的访问请求进行采样,形成关于所采样的访问请求对应的索引键值的采样数据流;判断目标数据分片的qps是否大于第二预设阈值;若是,确定采样数据流中每预设时间段内的索引键值的中位数;根据所确定的中位数,预测获得当前时刻对应的下一预设时间段内的索引键值的中位数,并将所预测获得的中位数确定为分裂点;根据分裂点,对目标数据分片进行分裂。

可以看出,本发明实施例提供的分布式存储系统的数据分裂方法,与现有技术相比,由于本发明实施例对于qps过大的数据分片的访问请求进行采样获得采样数据流,根据采样数据流确定分裂点进行分裂,实际是针对访问热点对应的数据分片进行分裂,因此能够消除请求访问热点,从而达到负载均衡。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的一种分布式存储系统的数据分裂方法的流程示意图;

图2为本发明实施例提供的一种分布式存储系统的数据分裂装置的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

为实现访问请求的负载均衡,本发明实施例提供了一种分布式存储系统的数据分裂方法及装置。

下面将首先对本发明实施例提供的一种分布式存储系统的数据分裂方法进行介绍。

参见图1,本发明实施例提供了一种分布式存储系统的数据分裂方法,包括如下步骤:

s101,监测各个数据分片的每秒查询率qps是否大于第一预设阈值。

实际应用中,分布式存储系统中,对于每一个数据分片,通常都能够获取到对应的qps,因此,可以对各个数据分片的qps进行监测,qps大于第一预设阈值的数据分片对应的结点便可能是需要进行数据分裂的热点。

s102,将qps大于第一预设阈值的数据分片确定为目标数据分片,对目标数据分片的访问请求进行采样,形成关于所采样的访问请求对应的索引键值的采样数据流。

其中,可以将qps大于第一预设阈值的数据分片确定为目标数据分片,并对目标数据分片的访问请求进行监控,然后对目标数据分片的访问请求进行采样,形成关于所采样的访问请求对应的索引键值的采样数据流;可以理解的是,采样数据流是按照访问请求的时间顺序形成的,且形成的采样数据流中的每一个点都与访问请求的时间及对应的索引键值相关;此外,考虑到本发明实施例提供的方案的计算量及时间复杂度,可以按照预设比例或预设大小,对目标数据分片的访问请求进行采样,合理地减少相关的数据量。

需要说明的是,本发明实施例中所采样的访问请求对应的索引键可以是主键,也可以不是主键,分布式存储系统中设定能基于该键进行分片,且能够获取到对该键的键值访问情况即可,在此不作限定。例如:假设在分布式存储系统mongodb中,针对数据分片a,设定除了主键key_pri外,在键key1上建立索引后,也能够基于键key1进行分片,且针对键key1的键值访问情况通过mongodb可以获取到,那么,针对数据分片a,应用本发明实施例提供的分布式存储系统的数据分裂方法,即可以基于主键key_pri进行分片,也可以基于键key1进行分片。

s103,判断目标数据分片的qps是否大于第二预设阈值,若是,执行s104。

可以理解的是,若目标数据分片的qps大于第二预设阈值,即qps比较大,需要进行分裂,那么,此时便可以对目标数据分片进行强制分裂。

如果目标数据分片的qps不大于第二预设阈值,但大于第一预设阈值的状态较长,则也可以判定该数据分片需要进行分裂。因此,本发明实施例提供的一种分布式存储系统的数据分裂方法,在图1所示发明实施例的基础上,还可以包括:当监测到目标数据分片的qps大于第一预设阈值,且不大于第二预设阈值的第一状态时,记录第一状态对应的第一持续时间;

当第一持续时间大于第三预设阈值时,执行s104。

此外,若目标数据分片的qps不大于第二预设阈值,并且在后面某时刻,其qps又突然下降,小于第一预设阈值,但它大于第一预设阈值的状态维持了较长时间,如5分钟,那么,则表明,在未来,用户可能还会有类似的访问请求导致qps上升,因此,也可以提前进行分裂,即是说,本发明实施例提供的一种分布式存储系统的数据分裂方法,还可以包括:

当监测到目标数据分片的qps小于第一预设阈值时,判断已记录的第一持续时间是否大于第四预设阈值;如果是,则执行s104。

s104,确定采样数据流中每预设时间段内的索引键值的中位数。

其中,若采样数据流中某预设时间段内的索引键值为奇数个,那么所有值按照高低排序后,正中间的一个索引键值即为中位数,若值有偶数个,通常取排序后最中间的两个索引键值的平均数作为中位数。例如:假设,采样数据流中第二个预设时间段内包括的索引键值为奇数个,分别为:10、14、17、20、23,那么,第二个预设时间段内的索引键值的中位数便为17;采样数据流中第三个预设时间段包括的索引键值为偶数个,分别为:11、13、14、17、20、21、23、25,那么,第三个预设时间段内的索引键值的中位数便为:(17+20)÷2=18.5。

需要说明的是,在第一种实现方式中,可以从采样开始,每预设时间段,确定一次这段时间内形成的索引键值的中位数,并进行记录,在需要对目标数据分片进行分裂时,从记录中确定出采样数据流中每预设时间段内的索引键值的中位数。

举例而言,预设时间段为10s,预设比例为10%,那么,监测到数据分片data_slice1的qps大于第一预设阈值时,便可以从此刻开始,按照访问请求的时间和10%的比例,对目标数据分片的访问请求进行采样,形成关于索引键值的采样数据流data_stream,然后在采样10s后,确定data_stream中第一个10s内的索引键值的中位数,采样20s后,确定data_stream中第二个10s对应的中位数,以及在采样30s后,确定data_stream中第三个10s对应的中位数等,并进行记录,以便根据记录执行后续步骤。

在第二种实现方式中,可以是在需要对目标数据分片进行分裂时,进行计算并确定出采样数据流中每预设时间段内的索引键值的中位数,关于第一种实现方式与第二种实现方式,都是可行的,具体根据实际需求进行选择,在此不作限定。

在本发明实施例中,某一预设时间段内,可能访问请求数非常少,对应地,采样得到的数据流中关于该预设时间段内的点也比较少或者没有,为了避免误差太大,此时,可以采用现有技术中的滑动窗口算法,结合该预设时间段的前一预设时间段内的部分点,来确定该预设时间段对应的中位数。

具体地,可以在确定采样数据流中每预设时间段内的索引键值的中位数时,针对数据流点数少于预设采样点数的预设时间段,根据滑动窗口算法的原理,基于预设窗口大小,向前滑动,其中,窗口大小可以为预设采样点数,窗口滑动大小由预设时间段决定。

举例而言,预设时间段为10s,即每10秒取一次平均值,预设采样点数为5,即窗口大小为5,假设,目标数据分片在采样的20秒内形成的数据流中的点(采样时间,索引键值)如下所示:

[(1,2),(2,5),(5,66),(7,23),(9,77),(11,32),(14,55),(18,4),(19,67)]

可以看出,第一个10s,对应的窗口为:[(1,2),(2,5),(5,66),(7,23),(9,77)],点数大于5,因此可以直接求得这10s内的索引键值的中位数为23;而第二个10s,对应的数据流的点为[(11,32),(14,55),(18,4),(19,67)],小于5,那么,便可以从点(19,67)开始,向前滑动10s,即第二个窗口为[(9,77),(11,32),(14,55),(18,4),(19,67)],得出第二个10s内的索引键值的中位数为55。

当然,也可以用其他合理的方法来确定所形成的数据流中每预设时间段内的索引键值的中位数,此处不作限定。

s105,根据所确定的中位数,预测获得当前时刻对应的下一预设时间段内的索引键值的中位数,并将所预测获得的中位数确定为分裂点。

可以理解的是,每一预设时间段的中位数都反映了访问请求的分布情况,因此,可以根据所确定的中位数,预测获得当前时刻对应的下一预设时间段内的索引键值的中位数,即下一预设时间段内的访问请求分布情况,并将预测获得的中位数确定为分裂点。

此外,本发明实施例中,分布式存储系统中,qps大于第一预设阈值的目标数据分片可能有多个,而对于目标数据分片来说,由于qps比较高,因此在访问请求采样过程中,即使按照比例进行采样,得到的数据流中点数也可能会很多,鉴于此,可以采用现有技术中的二次指数平滑法来预测当前时刻对应的下一预设时间段内的索引键值的中位数,可以理解的是,该算法适合海量数据流式处理的方法,即使数据量很大,也能保证在需要分裂时,预测获得需要的中位数。

需要说明的是,二次指数平滑法是对一次指数平滑值再做一次指数平滑的方法。它不能单独地进行预测,必须与一次指数平滑法配合,建立预测的数学模型,然后运用数学模型来确定预测值,二次指数平滑法实质上是将历史数据进行加权平均作为未来时刻的预测结果。其中,一次指数平滑法也属于现有技术,此处不再赘述。

二次指数平滑法预测模型为:

yt+t=at+bt×t

其中,yt+t为第t+t期的预测值,t为t期到预测期的间隔期数,

分别为一次指数平滑和二次指数平滑值,a为平滑系数。

可以理解的是,应用二次指数平滑法对t+1期做出预测,我们只要在at的基础上加一个变动趋势值bt即可;要预测t+t期,只要在at基础上加t个bt。

举例而言,在本发明实施例中,假设预设时间段为10s,a的初始值为0.9,初始值为23,的初始值为28.40,当前时刻对应的下一预设时间段为第9个10s,即,要预测获得第9期的中位数,其中,已经确定的前7期中位数分别如下表所示:

那么,第9期,即第9个10s对应的中位数为:

y7+2=a7+b7×2

因此,y7+2=69.77+6.93×2=83.63。可以看出,即使在数据量很大,需要分裂的时候,无法把当前时刻之前的所有预设时间段对应的中位数都确定出来,也能够预测获得当前时刻的下一预设时间段对应的中位数。

s106,根据分裂点,对目标数据分片进行分裂。

其中,在确定分裂点后,可以根据分裂点,将目标数据分片中大于等于分裂点的数据分裂为一个数据分片,小于分裂点的数据分裂为另一个数据分片。

需要说明的是,在一些分布式存储系统中,如hbase,对目标数据分片进行分裂包括两步,即首先进行逻辑分裂,然后再将逻辑分裂后得到的子逻辑数据分片对应的数据分配到分布式存储系统的结点上,关于具体分配到哪个结点由分布式存储系统中的调度系统决定,此为现有技术,不再赘述。

而在应用本发明实施例提供的技术方案对目标数据分片进行分裂的过程中,目标数据分片第一次分裂后得到的子数据分片可能仍需重复上述步骤,再进行多次分裂,为避免大量无意义的磁盘输入输出,针对上述类型的分布式存储系统,可以先对目标数据分片进行逻辑分裂,直到得到的逻辑子数据分片均不需再分裂后,才将分裂得到的每一逻辑子数据分片对应的数据分配到分布式存储系统的结点上。

具体地,所述根据分裂点,对目标数据分片进行分裂的步骤,可以包括:

根据分裂点,对目标数据分片进行逻辑分裂,得到逻辑子数据分片;

针对每一逻辑子数据分片,判断该逻辑子数据分片的qps是否大于第一预设阈值;

若该逻辑子数据分片的qps大于第一预设阈值,以该逻辑子数据分片来更新目标数据分片,返回执行所述对目标数据分片的访问请求进行采样的步骤;

根据预设规则,将最终所得到的逻辑子数据分片对应的数据分配到分布式存储系统中的存储结点。

其中,预设规则与分布式存储系统中的调度系统相关。

更具体地,所述根据分裂点,对目标数据分片进行逻辑分裂,得到逻辑子数据分片的步骤,可以包括:根据分裂点,将目标数据分片的元数据信息分裂为子元数据信息;将子元数据信息对应的数据分片确定为逻辑子数据分片。即,修改目标数据分片的元数据信息,以分裂点为界限,分别将大于等于分裂点的数据的索引与小于分裂点的数据的索引生成两个分区,但生成的每一索引分区对应数据的引用仍指向目标数据分片的数据文件,也就是说,从系统外部看,目标数据分片仍是一个整体。关于具体如何修改目标数据分片的元数据信息,属于现有技术,此处不再赘述。

此外,目标数据分片在每一次分裂过程中,可能会产生大量qps比较低的数据分片,这种数据分片一般不会发展成高qps的数据分片,因此,为它们重新分配存储结点,对分布式存储系统的内存或调度资源来说,是一种浪费,为避免过多这种无效数据分片的产生,可以将它们合并到邻近的低qps的数据分片上。

具体地,在所述将逻辑子数据分片对应的数据分配到分布式存储系统中的存储结点的步骤之前,本发明实施例中,还可以包括:

在该逻辑子数据分片的qps不大于第一预设阈值的情况下,判断该逻辑子数据分片的qps是否小于第五预设阈值;

若该逻辑子数据分片的qps小于第五预设阈值,确定目标数据分片的目标相邻数据分片;

判断目标相邻数据分片的qps是否小于第六预设阈值;

若目标相邻数据分片的qps小于第六预设阈值,将该逻辑子数据分片合并到目标相邻数据分片上。

其中,目标相邻数据分片的qps在目标数据分片的相邻数据分片的qps中最小;相邻数据分片与目标数据分片在索引上连续。合并到目标相邻数据分片上,可以防止合并后产生高qps的数据分片,而由于目标相邻数据分片与目标数据分片在索引上连续,可以在合并过程中,减少修改对应的数据索引的计算量。

图1所示发明实施例提供的一种分布式存储系统的数据分裂方法,首先,监测各个数据分片的每秒查询率qps是否大于第一预设阈值;将qps大于第一预设阈值的数据分片确定为目标数据分片,对目标数据分片的访问请求进行采样,形成关于所采样的访问请求对应的索引键值的采样数据流;判断目标数据分片的qps是否大于第二预设阈值;若是,确定采样数据流中每预设时间段内的索引键值的中位数;根据所确定的中位数,预测获得当前时刻对应的下一预设时间段内的索引键值的中位数,并将所预测获得的中位数确定为分裂点;根据分裂点,对目标数据分片进行分裂。

可以看出,本发明实施例提供的分布式存储系统的数据分裂方法,与现有技术相比,由于本发明实施例对于qps过大的数据分片的访问请求进行采样获得采样数据流,根据采样数据流确定分裂点进行分裂,实际是针对访问热点对应的数据分片进行分裂,因此能够消除请求访问热点,从而达到负载均衡。

与上述方法流程相对应地,本发明实施例提供了一种分布式存储系统的数据分裂装置,如图2所示,所述装置包括:

监测模块201,用于监测各个数据分片的每秒查询率qps是否大于第一预设阈值;

第一确定模块202,用于将qps大于第一预设阈值的数据分片确定为目标数据分片;

采样模块203,用于对所述目标数据分片的访问请求进行采样,形成关于所采样的访问请求对应的索引键值的采样数据流;

第一判断模块204,用于判断所述目标数据分片的qps是否大于第二预设阈值;

第二确定模块205,用于在所述第一判断模块204的判断结果为是的情况下,确定所述采样数据流中每预设时间段内的索引键值的中位数;;

第三确定模块206,用于根据所述第二确定模块205所确定的中位数,预测获得当前时刻对应的下一所述预设时间段内的索引键值的中位数,并将所预测获得的中位数确定为分裂点;

第一分裂模块207,用于根据所述分裂点,对所述目标数据分片进行分裂。

图2所示发明实施例提供的一种分布式存储系统的数据分裂装置,首先,监测各个数据分片的每秒查询率qps是否大于第一预设阈值;将qps大于第一预设阈值的数据分片确定为目标数据分片,对目标数据分片的访问请求进行采样,形成关于所采样的访问请求对应的索引键值的采样数据流;判断目标数据分片的qps是否大于第二预设阈值;若是,确定采样数据流中每预设时间段内的索引键值的中位数;根据所确定的中位数,预测获得当前时刻对应的下一预设时间段内的索引键值的中位数,并将所预测获得的中位数确定为分裂点;根据分裂点,对目标数据分片进行分裂。

可以看出,本发明实施例提供的分布式存储系统的数据分裂装置,与现有技术相比,由于本发明实施例对于qps过大的数据分片的访问请求进行采样获得采样数据流,根据采样数据流确定分裂点进行分裂,实际是针对访问热点对应的数据分片进行分裂,因此能够消除请求访问热点,从而达到负载均衡。

具体地,本发明实施例提供的一种分布式存储系统的数据分裂装置,还可以包括:

记录模块,用于当所述监测模块201监测到所述目标数据分片的qps大于所述第一预设阈值,且不大于所述第二预设阈值的第一状态时,记录所述第一状态对应的第一持续时间;当所述第一持续时间大于第三预设阈值时,触发所述第二确定模块205。

具体地,本发明实施例提供的一种分布式存储系统的数据分裂装置,还可以包括:

第二判断模块,用于当所述监测模块201监测到所述目标数据分片的qps小于所述第一预设阈值时,判断已记录的所述第一持续时间是否大于第四预设阈值;如果是,触发所述第二确定模块205。

具体地,所述第一分裂模块206,可以包括:

分裂子模块,用于根据所述分裂点,对所述目标数据分片进行逻辑分裂,得到逻辑子数据分片;

判断子模块,用于针对每一所述逻辑子数据分片,判断该逻辑子数据分片的qps是否大于所述第一预设阈值;

更新子模块,用于在所述判断子模块的判断结果为是的情况下,以该逻辑子数据分片来更新所述目标数据分片,触发所述采样模块203;

分配子模块,用于根据预设规则,将最终所得到的逻辑子数据分片对应的数据分配到所述分布式存储系统中的存储结点。

更具体地,所述分裂子模块,具体可以用于:

根据所述分裂点,将所述目标数据分片的元数据信息分裂为子元数据信息;

将所述子元数据信息对应的数据分片确定为逻辑子数据分片。

具体地,本发明实施例提供的一种分布式存储系统的数据分裂装置,还可以包括:

第三判断模块,用于在所述分配子模块将所述逻辑子数据分片对应的数据分配到所述分布式存储系统中的存储结点之前,在该逻辑子数据分片的qps不大于所述第一预设阈值的情况下,判断该逻辑子数据分片的qps是否小于第五预设阈值;

第四确定模块,用于在所述第三判断模块的判断结果为是的情况下,确定所述目标数据分片的目标相邻数据分片;其中,所述目标相邻数据分片的qps在所述目标数据分片的相邻数据分片的qps中最小;所述相邻数据分片与所述目标数据分片在索引上连续;

第四判断模块,用于判断所述目标相邻数据分片的qps是否小于第六预设阈值;

合并模块,用于在所述第四判断模块的判断结果为是的情况下,将该逻辑子数据分片合并到所述目标相邻数据分片上。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1