分布式数据重分布控制方法、装置及数据管理服务器与流程

文档序号:16146782发布日期:2018-12-05 16:34阅读:150来源:国知局
本发明涉及通信领域,尤其涉及一种分布式数据重分布控制方法、装置及数据管理服务器。
背景技术
:在现今数据库应用中,数据库并发度高、数据增长速度快是当今数据库业务两大特点。在短时间内,可能存在大量数据新增或修改。随着数据数量级递增,从字节、千字节、兆字节到现在的万兆字节,结合mariadb/mysql(关系型数据库管理系统)数据库良好横向扩展特性,基于mariadb/mysql数据库的分布式数据库得到广泛的应用。分布式数据库重要的一个特性就是横向扩展,那么提高数据库扩展功能的灵活性,随意增减存储节点,将原有数据进行数据重分布的功能就显得较重要。目前业界针对分布式数据库中一个数据管理服务器(也即分布式数据库计算节点)的hash大表中的数据进行重分布时(例如因为新增存储节点或减少存储节点导致需要进行重分布),通常做法是将存储的所有数据全量导出,然后按照重分布之后的新规则再全部重新导入,这种数据重分布方式不仅处理的数据量大,效率低,且对存储空间有较高的要求,至少需保证有导出空间可用。技术实现要素:本发明实施例提供的分布式数据重分布控制方法、装置及数据管理服务器,主要解决的技术问题是现有分布式数据库进行数据重分布时将所有存储数据导出再按照重分布后的新规则重新导入,导致处理的数据量大、效率低,占用资源多的问题。为解决上述技术问题,本发明实施例提供一种分布式数据重分布控制方法,包括:接收到待存储数据时,根据预设存储控制规则将其存入相应存储节点上对应的数据存储区;各存储节点上的各数据存储区根据预设的第一分发规则设置,根据所述第一分发规则确定的数据存储区个数为n,所述各数据存储区之间所存储的数据相互独立,所述n大于等于2;检测到数据重分布触发时,根据所述第一分发规则和数据重分布对应的第二分发规则确定所述n个数据存储区中待迁出的数据存储区以及各待迁出的数据储存区所要迁入的目标存储节点;将所述各待迁出的数据存储区分别迁入对应的目标存储节点。为了解决上述问题,本发明还提供一种分布式数据重分布控制装置,包括:数据存储控制模块,用于接收到待存储数据时,根据预设存储控制规则将其存入相应存储节点上对应的数据存储区;各存储节点上的各数据存储区根据预设的第一分发规则设置,根据所述第一分发规则确定的数据存储区个数为n,所述各数据存储区之间所存储的数据相互独立,所述n大于等于2;数据重分布控制模块,用于检测到数据重分布触发时,根据所述第一分发规则和数据重分布对应的第二分发规则确定所述n个数据存储区中待迁出的数据存储区以及各待迁出的数据储存区所要迁入的目标存储节点,将所述各待迁出的数据存储区分别迁入对应的目标存储节点。为了解决上述问题,本发明还提供一种数据管理服务器,包括处理器、存储器及通信总线;所述通信总线用于实现所述处理器和所述存储器之间的连接通信;所述处理器用于执行存储器中存储的分布式数据重分布控制程序,以实现如上所述的分布式数据重分布控制方法中的步骤。为了解决上述问题,本发明还提供一种存储介质,用于存储程序,且存储的程序被调用时执行如上所述的分布式数据重分布控制方法。本发明的有益效果是:根据本发明实施例提供的分布式数据重分布控制方法、装置及数据管理服务器,先根据预设的第一分发规则设置各存储节点上的数据存储区,总共设置n个数据存储区;然后在接收到待存储数据时,根据预设存储控制规则将其存入相应存储节点上对应的数据存储区,各数据存储区之间所存储的数据相互独立;在需要数据重分布触发时,根据之前数据存储过程中的第一分发规则和数据重分布对应的新的第二分发规则确定上述n个数据存储区中待迁出的数据存储区以及各待迁出的数据储存区所要迁入的目标存储节点,然后仅将各待迁出的数据存储区分别迁入对应的目标存储节点,其他不需要迁移的数据则保持不变,不需要导出也不需要重新导入,因此可以大大降低数据重分布过程中的数据处理量,提升处理效率,并可降低对剩余存储空间的要求,提升资源利用率。附图说明图1为本发明实施例一提供的分布式数据重分布控制方法流程示意图;图2为本发明实施例二提供的分布式数据重分布控制装置结构示意图;图3为本发明实施例三提供的数据管理服务器结构示意图;图4为本发明实施例三提供的数据存储区设置示意图;图5为本发明实施例三提供的数据存储区迁移示意图。具体实施方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例只是本发明中一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。实施例一:本实施例提供的分布式数据重分布控制方法,先根据预设的第一分发规则设置各存储节点上的数据存储区,总共设置n个数据存储区,具体在哪些存储节点上设置以及在各存储节点上设置的数据存储区的个数可以灵活控制,该第一分发控制规则可以由服务器根据预设的条件自动生成,也可以由管理人员设置;设置时,遵循各数据存储区之间所存储的数据相互独立的原则。这样个数据存储区内存储的数据就可以灵活的在各数据存储区以及各存储节点之间灵活迁移。基于上述设置,在接收到待存储数据时,根据预设存储控制规则将待存储数据存入相应存储节点上对应的数据存储区。在需要数据重分布触发时,根据之前数据存储过程中的第一分发规则和数据重分布对应的新的第二分发规则确定上述n个数据存储区中哪些数据存储区为待迁出的数据存储区,以及各待迁出的数据储存区所要迁入的目标存储节点,然后仅将各待迁出的数据存储区分别迁入对应的目标存储节点即可,其他不需要迁移的数据则可保持不变,不需要导出也不需要重新导入,可以大大降低数据重分布过程中的数据处理量,提升处理效率,并可降低对剩余存储空间的要求,提升资源利用率。以上分布式数据重分布控制方法的执行流程参见图1所示,包括:s101:接收到待存储数据时,根据预设存储控制规则将其存入相应存储节点上对应的数据存储区。如上所述,本实施例中的各存储节点上的各数据存储区根据预设的第一分发规则设置,根据第一分发规则确定的数据存储区个数为n,n大于等于2,各数据存储区之间所存储的数据相互独立。本实施例中的第一分发规则可以是初始的分发规则,也可以是上一次数据重分布对应的分发规则。s102:检测到数据重分布触发时,根据第一分发规则和数据重分布对应的第二分发规则确定上述n个数据存储区中待迁出的数据存储区以及各待迁出的数据储存区所要迁入的目标存储节点。本实施例中检测到数据重分布触发的方式可以是接收到重分布指令是确定为重分布触发,也可以是检测到其他预设条件(例如存储节点变化消息)时确定为重分布触发。s103:将各待迁出的数据存储区分别迁入对应的目标存储节点。本实施例中,可以将待迁出的数据存储区中的数据先全部导出,然后在目标存储节点上设置对应的数据存储区,将导出的数据再导入该对应的数据存储区,完成数据的迁移。本实施例中还可以存储节点上数据迁出的数据存储区进行初始化处理,该初始化处理可以是进行格式化或清零处理,或删除该数据存储区。本实施例中,第一分发规则可以为第一哈希(hash)分发规则,当然也可以为其他算法的分发规则,此处的哈希分发规则仅仅是一种示例。本实施例中的第一哈希分发规则包括取值范围为[0,n)的哈希值,以及各哈希值对应的存储节点。根据第一哈希分发规则在所述各存储节点上设置数据存储区包括:获取各存储节点对应的哈希值,并针对每一个哈希值唯一配置一个数据存储区。例如,假设第一哈希分发规则哈希值的取值范围为[0,16),哈希值取整数值;当前下挂的存储节点有4个,分别用g1、g2、g3、g4表示,一种哈希值与存储节点的对应关系为:g1(哈希值0、1、2、3),g2(哈希值4、5、6、7),g3(哈希值8、9、10、11),g4(哈希值12、13、14、15)。此时则在存储节点g1上设置于哈希值0、1、2、3对应的数据存储区,对应的在存储节点g2、g3、g4上设置于各自对应的哈希值一一对应的数据存储区。这种示例的方式是在各存储节点上均匀设置数据存储区,可以很好地满足负载均衡。当然并不限于均匀设置方式。例如,一种哈希值与存储节点的对应关系为:g1(哈希值0、1),g2(哈希值2、3、4、5、6、7),g3(哈希值8、9),g4(哈希值10、11、12、13、14、15)。此时则在存储节点g1上设置于哈希值0、1对应的数据存储区,对应的在存储节点g2、g3、g4上设置于各自对应的哈希值一一对应的数据存储区。应当理解的是,本实施例中各数据存储区的大小、设置位置等可以灵活设定。相应的,本实施例中的存储控制规则可以包括:将待存储数据对应的分发键值进行哈希散列计算,并将得到的结果除以上述n取余值;确定各存储节点上与余值相等的哈希值所对应的数据存储区为待存储数据待写入的储存区。相应的,本实施例中的第二分发规则还可以为第二哈希分发规则,根据第一哈希分发规则和第二哈希分发规则确定n个数据存储区中待迁出的数据存储区以及各待迁出的数据储存区所要迁入的目标存储节点包括:获取第二哈希分发规则中各哈希值所对应的存储节点,第二哈希分发规则中的哈希值与第一哈希分发规则中的哈希值相同;分别判断各哈希值在所述第二哈希分发规则中对应的存储节点与在第一哈希分发规则中对应的存储节点是否相同,如否,将该哈希值对应的数据存储区确定为待迁出数据存储区,并将该哈希值在所述第二哈希分发规则中对应的存储节点作为所要迁入的目标存储节点。例如,假设第一哈希分发规则哈希值的取值范围为[0,20),当前下挂的存储节点有4个,分别用g1、g2、g3、g4表示,哈希值与存储节点的对应关系为:g1(哈希值0、1、2、3、4),g2(哈希值5、6、7、8、9),g3(哈希值10、11、12、13、14),g4(哈希值15、16、17、18、19)。在一种示例中,假设因为新增了一个存储节点g5导致数据重分布,数据重分布对应的第二哈希分发规则中的哈希值与存储节点的对应关系为:g1(哈希值0、1、2、3),g2(哈希值4、5、6、7),g3(哈希值8、9、10、11),g4(哈希值12、13、14、15),g5(哈希值16、17、18、19)。此时根据第一哈希分发规则和第二哈希分发规则进行比对确定二者待迁移的数据存储区对应的哈希值以及待迁入的目标存储节点为:4→g2,8、9→g3,12、13、14→g4,16、17、18、19→g5。这种比对方式以一次轮询比对确定出哪些数据存储区需要迁移。当然也可以采用最小迁移量比对方式确定出待迁移的数据存储区,以进一步减少需要进行数据迁移的数据存储区。又例如,假设第一哈希分发规则哈希值的取值范围为[0,11),当前下挂的存储节点有4个,分别用g1、g2、g3、g4表示,哈希值与存储节点的对应关系为:g1(哈希值0、1、2),g2(哈希值3、4、5),g3(哈希值6、7、8),g4(哈希值9、10、11)。在一种示例中,假设因为减少了一个存储节点g4导致数据重分布,数据重分布对应的第二哈希分发规则中的哈希值与存储节点的对应关系为:g1(哈希值0、1、2、3),g2(哈希值4、5、6、7),g3(哈希值8、9、10、11)。此时根据第一哈希分发规则和第二哈希分发规则进行比对确定二者待迁移的数据存储区对应的哈希值以及待迁入的目标存储节点为:3→g1,6、7→g2,9、10、11→g3,采用最小迁移量比对方式确定出待迁移的数据存储区时,确定的待迁移的数据存储区对应的哈希值以及待迁入的目标存储节点可为:将原g3中的8迁移到原g4中,并把原g4修改为新的g3,将原g3中的6、7迁移到原g2中,并把原g2中的3迁移到原g1中,这种方式比上一种方式少迁移两个数据存储区。但是上述部分迁移的方式相对现有整体迁移方式,都可以在很大程度上降低数据处理量,提升处理效率,并可降低对剩余存储空间的要求,提升资源利用率。实施例二:本实施例提供的一种分布式数据重分布控制装置参见图2所示,包括:数据存储控制模块201,用于接收到待存储数据时,根据预设存储控制规则将其存入相应存储节点上对应的数据存储区;各存储节点上的各数据存储区也可以由数据存储控制模块201根据预设的第一分发规则设置,根据第一分发规则确定的数据存储区个数为n,所述各数据存储区之间所存储的数据相互独立,n大于等于2。本实施例中的第一分发规则可以是初始的分发规则,也可以是上一次数据重分布对应的分发规则。应当理解的是,本实施例中的数据存储控制模块201可以由单独的服务器(例如可以是代理服务器或管理服务器)实现,也可以由服务器中的处理器或结合其他模块实现。数据重分布控制模块202,用于检测到数据重分布触发时,根据第一分发规则和数据重分布对应的第二分发规则确定n个数据存储区中待迁出的数据存储区以及各待迁出的数据储存区所要迁入的目标存储节点,将各待迁出的数据存储区分别迁入对应的目标存储节点。本实施例中数据重分布控制模块202检测到数据重分布触发的方式可以是接收到重分布指令是确定为重分布触发,也可以是检测到其他预设条件(例如存储节点变化消息)时确定为重分布触发。本实施例中,数据重分布控制模块202可以将待迁出的数据存储区中的数据先全部导出,然后在目标存储节点上设置对应的数据存储区,将导出的数据再导入该对应的数据存储区,完成数据的迁移。本实施例中还可以存储节点上数据迁出的数据存储区进行初始化处理,该初始化处理可以是进行格式化或清零处理,或删除该数据存储区。本实施例中的数据重分布控制模块202也可以通过单独的服务器实现,例如管理服务器,或者通过服务器中的处理器或结合其他模块实现。本实施例中的管理服务器和代理服务器可以是同一个服务器,也可以是不同的服务器。且应当理解的是,本实施例中执行各待迁出的数据存储区分别迁入对应的目标存储节点的步骤也可以由数据存储控制模块201实现。本实施例中,第一分发规则可以为第一哈希(hash)分发规则,当然也可以为其他算法的分发规则,此处的哈希分发规则仅仅是一种示例。本实施例中的第一哈希分发规则包括取值范围为[0,n)的哈希值,以及各哈希值对应的存储节点。数据存储控制模块201还用于获取各存储节点对应的哈希值,并针对每一个哈希值唯一配置一个数据存储区。例如,假设第一哈希分发规则哈希值的取值范围为[0,8),哈希值取整数值;当前下挂的存储节点有2个,分别用g1、g2表示,一种哈希值与存储节点的对应关系为:g1(哈希值0、1、2、3),g2(哈希值4、5、6、7)。此时则在存储节点g1上设置于哈希值0、1、2、3对应的数据存储区,对应的在存储节点g2上设置于各自对应的哈希值一一对应的数据存储区。这种示例的方式是在各存储节点上均匀设置数据存储区,可以很好地满足负载均衡。当然并不限于均匀设置方式。例如,一种哈希值与存储节点的对应关系为:g1(哈希值0、1),g2(哈希值2、3、4、5、6、7)。此时则在存储节点g1上设置于哈希值0、1对应的数据存储区,对应的在存储节点g2上设置于各自对应的哈希值一一对应的数据存储区。应当理解的是,本实施例中各数据存储区的大小、设置位置等可以灵活设定。数据存储控制模块201用于将待存储数据对应的分发键值进行哈希散列计算,并将得到的结果除以n取余值,确定与余值相等的哈希值所对应的数据存储区为所述待存储数据待写入的储存区。相应的,本实施例中的第二分发规则为第二哈希分发规则,数据重分布控制模块202用于获取第二哈希分发规则中各哈希值所对应的存储节点,第二哈希分发规则中的哈希值与所述第一哈希分发规则中的哈希值相同;以及用于分别判断各哈希值在所述第二哈希分发规则中对应的存储节点与在所述第一哈希分发规则中对应的存储节点是否相同,如否,将该哈希值对应的数据存储区确定为待迁出数据存储区,并将该哈希值在所述第二哈希分发规则中对应的存储节点作为所要迁入的目标存储节点。本实施例中分布式数据重分布控制装置采用部分数据存储区迁移的方式相对现有整体迁移方式,都可以在很大程度上降低数据处理量,提升处理效率,并可降低对剩余存储空间的要求,提升资源利用率。实施例三:本实施例还提供了一种数据管理服务器,参见图3所示,包括处理器31、存储器32及通信总线33;通信总线33用于实现处理器31和存储器32之间的连接通信;处理器31用于执行存储器32中存储的分布式数据重分布控制程序,以实现如上所述的分布式数据重分布控制方法中的步骤。本实施例在上述实施例基础上,以分发规则为哈希分发规则,在各存储节点上设置的数据存储区为partition表分区为示例进行说明,对于各partition表分区,可以通过唯一对应的哈希值进行表征。本实施例中,通过在分布式数据库计算节点(例如代理服务器或管理服务器)编辑好特定的hash分发规则(也即对应第一分发规则),然后对hash大表(也即当前下挂的所有存储节点对应的大表)创建与hash分发规则对应的partition表分区,一个hash结果值对应保存在一个partition表分区,也即一个哈希值对应一个partition表分区,在数据重分布时,只需迁移少部分partition表分区,实现了迁移数据量最小化,重分布效率高,且重分布过程中没有增加磁盘存储空间。该方法不会影响sql检索性能,在表达到一定数据量后,还可进一步提升sql检索性能。本实施例基于partition表分区的hash分布大表数据重分布的方法如下:1、在代理(proxy)计算节点编辑好特定的hash分发规则,先将每个存储节点规划存储范围,即hash值固定在[0,n)区间内,然后均分(也可采用不均分的原则)在所有存储节点,即将一个存储节点视为一个hash桶,一个hash桶存储一个小区间的hash值,所有存储节点存储的hash值组成[0,n)区间。然后proxy对分发键值hash计算后再对n取模,取模后的值在哪个存储区间,该条数据就下发到哪个存储节点存储,具体步骤如下:1)proxy计算节点将[0,n)区间划分在m个存储节点上,第1个存储节点存储区间为[0,n/m),第2个存储节点存储区间为[n/m,n*2/m),依次类推,第m个存储节点存储区间为[n*(m-1)/m,n)。2)proxy计算节点对分发键值进行hash(),hash值再对n取模(求余数),余数为p,p值在[0,n)区间内,proxy计算节点再根据p值匹配存储节点划分的存储区间,即找到对应的存储节点作为待存入的存储节点。例如:proxy计算节点将分发键的hash值对12取模(实际使用时,一般取模值为较大值,建议为1024),存储节点为3个,proxy计算节点的hash分发规则为{g1[0,4),g2[4,8),g3[8,12)};当分发键的hash_p值在[0,4)区间时,数据存储到g1节点;当分发键的hash_p值在[4,8)区间时,数据存储到g2节点;当分发键的hash_p值在[8,12)区间时,数据存储到g3节点。在检测到数据重分布之前,proxy计算节点可以持久的采用上述存储规则进行数据存储。2、基于上一步proxy计算节点的hash分发规则,再将每个存储节点的p值区间都创建成partition表分区,这样每一个p值对应一个partition表分区。proxy计算节点的hash算法可以做到每个分发键值对应的p值是固定的,即能做到每个分发键值存储的partition表分区也是固定的,这样在数据重分布时,只需要移动partition表分区到新的存储节点即可,具体步骤如下:1)proxy计算节点对hash分布大表t1自动创建一个字段col_pt,字段col_pt存储值就是上述步骤中的p值。2)将每个存储节点的存储范围值都创建一个对应的partition表分区,分区键为字段col_pt。例如:proxy计算节点将分发键的hash值对12取模,存储节点为3个,那么参见图4所示,proxy计算节点对t1表的hash分发规则为:t1distributedby{g1[0,4),g2[4,8),g3[8,12)}。proxy计算节点再对t1表创建partition表分区,将分发规则的存储范围值都创建一个对应的partition表分区,这样t1在proxy计算节点的分发规则和表分区规则就是如下:t1partitionbylist(col_pt){g1(p0valuesin(0),p1valuesin(1),p2valuesin(2),p3valuesin(3)),g2(p4valuesin(4),p5valuesin(5),p6valuesin(6),p7valuesin(7)),g3(p8valuesin(8),p9valuesin(9),p10valuesin(10),p11valuesin(11))}distributedby{g1[0,4),g2[4,8),g3[8,12)}。3、该hash表在做数据重分布时,proxy计算节点或独立管理服务器等计算出新的分布规则后,就可以移动partition表分区文件到新的分布节点了,具体步骤举例说明如下:1)当存储节点需要扩充时,存储节点由3个变更为4个,hash分发规则由distributedby{g1[0,4),g2[4,8),g3[8,12)}(也即第一分发规则)变更为distributedby{g1[0,3),g2[3,6),g3[6,9),g4[9,12)}(也即第二分发规则)。2)数据重分布流程,例如参见图5所示:将原g1节点上的p3分区文件转移到原g2节点上;原g1节点逻辑名称不变,还为g1节点;将原g2节点上的p6和p7分区文件转移到新增的g3节点上;原g2节点逻辑名称不变,还为g2节点;将原g3节点上的p8分区文件转移到新增的g3节点上;原g3节点改名为g4节点。重分布后的表结构在proxy计算节点的信息如下:t1partitionbylist(col_pt){g1(p0valuesin(0),p1valuesin(1),p2valuesin(2)),g2(p3valuesin(3),p4valuesin(4),p5valuesin(5)),g3(p6valuesin(6),p7valuesin(7),p8valuesin(8)),g4(p9valuesin(9),p10valuesin(10),p11valuesin(11))}distributedby{g1[0,3),g2[3,6),g3[6,9),g4[9,12)}分区文件转移步骤语法命令:为了便于分区文件转移,创建分区时,可以将所有存储节点都创建相同的全量分区,即所有存储节点都创建n个partition表分区,转移时只需执行如下命令:对接收节点执行:altertabletable_namediscardpartitionpartition_nametablespace;对迁出节点执行:flushtablestable_nameforexport;将迁出节点的分区文件.ibd和.cfg文件拷贝到接收节点;对接收节点执行altertabletable_nameimportpartitionpartition_nametablespace;对迁出节点执行:先解除迁出节点flush锁,再执行altertabletable_nametruncatepartitionpartition_name。本发明基于partition表分区的分布式数据库hash大表重分布,相比现有技术具有如下优势:1、重分布效率快,实现了迁移数据量最小化,只需迁移少部分partition分区。2、重分布过程中没有增加存储空间,实现了在存储空间不足的情况,也可以进行大数据重分布,且可拓展到分布式数据库其他分布策略的大表数据重分布功能中。需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台应用设备(可以是手机,计算机,服务器,空调器,或者网络应用设备等)执行本发明各个实施例的方法。以上内容是结合具体的实施方式对本发明实施例所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属
技术领域
:的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1