掌桥专利:专业的专利平台
掌桥专利
首页

数据分片处理方法、装置以及存储介质

文献发布时间:2023-06-19 11:08:20


数据分片处理方法、装置以及存储介质

技术领域

本发明涉及数据库技术领域,尤其涉及一种数据分片处理方法、装置以及存储介质。

背景技术

分布式数据库为了保证数据的均衡性,需要对数据进行分片。随着时间的增加,数据量越来越大,需要增加资源进行数据扩容;为了保证分片策略的可读以及数据的均衡性,需要对已经分片的数据进行数据迁移,满足对分片策略的数据的控制。目前,对于数据库的分片方案,现有的分片键生成方式会面临分配不均衡、扩容数据难迁移等问题。

发明内容

有鉴于此,本发明要解决的一个技术问题是提供一种数据分片处理方法、装置以及存储介质。

根据本公开的一个方面,提供一种数据分片处理方法,包括:生成多个分片键;其中,每个分片键都为唯一标识;设置分片键预留池,将所述多个分片键放入所述分片键预留池中,并设置与每个分片键相对应的状态信息;当为目标数据分配分片键时,获取当前设置的全部分片的第一分片数量,基于所述第一分片数量并使用预设的分片分配规则在所述分片键预留池中选取目标分片键,确定用于存储所述目标数据的目标分片;将所述目标分片键分配给所述目标数据并将所述目标数据存储在所述目标分片,并将与所述目标分片键相对应的状态信息设置为使用状态。

可选地,所述基于所述第一分片数量并使用预设的分片分配规则在所述分片键预留池中选取目标分片键包括:获取所述分片键预留池中的预留分片键;其中,所述预留分片键的状态信息为预留状态;将所述预留分片键对预设的分片总数量进行取模运算,如果余数小于或等于所述第一分片数量,则选取所述预留分片键作为所述目标分片键。

可选地,所述确定用于存储所述目标数据的目标分片包括:获取所述目标分片键与所述第一分片量进行取模运算的余数,基于此余数确定所述目标分片。

可选地,如果进行存储节点扩容,则设置新存储节点并在所述新存储节点中设置新分片;当为所述目标数据分配分片键时,获取扩容后的全部分片的第二分片数量,基于所述第二分片数量并使用所述分片分配规则在所述分片键预留池中选取目标分片键,确定用于存储所述目标数据的目标分片。

可选地,所述基于所述第二分片数量并使用所述分片分配规则在所述分片键预留池中选取目标分片键包括:获取所述分片键预留池中的所述预留分片键;将所述预留分片键对所述分片总数量进行取模运算,如果余数小于或等于所述第二分片数量,或者此余数小于或等于所述第二分片数量并且大于所述第一分片数量,则选取所述预留分片键作为所述目标分片键,并基于此余数确定所述目标分片。

可选地,如果在所述分片键预留池中没有所述预留分片键,则生成多个新分片键并将所述多个新分片键放入所述分片键预留池中,并设置与每个新分片键相对应的状态信息。

根据本公开的另一方面,提供一种数据分片处理装置,包括:片键生成模块,用于生成多个分片键;其中,每个分片键都为唯一标识;预留池设置模块,用于设置分片键预留池,将所述多个分片键放入所述分片键预留池中,并设置与每个分片键相对应的状态信息;片键分配模块,用于当为目标数据分配分片键时,获取当前设置的全部分片的第一分片数量,基于所述第一分片数量并使用预设的分片分配规则在所述分片键预留池中选取目标分片键,确定用于存储所述目标数据的目标分片;数据处理模块,用于将所述目标分片键分配给所述目标数据并将所述目标数据存储在所述目标分片,并将与所述目标分片键相对应的状态信息设置为使用状态。

可选地,所述片键分配模块,用于获取所述分片键预留池中的预留分片键;其中,所述预留分片键的状态信息为预留状态;将所述预留分片键对预设的分片总数量进行取模运算,如果余数小于或等于所述第一分片数量,则选取所述预留分片键作为所述目标分片键。

可选地,所述片键分配模块,用于获取所述目标分片键与所述第一分片量进行取模运算的余数,基于此余数确定所述目标分片。

可选地,分片扩容处理模块,用于如果进行存储节点扩容,则设置新存储节点并在所述新存储节点中设置新分片;所述片键分配模块,用于当为所述目标数据分配分片键时,获取扩容后的全部分片的第二分片数量,基于所述第二分片数量并使用所述分片分配规则在所述分片键预留池中选取目标分片键,确定用于存储所述目标数据的目标分片。

可选地,所述片键分配模块,还用于获取所述分片键预留池中的所述预留分片键;将所述预留分片键对所述分片总数量进行取模运算,如果余数小于或等于所述第二分片数量,或者此余数小于或等于所述第二分片数量并且大于所述第一分片数量,则选取所述预留分片键作为所述目标分片键,并基于此余数确定所述目标分片。

可选地,所述片键生成模块,用于如果在所述分片键预留池中没有所述预留分片键,则生成多个新分片键;所述预留池设置模块,用于将所述多个新分片键放入所述分片键预留池中,并设置与每个新分片键相对应的状态信息。

根据本公开的又一方面,提供一种数据分片处理装置,包括:存储器;以及耦接至所述存储器的处理器,所述处理器被配置为基于存储在所述存储器中的指令,执行如上所述的方法。

根据本公开的再一方面,提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,所述指令被处理器执行如上所述的方法。

本公开的数据分片处理方法、装置以及存储介质,生成多个分片键并放入分片键预留池中,设置与每个分片键相对应的状态信息;基于分片数量并使用预设的分片分配规则在分片键预留池中选取目标分片键,确定用于存储目标数据的目标分片,将与目标分片键相对应的状态信息设置为使用状态;预先生成分片键以及状态信息,并对分片键状态进行控制,生成分片键时对于后续的扩容进行了预留,能够保证数据分片当前可用,并实现存储节点扩容时不用进行数据迁移,并能快速实现数据的均衡,达到数据节点的平稳扩容。

附图说明

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

图1为根据本公开的数据分片处理方法的一个实施例的流程示意图;

图2为根据本公开的数据分片处理方法的一个实施例中的当前选取目标分片键的流程示意图;

图3为根据本公开的数据分片处理方法的一个实施例中的扩容后选取目标分片键的流程示意图;

图4为根据本公开的数据分片处理方法的实际应用的示意图;

图5为根据本公开的数据分片处理装置的一个实施例的模块示意图;

图6为根据本公开的数据分片处理装置的另一个实施例的模块示意图。

具体实施方式

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

下文中的“第一”、“第二”等仅用于描述上相区别,并没有其它特殊的含义。

图1为根据本公开的数据分片处理方法的一个实施例的流程示意图,如图1所示:

步骤101,生成多个分片键;其中,每个分片键都为唯一标识。

步骤102,设置分片键预留池,将多个分片键放入分片键预留池中,并设置与每个分片键相对应的状态信息。状态信息的默认状态设置为预留状态。

数据分片是指分布式数据库中的数据可以被复制在网络场地的各个物理数据库中。通过分片(Sharding)将一个数据分成两个或多个较小的块,分布在单独的数据库节点上,分片间不共享任何相同的数据或服务器资源。分片键,又称为片键,是一种索引,决定了每条数据应该被写入到集群中的哪个分片上,它的选择关系写入与查询的效率。

生成多个分片键,多个分片键可以为多个随机正整数等。在生成分片键时,设置与每个分片键相对应的状态信息,增加了对分片键状态的控制。在扩容前,对生成的分片键进行了部分的预留,需要存储的目标数据进入时,分配分片键,并配置分片键的状态。

步骤103,当为目标数据分配分片键时,获取当前设置的全部分片的第一分片数量,基于第一分片数量并使用预设的分片分配规则在分片键预留池中选取目标分片键,确定用于存储目标数据的目标分片。第一分片数量为当前使用的全部分片的数量。目标数据可以为需要存储的数据等。

步骤104,将目标分片键分配给目标数据并将目标数据存储在目标分片,并将与目标分片键相对应的状态信息设置为使用状态。

分片分配规则可以有多种。图2为根据本公开的数据分片处理方法的一个实施例中的当前选取目标分片键的流程示意图,如图2所示:

步骤201,获取分片键预留池中的预留分片键;其中,预留分片键的状态信息为预留状态。

步骤202,将预留分片键对预设的分片总数量进行取模运算,如果余数小于或等于第一分片数量,则选取预留分片键作为目标分片键。确定用于存储目标数据的目标分片可以采用多种方法。例如,获取目标分片键与第一分片量进行取模运算的余数,基于此余数确定目标分片。

在一个实施例中,生成多个分片键为整数1-20,将分片键1-20放入分片键预留池中,并设置与每个分片键(1-20)相对应的状态信息;预设的分片总数量包括现在实际使用的和未来需要扩容的分片的总数量,例如,分片总数量为4。

当为目标数据(需要进行存储的数据)分配分片键时,获取当前设置的全部分片的第一分片数量为2,即当前只有两个分片在使用。获取分片键预留池中的预留分片键1,预留分片键的状态信息为预留状态;将预留分片键1对分片总数量4进行取模运算,余数为1,小于4,则选取预留分片键1作为目标分片键。基于相同的方法,在后续的分片键分配中,可以将预留分片键2、4、5、6、8、9等作为目标分片键,而预留分片键3、7、9(与4取模获得的余数大于2)等作为预留分片键。

基于此余数确定目标分片可以有多种方法。例如,如果与4取模获得的余数为1,则确定目标分片为分片1,如果余数为2,则确定目标分片为分片2,如果余数为0,则将分片1和分片2交替确定为目标分片。

图3为根据本公开的数据分片处理方法的一个实施例中的扩容后选取目标分片键的流程示意图,如图3所示:

步骤301,如果进行存储节点扩容,则设置新存储节点并在新存储节点中设置新分片。

步骤302,当为目标数据分配分片键时,获取扩容后的全部分片的第二分片数量,基于第二分片数量并使用分片分配规则在分片键预留池中选取目标分片键,确定用于存储目标数据的目标分片。

扩容后的分片分配规则与扩容前的分片分配规则相同。例如,获取分片键预留池中的预留分片键,将预留分片键对分片总数量进行取模运算,如果余数小于或等于第二分片数量,或者此余数小于或等于第二分片数量并且大于第一分片数量,则选取预留分片键作为目标分片键,并基于此余数确定目标分片。

在一个实施例中,进行存储节点扩容,则设置一个新存储节点并在新存储节点中设置新分片,则实际使用的分片为三个,第二分片数量为3。获取分片键预留池中的预留分片键7,将预留分片键7对分片总数量4进行取模运算,余数3等于第二分片数量3,则选取预留分片键7作为目标分片键,并基于此余数确定目标分片。如果余数为1,则确定目标分片为分片1,如果余数为2,则确定目标分片为分片2,如果余数为3,则确定目标分片为分片3,如果余数为0,则将分片1,、分片2、分片3交替确定为目标分片。如果将余数小于或等于第二分片数量并且大于第一分片数量选取为目标分片键,则仅在新增的分片中存储数据。

如果在分片键预留池中没有预留分片键,则生成多个新分片键并将多个新分片键放入分片键预留池中,并设置与每个新分片键相对应的状态信息。扩容后,先分发分片键预留池中状态信息为预留的分片键;如果没有状态信息为预留的分片键后,重新生成分片键。

在一个实施例中,如图4所示,在进行数据分片时,既考虑当前数据存储的分片数,又考虑将来数据扩容时的分片数;给每个分片键分配全局唯一标识,还增加了分片键的状态信息;通过取模运算为新的数据分配分片键,如果余数《=当前的存储节点数量(分片数量),将分片键的状态设为可用,如果余数》=当前的存储节点数量(分片数量),将分片键的状态信息设置为预留。存储节点扩容后,需要分配分片键时,首先从分片键预留池中取分片键,状态置为可用;存储池中状态为预留的片件使用完毕,再有数据进入时,重新生成分片键并按照新节点进行取模,数据达到新的平衡。

在一个实施例中,如图5所示,本公开提供一种数据分片处理装置50,包括:片键生成模块51、预留池设置模块52、片键分配模块53、数据处理模块54和分片扩容处理模块55。片键生成模块51生成多个分片键,其中,每个分片键都为唯一标识。预留池设置模块52设置分片键预留池,将多个分片键放入分片键预留池中,并设置与每个分片键相对应的状态信息。

片键分配模块53当为目标数据分配分片键时,获取当前设置的全部分片的第一分片数量,基于第一分片数量并使用预设的分片分配规则在分片键预留池中选取目标分片键,确定用于存储目标数据的目标分片。数据处理模块54将目标分片键分配给目标数据并将目标数据存储在目标分片,并将与目标分片键相对应的状态信息设置为使用状态。

片键分配模块53获取分片键预留池中的预留分片键,其中,预留分片键的状态信息为预留状态。片键分配模块53将预留分片键对预设的分片总数量进行取模运算,如果余数小于或等于第一分片数量,则选取预留分片键作为目标分片键。片键分配模块53获取目标分片键与第一分片量进行取模运算的余数,基于此余数确定目标分片。

在一个实施例中,分片扩容处理模块55如果进行存储节点扩容,则设置新存储节点并在新存储节点中设置新分片。片键分配模块53当为目标数据分配分片键时,获取扩容后的全部分片的第二分片数量,基于第二分片数量并使用分片分配规则在分片键预留池中选取目标分片键,确定用于存储目标数据的目标分片。

片键分配模块54获取分片键预留池中的预留分片键;将预留分片键对分片总数量进行取模运算,如果余数小于或等于第二分片数量,或者此余数小于或等于第二分片数量并且大于第一分片数量,则片键分配模块54选取预留分片键作为目标分片键,并基于此余数确定目标分片。

如果在分片键预留池中没有预留分片键,则片键生成模块51生成多个新分片键。预留池设置模块52将多个新分片键放入分片键预留池中,并设置与每个新分片键相对应的状态信息。

图6为根据本公开的数据分片处理装置的另一个实施例的模块示意图。如图6所示,该装置可包括存储器61、处理器62、通信接口63以及总线64。存储器61用于存储指令,处理器62耦合到存储器61,处理器62被配置为基于存储器61存储的指令执行实现上述的数据分片处理方法。

存储器61可以为高速RAM存储器、非易失性存储器(non-volatile memory)等,存储器61也可以是存储器阵列。存储器61还可能被分块,并且块可按一定的规则组合成虚拟卷。处理器62可以为中央处理器CPU,或专用集成电路ASIC(Application SpecificIntegrated Circuit),或者是被配置成实施本公开的数据分片处理方法的一个或多个集成电路。

在一个实施例中,本公开提供一种计算机可读存储介质,计算机可读存储介质存储有计算机指令,指令被处理器执行如上任一实施例中的方法。

上述实施例中提供的数据分片处理方法、装置以及存储介质,生成多个分片键并放入分片键预留池中,设置与每个分片键相对应的状态信息;基于分片数量并使用预设的分片分配规则在分片键预留池中选取目标分片键,确定用于存储目标数据的目标分片,将与目标分片键相对应的状态信息设置为使用状态;预先生成分片键以及状态信息,并对分片键状态进行控制,生成分片键时对于后续的扩容进行了预留,既考虑当前的资源情况,又考虑数据存储将来要扩容的情况,可以保证数据分片当前可用,在将来数据扩展时又不需要进行数据迁移,减少数据迁移带来的工作及风险;能够实现存储节点扩容时不用进行数据迁移,并能快速实现数据的均衡,达到数据节点的平稳扩容。

可能以许多方式来实现本公开的方法和系统。例如,可通过软件、硬件、固件或者软件、硬件、固件的任何组合来实现本公开的方法和系统。用于方法的步骤的上述顺序仅是为了进行说明,本公开的方法的步骤不限于以上具体描述的顺序,除非以其它方式特别说明。此外,在一些实施例中,还可将本公开实施为记录在记录介质中的程序,这些程序包括用于实现根据本公开的方法的机器可读指令。因而,本公开还覆盖存储用于执行根据本公开的方法的程序的记录介质。

本公开的描述是为了示例和描述起见而给出的,而并不是无遗漏的或者将本公开限于所公开的形式。很多修改和变化对于本领域的普通技术人员而言是显然的。选择和描述实施例是为了更好说明本公开的原理和实际应用,并且使本领域的普通技术人员能够理解本公开从而设计适于特定用途的带有各种修改的各种实施例。

相关技术
  • 数据分片处理方法、装置以及存储介质
  • 数据分片处理方法、装置及学分银行服务器
技术分类

06120112810984