一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

数据迁移方法、装置、设备以及存储介质与流程

2021-10-20 00:59:00 来源:中国专利 TAG:迁移 装置 计算机 方法 数据


1.本技术涉及计算机技术领域,尤其涉及一种数据迁移方法、装置、设备以及存储介质。


背景技术:

2.远程字典服务(remote dictionary server,redis),是一个开源的使用ansic语言编写、支持网络、可基于内存亦可持久化的日志型的键

值(key

value)数据库,是业界当前流行的键

值存储系统。redis集群(cluster)是指多个分片(sharding)构成的一种架构,整个redis集群被拆分为多个分片,每个分片存储着一部分数据,所有分片叠加一起存储着该redis集群的全量数据。一个redis集群中存在很多的数据槽(slot),slot也称数据切片,每个slot分别位于不同分片上。
3.redis集群的扩容和缩容分别是指redis集群中分片数量的增加和删减,对于redis集群而言,随着业务量的动态变化,需要在集群容量不够时进行redis集群的扩容,即增加新的分片到当前的redis集群中,重新分配各个分片上的slot,并迁移slot及slot上的数据到新增的分片上;在集群容量处于闲置状态时进行redis集群的缩容,即删减当前的redis集群中的一个或多个分片,将删减的分片中slot及slot上的数据迁移到其它分片。
4.现有技术中,在实现redis集群的扩容和缩容时,slot之间的数据迁移是以键(key)的粒度进行迁移,即一个key一个key地迁移,在slot迁移期间,会导致被迁移方和待迁移方同时阻塞,无法处理用户侧的读请求和写请求。


技术实现要素:

5.本技术提供一种数据迁移方法、装置、设备以及存储介质,以解决在slot迁移期间,被迁移方和待迁移方同时阻塞,无法处理用户侧的读请求和写请求的问题。
6.第一方面,本技术提供一种数据迁移方法,所述方法应用于待迁移节点,所述方法包括:
7.接收元服务器发送的数据槽迁移命令,所述数据槽迁移命令携带待迁移数据槽的标识和目标节点的标识;
8.将所述待迁移节点中的待迁移数据槽的数据和所述待迁移数据槽的标识按照预设格式转换为数据加载命令并发送至所述目标节点,以使所述目标节点解析所述数据加载命令并将解析得到的所述待迁移数据槽的数据加载到所述目标节点的内存中;
9.接收所述目标节点发送的用于指示数据迁移成功或者失败的指示信息。
10.第二方面,本技术提供一种数据迁移方法,所述方法应用于目标节点,所述方法包括:
11.接收待迁移节点发送的数据加载命令,所述数据加载命令为所述待迁移节点将所述待迁移节点中的待迁移数据槽的数据和所述待迁移数据槽的标识按照预设格式转换得到;
12.解析所述数据加载命令,将解析得到的待迁移数据槽的数据加载到所述目标节点的内存中;
13.向所述待迁移节点发送用于指示数据迁移成功或者失败的指示信息。
14.第三方面,本技术提供一种数据迁移装置,包括:
15.接收模块,用于接收元服务器发送的数据槽迁移命令,所述数据槽迁移命令携带待迁移数据槽的标识和目标节点的标识;
16.发送模块,用于将所述待迁移节点中的待迁移数据槽的数据和所述待迁移数据槽的标识按照预设格式转换为数据加载命令并发送至所述目标节点,以使所述目标节点解析所述数据加载命令并将解析得到的所述待迁移数据槽的数据加载到所述目标节点的内存中;
17.所述接收模块还用于:接收所述目标节点发送的用于指示数据迁移成功或者失败的指示信息。
18.第四方面,本技术提供一种数据迁移装置,包括:
19.接收模块,用于接收待迁移节点发送的数据加载命令,所述数据加载命令为所述待迁移节点将所述待迁移节点中的待迁移数据槽的数据和所述待迁移数据槽的标识按照预设格式转换得到;
20.处理模块,用于解析所述数据加载命令,将解析得到的待迁移数据槽的数据加载到所述目标节点的内存中;
21.发送模块,用于向所述待迁移节点发送用于指示数据迁移成功或者失败的指示信息。
22.第五方面,本技术实施例提供一种数据迁移设备,包括:
23.处理器;以及
24.存储器,用于存储所述处理器的可执行指令;
25.其中,所述处理器配置为经由执行所述可执行指令来执行第一方面或第一方面各可能的实施方式中和第二方面或第二方面各可能的实施方式中任一所述的数据迁移方法。
26.第六方面,本技术实施例提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现第一方面或第一方面各可能的实施方式中和第二方面或第二方面各可能的实施方式中任一所述的数据迁移方法。
27.第七方面,本技术实施例提供一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现第一方面或第一方面各可能的实施方式中和第二方面或第二方面各可能的实施方式中任一所述的数据迁移方法。
28.本技术提供的数据迁移方法、装置、设备以及存储介质,通过待迁移节点在接收到元服务器发送的数据槽迁移命令(携带待迁移数据槽的标识和目标节点的标识)时,将待迁移节点中的待迁移数据槽的数据和待迁移数据槽的标识按照预设格式转换为数据加载命令并发送至目标节点,目标节点解析数据加载命令并将解析得到的待迁移数据槽的数据加载到目标节点的内存中。从而实现一个slot一次性的整体迁移。由于在进行数据迁移时是将一个slot一次性整体迁移,相比较一个key一个key地迁移,数据迁移所占用时间缩短,因此可缩短被迁移方和待迁移方同时阻塞的时间,缩短了无法处理用户侧的读请求和写请求的时间。
附图说明
29.图1为本技术实施例提供的数据迁移方法的一种应用场景示意图;
30.图2为本技术实施例提供的数据迁移方法的另一种应用场景示意图;
31.图3为本技术实施例提供的一种数据迁移方法的交互流程图;
32.图4为本技术实施例提供的一种数据迁移方法实施例的交互流程图;
33.图5为本技术实施例提供的一种数据迁移方法实施例的交互流程图;
34.图6为本技术实施例提供的一种数据迁移方法实施例的流程图;
35.图7为本技术实施例提供的一种数据迁移方法实施例中节点a将待迁移数据槽的数据和待迁移数据槽的标识按照预设格式转换为数据加载命令并发送至目标节点b的流程示意图;
36.图8为本技术实施例提供的一种数据迁移装置的结构示意图;
37.图9为本技术实施例提供的一种数据迁移装置的结构示意图;
38.图10为本技术实施例提供的一种数据迁移设备的结构示意图。
具体实施方式
39.下面详细描述本技术的实施例,所述实施例的示例在附图中示出。下面通过参考附图描述的实施例是示例性的,旨在用于解释本技术,而不能理解为对本技术的限制。
40.本技术实施例的说明书、权利要求书及附图中的术语“第一”和“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本技术实施例的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
41.首先,下面对本技术实施例中的部分用语进行解释说明,以便于本领域技术人员理解。
42.1、分片(sharding),整个redis集群被拆分为多个分片,每个分片存储着一部分数据,所有分片叠加一起存储着该redis集群的全量数据,分片也称为节点,下文中均以节点描述。
43.2、数据槽(slot),整个redis集群被拆分为多个节点,所有节点叠加一起存储着该redis集群的全量数据,并且这些数据对应着16384个slot(即:16384个slot,合计组成了对应redis集群的全量数据),每个slot分别位于不同节点上。
44.3、元服务器(metaserver),存储redis集群的元数据的独立模块,元服务器可以管理多个各自独立的redis集群。元数据可以包括redis集群标识(id)、该redis集群内的所有节点的标识、每个节点包括的数据槽的标识(如编号)以及该redis集群所部署的机房信息。
45.相关技术中,在实现redis集群的扩容和缩容时,slot之间的数据迁移是以键(key)的粒度进行迁移,即一个key一个key地迁移,一个slot包括多个键

值(key

value),在slot迁移期间,会导致被迁移方和待迁移方同时阻塞,无法处理用户侧的读请求和写请求。为解决这一问题,本技术实施例提供一种数据迁移方法、装置、设备以及存储介质,通过
待迁移节点在接收到元服务器发送的数据槽迁移命令(携带待迁移数据槽的标识和目标节点的标识)时,将待迁移节点中的待迁移数据槽的数据和待迁移数据槽的标识按照预设格式转换为数据加载命令并发送至目标节点,目标节点解析数据加载命令并将解析得到的待迁移数据槽的数据加载到目标节点的内存中。从而实现一个slot一次性的整体迁移。由于在进行数据迁移时是将一个slot一次性整体迁移,相比较一个key一个key地迁移,数据迁移所占用时间缩短,因此可缩短被迁移方和待迁移方同时阻塞的时间,缩短了无法处理用户侧的读请求和写请求的时间。
46.进一步地,通过在待迁移节点设置主线程和子线程,主线程在接收到元服务器发送的数据槽迁移命令时,通过子线程进行数据迁移,即子线程将待迁移数据槽的数据和待迁移数据槽迁移至目标节点,由于在进行数据迁移时,是由子线程处理数据迁移,待迁移方的主线程还可以继续处理读请求和除待迁移数据槽之外的数据槽的写请求,即读请求和除待迁移数据槽之外的数据槽的写请求可正常访问。
47.接下来,对本技术实施例涉及的应用场景进行示例说明。
48.本技术实施例提供的数据迁移方法至少可以应用于下述应用场景中,下面结合附图进行说明。
49.示例性的,图1为本技术实施例提供的数据迁移方法的一种应用场景示意图,如图1所示,显示的是迁移前的redis集群和迁移后的redis集群的节点构成,例如,迁移前的redis集群被拆分为两个节点,节点1包括3个数据槽(分别是数据槽1、数据槽2和数据槽3),节点2包括3个数据槽(分别是数据槽4、数据槽5和数据槽6),客户端通过代理层(proxy)访问每个数据槽,代理层转发客户端的访问请求。例如,在redis集群容量不够时进行当前redis集群的扩容,需要增加新的节点3到当前的redis集群中,此时需要进行数据槽的迁移,例如将数据槽4迁移到新增的节点3中,迁移后的redis集群被拆分为3个节点,节点1包括3个数据槽(分别是数据槽1、数据槽2和数据槽3),节点2包括2个数据槽(分别是数据槽5和数据槽6),节点3包括1个数据槽。在将数据槽4从节点2迁移到节点3时,可以使用本技术提供的数据迁移方法,节点2为待迁移节点(也称为待迁移方),节点3为被迁移节点(也称为被迁移方)。
50.示例性的,图2为本技术实施例提供的数据迁移方法的另一种应用场景示意图,如图2所示,一个redis集群被拆分为两个节点(节点1和节点2),该redis集群的全量数据存储在节点1和节点2,例如,节点1包括奇数编号的数据槽(数据槽1、数据槽3、

和数据槽2n 1),节点2包括偶数编号的数据槽(数据槽0、数据槽2、

和数据槽2n),例如需要将节点1中的数据槽101迁移至节点2,可以使用本技术提供的数据迁移方法,节点1为待迁移节点(也称为待迁移方),节点2为被迁移节点(也称为被迁移方)。
51.下面以具体的实施例对本技术的技术方案以及本技术的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本技术的实施例进行描述。
52.图3为本技术实施例提供的一种数据迁移方法的交互流程图,该数据迁移方法可以由数据迁移装置执行,该数据迁移装置可以通过软件和/或硬件的方式实现。如图3所示,本实施例的方法可以包括:
53.s101、待迁移节点接收元服务器发送的数据槽迁移命令,数据槽迁移命令携带待
迁移数据槽的标识和目标节点的标识。
54.具体来说,待迁移数据槽为待迁移节点中的数据槽,要实现的是将待迁移数据槽的数据以及待迁移数据槽迁移至目标节点。
55.本技术实施例中,元服务器(metaserver)为存储redis集群的元数据的独立模块,元服务器可以管理多个各自独立的redis集群。具体来说,元服务器用于存储元数据,元数据可以包括redis集群标识(id)、该redis集群内的所有节点的标识、每个节点包括的数据槽的标识(如编号)以及该redis集群所部署的机房信息。元服务器属于一个多节点部署(如>=3),其内部需要支持类似raft或者paxos协议,应对元数据一致性。元服务器会定期自动扫描对应redis集群的每个数据槽大小以及均衡分布,如果检测出有容量风险则会自动发起扩容操作,反之,如果检测出集群容量处于闲置状态之时,则由元服务器发起缩容操作。元服务器发起扩容或缩容,都存在数据槽从待迁移节点迁移至目标节点,此时元服务器向待迁移节点发送数据槽迁移命令。
56.s102、待迁移节点将待迁移节点中的待迁移数据槽的数据和待迁移数据槽的标识按照预设格式转换为数据加载命令并发送至目标节点。
57.具体地,一个redis集群中数据槽的总数量是固化不变的,在进行数据迁移时,是将整个待迁移数据槽(包括数据槽的数据和标识)迁移至目标节点,在具体迁移时,待迁移节点将待迁移数据槽的数据和待迁移数据槽的标识按照预设格式转换为数据加载命令,然后将该数据加载命令一次性发送至目标节点。
58.s103、目标节点解析数据加载命令,将解析得到的待迁移数据槽的数据加载到目标节点的内存中。
59.具体地,目标节点按照数据加载命令的预设格式对数据加载命令进行解析,将解析得到的待迁移数据槽的数据加载到目标节点的内存中,实现了待迁移数据槽的数据的迁移。
60.s104、目标节点向待迁移节点发送用于指示数据迁移成功或者失败的指示信息。
61.具体地,当目标节点解析数据和加载数据成功后,向待迁移节点发送用于指示数据迁移成功的指示信息,例如该指示信息为“ ok”。若目标节点解析数据和加载数据失败,或者目标节点已处于数据槽迁移状态,则向目标节点发送用于指示数据迁移失败的指示信息,该指示信息例如为
“‑
err slotmigratefailure”。可选的,数据槽迁移命令还可携带单次迁移所需时间,在宕机或者网络断开时,待迁移节点若在超过单次迁移所需时间还未接收到用于指示数据迁移成功或者失败的指示信息,则待迁移节点触发目标节点迁移超时,便于元服务器获取到此次迁移失败的信息。
62.可选的,当待迁移节点接收到目标节点发送的用于指示数据迁移成功的指示信息时,向元服务器发送用于指示待迁移数据槽的数据迁移成功的指示信息,元服务器则向待迁移节点发送冲洗命令,该命令携带数据槽的标识,以便待迁移节点将待迁移数据槽的数据清空。
63.可选的,若待迁移节点接收到目标节点发送的用于指示数据迁移成功的指示信息,向元服务器发送用于指示待迁移数据槽的数据迁移成功的指示信息,此时元服务器将待迁移节点中待迁移数据槽的状态设置为不可用状态,并将目标节点中待迁移数据槽的状态设置为可用状态,从而实现了数据槽的迁移。
64.本实施例提供的数据迁移方法,通过待迁移节点在接收到元服务器发送的数据槽迁移命令(携带待迁移数据槽的标识和目标节点的标识)时,将待迁移节点中的待迁移数据槽的数据和待迁移数据槽的标识按照预设格式转换为数据加载命令并发送至目标节点,目标节点解析数据加载命令并将解析得到的待迁移数据槽的数据加载到目标节点的内存中。从而实现一个slot一次性的整体迁移。由于在进行数据迁移时是将一个slot一次性整体迁移,相比较一个key一个key地迁移,数据迁移所占用时间缩短,因此可缩短被迁移方和待迁移方同时阻塞的时间,缩短了无法处理用户侧的读请求和写请求的时间。
65.图4为本技术实施例提供的一种数据迁移方法实施例的交互流程图,如图4所示,本实施例的方法在图3所示方法的基础上,可选的,上述s102可以通过如下步骤实现:
66.s102’、待迁移节点通过待迁移节点的子线程,将待迁移节点中的待迁移数据槽的数据和待迁移数据槽的标识按照预设格式转换为数据加载命令并发送至目标节点。
67.具体地,可以在待迁移节点设置主线程和子线程,主线程在接收到元服务器发送的数据槽迁移命令时,通过子线程进行数据迁移,即子线程将待迁移数据槽的数据和待迁移数据槽迁移至目标节点,由于在进行数据迁移时,是由子线程处理数据迁移,待迁移方的主线程还可以继续处理读请求和除待迁移数据槽之外的数据槽的写请求,即读请求和除待迁移数据槽之外的数据槽的写请求可正常访问。
68.作为一种可实施的方式,待迁移节点通过待迁移节点的子线程,将待迁移节点中的待迁移数据槽的数据和待迁移数据槽的标识按照预设格式转换为数据加载命令并发送至目标节点,具体可以包括:
69.s1021’、向子线程发送迁移信号,并设置待迁移数据槽的写请求状态为不可访问状态。
70.s1022’、通过子线程将待迁移节点中的待迁移数据槽的数据和待迁移数据槽的标识按照预设格式转换为数据加载命令。
71.可选的,s1022’具体可以为:
72.s10221’、通过子线程从待迁移节点预分配第一内存,将包括待迁移数据槽的标识的命令前缀写入第一内存。
73.s10222’、通过子线程调用数据加载函数,遍历待迁移数据槽的内存区域以获取待迁移数据槽的数据。
74.s10223’、通过子线程将待迁移数据槽的数据和待迁移数据槽的数据的长度写入第一内存,得到包括命令前缀、待迁移数据槽的数据和待迁移数据槽的数据的长度的加载命令。
75.作为一种可实施的方式,通过子线程将待迁移数据槽的数据和待迁移数据槽的数据的长度写入第一内存,可以为:
76.通过若确定待迁移数据槽的数据的长度大于预设阈值,则将待迁移数据槽的数据进行压缩,得到压缩后的待迁移数据槽的数据和压缩后的待迁移数据槽的数据的长度。
77.其中,例如预设阈值为10mb,可以采用压缩算法将待迁移数据槽的数据进行压缩,通过在数据长度较大时进行压缩后写入第一内存传输,可减少数据传输时间。
78.通过将压缩后的待迁移数据槽的数据和压缩后的待迁移数据槽的数据的长度写入第一内存。
79.s10224’、通过子线程调用反转函数,对加载命令中的待迁移数据槽的数据和待迁移数据槽的数据的长度的位置进行置换,得到预设格式的数据加载命令,其中,待迁移数据槽的数据以序列化的二进制流的形式存在在数据加载命令中。
80.s1023’、通过子线程将数据加载命令发送至目标节点。
81.待迁移节点通过子线程经上述s10221
’‑
s10224’得到数据加载命令,相应地,目标节点在接收到数据加载命令进行解析时,即图3所示实施例中的s103解析数据加载命令,将解析得到的待迁移数据槽的数据加载到目标节点的内存中,具体可以包括:
82.s1031、目标节点按照数据加载命令的预设格式从数据加载命令中确定待迁移数据槽的数据的位置,待迁移数据槽的数据以序列化的二进制流的形式存在在数据加载命令中。
83.s1032、目标节点对待迁移数据槽的数据进行反序列化,得到每条二进制流对应的键

值。
84.可选的,s1032可以包括:
85.目标节点对待迁移数据槽的数据进行解压,得到解压后的数据,对解压后的数据进行反序列化,得到每条二进制流对应的键

值。
86.s1033、目标节点将每条二进制流对应的键

值加载到目标节点的内存中。
87.本实施例提供的数据迁移方法,通过在待迁移节点设置主线程和子线程,主线程在接收到元服务器发送的数据槽迁移命令时,通过子线程进行数据迁移,即子线程将待迁移数据槽的数据和待迁移数据槽迁移至目标节点,由于在进行数据迁移时,是由子线程处理数据迁移,待迁移方的主线程还可以继续处理读请求和除待迁移数据槽之外的数据槽的写请求,即读请求和除待迁移数据槽之外的数据槽的写请求可正常访问。更进一步缩短了无法处理用户侧的读请求和写请求的时间。
88.下面结合一个具体的实施例,对本技术提供的数据迁移方法的详细过程进行说明,下面实施例中以待迁移节点通过子线程处理数据迁移为例进行说明。
89.图5为本技术实施例提供的一种数据迁移方法实施例的交互流程图,图6为本技术实施例提供的一种数据迁移方法实施例的流程图,如图5和图6所示所示,本实施例的方法可以包括:
90.s201、元服务器向节点a发送数据槽迁移命令,数据槽迁移命令携带待迁移数据槽的标识和目标节点b的标识。
91.具体地,作为一种可实施的方式,本实施例中通过redis的数据迁移接口采用“slotmigrate remote_ip remote_port slot_id timeout”为数据槽迁移命令,该命令包括的内容的具体含义如下:
92.slotmigrate:数据槽迁移命令名称
93.remote_ip:待迁移节点的服务器ip地址
94.remote_port:目标节点的标识(或者目标节点监听的端口)
95.slot_id:待迁移数据槽的标识
96.timeout:单次迁移所用时间
97.s202、节点a将待迁移数据槽的数据和待迁移数据槽的标识按照预设格式转换为数据加载命令并发送至目标节点b。
98.具体地,节点a接收到数据槽迁移命令后,将检测当前节点a是否已经处于正在执行数据槽迁移(slot_migrating)状态,如果已经处于正在执行数据槽迁移的状态,则直接给元服务器返回错误指示(err),否则将执行此数据槽迁移命令,若a可以正式执行此数据槽迁移命令,便直接返回ok给元服务器,是否迁移成功,则需要元服务器去主动探测。
99.s202中,节点a可以通过子线程将待迁移数据槽的数据和待迁移数据槽的标识按照预设格式转换为数据加载命令并发送至目标节点b。可选的,子线程(slotmigrate)可以设置在节点a中,作为一个常驻线程启动。
100.图7为本技术实施例提供的一种数据迁移方法实施例中节点a将待迁移数据槽的数据和待迁移数据槽的标识按照预设格式转换为数据加载命令并发送至目标节点b的流程示意图,结合图7,s202具体可以包括:
101.s2021、节点a的主线程向子线程发送迁移信号,并设置待迁移数据槽的写请求状态为不可访问状态。
102.其中,可选的,迁移信号可以为linnux操作系统用户自定义信号(sigusr)。
103.s2022、子线程从节点a预分配第一内存,将包括待迁移数据槽的标识的命令前缀写入第一内存,子线程调用数据加载函数,遍历待迁移数据槽的内存区域以获取待迁移数据槽的数据,子线程将待迁移数据槽的数据和待迁移数据槽的数据的长度写入第一内存,得到包括命令前缀、待迁移数据槽的数据和待迁移数据槽的数据的长度的加载命令。
104.具体地,子线程从节点a预分配第一内存,将包括待迁移数据槽的标识的命令前缀(如*2\r\n$8\r\nslotload\r\n)写入第一内存,其中nslotload为待迁移数据槽的标识,子线程调用数据加载(slotdump)函数,遍历待迁移数据槽的内存区域以获取待迁移数据槽的数据为slotcontent,子线程将待迁移数据槽的数据和待迁移数据槽的数据的长度写入第一内存,待迁移数据槽的数据拼接在命令前缀后面,得到格式为*2\r\n$8\r\nslotload\r\nslotcontent\r\n,再把待迁移数据槽的数据的长度(slotconnect_size)拼接到最后,得到加载命令为*2\r\n$8\r\nslotload\r\nslotcontent\r\nslotconnect_size。
105.s2023、子线程调用反转函数,对加载命令中的待迁移数据槽的数据和待迁移数据槽的数据的长度的位置进行置换,得到预设格式的数据加载命令。
106.具体地,子线程调用反转函数(如slot_command_rotate函数),通过3次反转(o(n)的时间复杂度),把slotcontent和slotcontent_size的内容进行置换,得到预设格式的数据加载命令,数据加载命令为:“*2\r\n$8\r\nslotload\r\nslotconnect_size\r\nslotconnect”。
107.s2024、子线程将数据加载命令发送至目标节点b。
108.具体地,子线程可以阻塞式把数据加载命令发送到b,等待b反馈的指示信息。
109.本技术实施例中,子线程接收迁移信号,接收到此迁移信号则节点a要开始数据迁移。
110.s203、目标节点b解析数据加载命令,将解析得到的待迁移数据槽的数据加载到目标节点b的内存中。
111.具体地,目标节点b按照数据加载命令的预设格式从数据加载命令中确定待迁移数据槽的数据的位置,待迁移数据槽的数据以序列化的二进制流的形式存在在数据加载命令中,接着对待迁移数据槽的数据进行反序列化,得到每条二进制流对应的键

值,将每条
二进制流对应的键

值加载到目标节点b的内存中。
112.当目标节点b解析数据和加载数据成功后,向待迁移节点a发送用于指示数据迁移成功的指示信息,例如该指示信息为“ ok”。
113.s204、目标节点b向节点a发送用于指示数据迁移成功或者失败的指示信息。
114.若节点a接收到目标节点b发送的用于指示数据迁移成功的指示信息,向元服务器发送用于指示待迁移数据槽的数据迁移成功的指示信息,此时元服务器将节点a中待迁移数据槽的状态设置为不可用状态,并将目标节点b中待迁移数据槽的状态设置为可用状态,从而实现了数据槽的迁移。
115.本实施例中,数据槽迁移是非异步方式,数据槽迁移命令若发出,则须等到目标节点加载数据成功后才返回ok,如果因为目标节点加载数据超时、连接超时或数据加载命令发送超时都会导致数据槽迁移命令执行失败,理论上,是存在数据槽迁移命令执行失败,但是迁移两端都存在相同的数据槽数据,这种情况可能会发生在对端已经加载成功数据,但是此时网络断开或者链路阻塞,因此,本实施例中设置如果对端数据槽已经存在数据,则对端数据槽的数据会被覆盖。
116.本实施例中,如图6中所示,若s201中数据槽迁移命令未发送成功,则流程中止,若s202中数据加载命令未发送成功,则流程中止,若s203中节点b加载数据失败,则流程中止。
117.以下为本技术装置实施例,可以用于执行本技术上述方法实施例。对于本技术装置实施例中未披露的细节,可参考本技术上述方法实施例。
118.图8为本技术实施例提供的一种数据迁移装置的结构示意图,如图8所示,本实施例的装置可以包括:接收模块11和发送模块12,其中,
119.接收模块11用于接收元服务器发送的数据槽迁移命令,所述数据槽迁移命令携带待迁移数据槽的标识和目标节点的标识;
120.发送模块12用于将所述待迁移节点中的待迁移数据槽的数据和所述待迁移数据槽的标识按照预设格式转换为数据加载命令并发送至所述目标节点,以使所述目标节点解析所述数据加载命令并将解析得到的所述待迁移数据槽的数据加载到所述目标节点的内存中;
121.所述接收模块11还用于:接收所述目标节点发送的用于指示数据迁移成功或者失败的指示信息。
122.可选的,发送模块12用于通过所述待迁移节点的子线程,将所述待迁移节点中的待迁移数据槽的数据和所述待迁移数据槽的标识按照预设格式转换为数据加载命令并发送至所述目标节点。
123.可选的,发送模块12用于向所述子线程发送迁移信号,并设置所述待迁移数据槽的写请求状态为不可访问状态;
124.通过所述子线程将所述待迁移节点中的待迁移数据槽的数据和所述待迁移数据槽的标识按照预设格式转换为数据加载命令;
125.通过所述子线程将所述数据加载命令发送至所述目标节点。
126.可选的,发送模块12用于:通过所述子线程从所述待迁移节点预分配第一内存,将包括所述待迁移数据槽的标识的命令前缀写入所述第一内存;
127.通过所述子线程调用数据加载函数,遍历所述待迁移数据槽的内存区域以获取所
述待迁移数据槽的数据;
128.通过所述子线程将所述待迁移数据槽的数据和所述待迁移数据槽的数据的长度写入所述第一内存,得到包括所述命令前缀、所述待迁移数据槽的数据和所述待迁移数据槽的数据的长度的加载命令;
129.通过所述子线程调用反转函数,对所述加载命令中的所述待迁移数据槽的数据和所述待迁移数据槽的数据的长度的位置进行置换,得到所述预设格式的所述数据加载命令,其中,所述待迁移数据槽的数据以序列化的二进制流的形式存在在所述数据加载命令中。
130.可选的,发送模块12具体用于:通过所述子线程若确定所述待迁移数据槽的数据的长度大于预设阈值,则将所述待迁移数据槽的数据进行压缩,得到压缩后的待迁移数据槽的数据和压缩后的待迁移数据槽的数据的长度;
131.通过所述子线程将所述压缩后的待迁移数据槽的数据和压缩后的待迁移数据槽的数据的长度写入所述第一内存。
132.可选的,发送模块12还用于在接收模块11接收到所述目标节点发送的用于指示数据迁移成功的指示信息时,向所述元服务器发送用于指示所述待迁移数据槽的数据迁移成功的指示信息,用于所述元服务器将所述待迁移节点中所述待迁移数据槽的状态设置为不可用状态,并将所述目标节点中所述待迁移数据槽的状态设置为可用状态。
133.本技术实施例提供的装置,可执行上述方法实施例,其具体实现原理和技术效果,可参见上述方法实施例,本实施例此处不再赘述。
134.图9为本技术实施例提供的一种数据迁移装置的结构示意图,如图9所示,本实施例的装置9可以包括:接收模块21、处理模块22和发送模块23,其中,
135.接收模块21用于接收待迁移节点发送的数据加载命令,所述数据加载命令为所述待迁移节点将所述待迁移节点中的待迁移数据槽的数据和所述待迁移数据槽的标识按照预设格式转换得到;
136.处理模块22用于解析所述数据加载命令,将解析得到的待迁移数据槽的数据加载到所述目标节点的内存中;
137.发送模块23用于向所述待迁移节点发送用于指示数据迁移成功或者失败的指示信息。
138.可选的,数据加载命令为所述待迁移节点通过所述待迁移节点的子线程,将所述待迁移节点中的待迁移数据槽的数据和所述待迁移数据槽的标识按照预设格式转换得到,接收模块21用于接收所述待迁移节点通过所述子线程发送的所述数据加载命令。
139.可选的,处理模块22用于按照所述数据加载命令的预设格式从所述数据加载命令中确定所述待迁移数据槽的数据的位置,所述待迁移数据槽的数据以序列化的二进制流的形式存在在所述数据加载命令中;
140.对所述待迁移数据槽的数据进行反序列化,得到每条二进制流对应的键

值;
141.将所述每条二进制流对应的键

值加载到所述目标节点的内存中。
142.可选的,处理模块22用于对所述待迁移数据槽的数据进行解压,得到解压后的数据;
143.对所述解压后的数据进行反序列化,得到每条二进制流对应的键

值。
144.本技术实施例提供的装置,可执行上述方法实施例,其具体实现原理和技术效果,可参见上述方法实施例,本实施例此处不再赘述。
145.需要说明的是,应理解以上装置的各个模块的划分仅仅是一种逻辑功能的划分,实际实现时可以全部或部分集成到一个物理实体上,也可以物理上分开。且这些模块可以全部以软件通过处理元件调用的形式实现;也可以全部以硬件的形式实现;还可以部分模块通过处理元件调用软件的形式实现,部分模块通过硬件的形式实现。例如,处理模块可以为单独设立的处理元件,也可以集成在上述装置的某一个芯片中实现,此外,也可以以程序代码的形式存储于上述装置的存储器中,由上述装置的某一个处理元件调用并执行以上处理模块的功能。其它模块的实现与之类似。此外这些模块全部或部分可以集成在一起,也可以独立实现。这里的处理元件可以是一种集成电路,具有信号的处理能力。在实现过程中,上述方法的各步骤或以上各个模块可以通过处理器元件中的硬件的集成逻辑电路或者软件形式的指令完成。
146.例如,以上这些模块可以是被配置成实施以上方法的一个或多个集成电路,例如:一个或多个特定集成电路(application specific integrated circuit,asic),或,一个或多个微处理器(digital signal processor,dsp),或,一个或者多个现场可编程门阵列(field programmable gate array,fpga)等。再如,当以上某个模块通过处理元件调度程序代码的形式实现时,该处理元件可以是通用处理器,例如中央处理器(central processing unit,cpu)或其它可以调用程序代码的处理器。再如,这些模块可以集成在一起,以片上系统(system

on

a

chip,soc)的形式实现。
147.在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本技术实施例的流程或功能。计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘solid state disk(ssd))等。
148.图10为本技术实施例提供的一种数据迁移设备的结构示意图,如图10所示,本实施例的数据迁移设备可以包括处理器21和存储器22,
149.其中,存储器22用于存储处理器21的可执行指令。
150.处理器21配置为经由执行可执行指令来执行上述方法实施例中的数据迁移方法。
151.可选地,存储器22既可以是独立的,也可以跟处理器21集成在一起。
152.当存储器22是独立于处理器21之外的器件时,本实施例的数据迁移设备还可以包括:
153.总线23,用于连接存储器22和处理器21。
154.可选地,本实施例的数据迁移设备还可以包括:通信接口24,该通信接口24可以通
过总线23与处理器21连接。
155.本技术还提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机执行指令,当其在计算机上运行时,使得计算机执行如上述实施例的数据迁移方法。
156.本技术实施例还提供一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现如上实施例中的数据迁移方法。
157.在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本技术的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
158.尽管上面已经示出和描述了本技术的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本技术的限制,本领域的普通技术人员在本技术的范围内可以对上述实施例进行变化、修改、替换和变型。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献

  • 日榜
  • 周榜
  • 月榜