本发明的实施例涉及大数据领域,更具体地,本发明的实施例涉及数据迁移方法、数据迁移装置、计算机可读存储介质以及电子设备。
背景技术:
本部分旨在为权利要求书中陈述的本发明的实施例提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。
redis是一个开源的、可基于内存亦可持久化的键值对(key-value)存储数据库,redis基于单线程处理用户请求,数据迁移是redis数据库的高频需求。
目前,在一种技术方案中,redis数据库在进行数据迁移时,采用的是同步迁移方式。在采用同步迁移方式进行数据迁移时,redis服务器接收到迁移命令后,开始解析迁移命令,基于迁移命令以key为单位打包迁移源上需要迁移的数据,每个数据封装对应一个迁移命令,将打包后的迁移数据发送给迁移目标,并等待接收到迁移目标返回的所有迁移数据的反馈。
技术实现要素:
但是,在这种技术方案中,打包迁移数据以及同步等待迁移目标的反馈都会造成其他请求的阻塞,以单个键值为单位进行数据迁移,在迁移失败后难以保障迁移源与迁移目标的数据一致性。
因此在现有技术中,难以达到令人满意的数据迁移效果。
为此,非常需要一种改进的数据处理方法,以使得能够降低在迁移数据过程中导致的业务请求的阻塞,保障数据一致性。
在本上下文中,本发明的实施例期望提供一种数据处理方法、数据处理装置、计算机可读存储介质以及电子设备。
在本发明实施例的第一方面中,提供了一种数据迁移方法,包括:在接收到对迁移源中一个或多个槽slot的以slot为单位的数据迁移请求时,将所述数据迁移请求放入待迁移的任务队列中;通过定时任务检测所述任务队列中是否存在所述数据迁移请求;在检测到存在所述数据迁移请求时,异步地将与所述数据迁移请求对应的slot上的待迁移数据发送至迁移目标。
在本公开的一种示例性实施例中,所述数据迁移方法还包括:对所述待迁移数据的键key的迁移状态进行标识,所述迁移状态包括:未迁移、迁移中、已迁移以及业务请求中,每个所述slot包含有多个所述key。
在本公开的一种示例性实施例中,所述数据迁移方法还包括:在接收到数据删除操作请求时,获取与所述数据删除操作请求对应的数据的迁移状态的标识;基于所述标识判断与所述数据删除操作请求对应的数据是否处于迁移中;在判定所述数据处于迁移中时,将所述数据标识为已删除;添加与所述数据删除操作请求对应的数据操作日志。
在本公开的一种示例性实施例中,所述数据迁移方法还包括:在接收到数据更新操作请求时,获取与所述数据更新操作请求对应的数据的迁移状态的标识;基于所述标识判断与所述数据更新操作请求对应的数据是否处于迁移中;在判定所述数据处于迁移中时,确定所述数据的数据类型;基于所述数据的数据类型对所述数据进行处理。
在本公开的一种示例性实施例中,基于所述数据的数据类型对所述数据进行处理,包括:在所述数据类型为字符串类型时,通过所述数据更新操作请求中的新数据更新所述数据,并将所述数据标识为删除。
在本公开的一种示例性实施例中,基于所述数据的数据类型对所述数据进行处理,包括:在所述数据类型为链表类型时,对与所述数据更新操作请求对应的数据进行互斥处理;在更新操作完成后,解除所述互斥处理并继续对与所述更新操作对应的数据进行迁移处理。
在本公开的一种示例性实施例中,所述数据迁移方法还包括:在所述数据更新操作请求处理完成时,添加与所述数据更新操作请求对应的数据操作日志。
在本公开的一种示例性实施例中,所述数据迁移方法还包括:在接收到数据增加操作请求时,添加与所述数据增加操作请求对应的数据操作日志;将所述数据操作日志发送至所述迁移目标。
在本公开的一种示例性实施例中,所述数据迁移方法还包括:在接收到数据操作请求时,获取与所述数据操作请求对应的数据的迁移状态的标识;基于所述标识判断与所述数据操作请求对应的数据是否处于已迁移;在判定所述数据处于已迁移时,添加与所述数据操作请求对应的数据操作日志;将所述数据操作日志发送至所述迁移目标。
在本公开的一种示例性实施例中,所述数据迁移方法还包括:将迁移过程中的新增数据保存在目标存储结构中;在打包完所述待迁移数据后通过所述定时任务将所述新增数据添加到对应的slot中。
在本公开的一种示例性实施例中,所述数据迁移方法还包括:在接收到所述迁移目标返回的所述一个或多个slot迁移成功的消息后,删除所述迁移源中对应的slot中的数据。
在本公开的一种示例性实施例中,异步地将与所述数据迁移请求对应的slot上的待迁移数据发送至迁移目标,包括:通过多线程的方式打包与所述数据迁移请求对应的slot上的待迁移数据;异步地将所述待迁移数据发送至迁移目标。
根据本公开的第二方面,提供了一种数据迁移装置,包括:请求处理单元,用于在接收到对迁移源中一个或多个slot的以slot为单位的数据迁移请求时,将所述数据迁移请求放入待迁移的任务队列中;检测单元,用于通过定时任务检测所述任务队列中是否存在所述数据迁移请求;迁移单元,用于在检测到存在所述数据迁移请求时,异步地将与所述数据迁移请求对应的slot上的待迁移数据发送至迁移目标。
在本公开的一种示例性实施例中,所述数据迁移装置还包括:状态标识单元,用于对所述待迁移数据的键key的迁移状态进行标识,所述迁移状态包括:未迁移、迁移中、已迁移以及业务请求中,每个所述slot包含有多个所述key。
在本公开的一种示例性实施例中,所述数据迁移装置还包括:第一标识获取单元,用于在接收到数据删除操作请求时,获取与所述数据删除操作请求对应的数据的迁移状态的标识;第一判断单元,用于基于所述标识判断与所述数据删除操作请求对应的数据是否处于迁移中;标识单元,用于在判定所述数据处于迁移中时,将所述数据标识为已删除;第一日志添加单元,用于添加与所述数据删除操作请求对应的数据操作日志。
在本公开的一种示例性实施例中,所述数据迁移装置还包括:第二标识获取单元,用于在接收到数据更新操作请求时,获取与所述数据更新操作请求对应的数据的迁移状态的标识;第二判断单元,用于基于所述标识判断与所述数据更新操作请求对应的数据是否处于迁移中;数据类型确定单元,用于在判定所述数据处于迁移中时,确定所述数据的数据类型;数据处理单元,用于基于所述数据的数据类型对所述数据进行处理。
在本公开的一种示例性实施例中,所述数据处理单元被配置成:在所述数据类型为字符串类型时,通过所述数据更新操作请求中的新数据更新所述数据,并将所述数据标识为删除。
在本公开的一种示例性实施例中,所述数据处理单元被配置成:在所述数据类型为链表类型时,对与所述数据更新操作请求对应的数据进行互斥处理;在更新操作完成后,解除所述互斥处理并继续对与所述更新操作对应的数据进行迁移处理。
在本公开的一种示例性实施例中,所述数据迁移装置还包括:第二日志添加单元,用于在所述数据更新操作请求处理完成时,添加与所述数据更新操作请求对应的数据操作日志。
在本公开的一种示例性实施例中,所述数据迁移装置还包括:第三日志添加单元,用于在接收到数据增加操作请求时,添加与所述数据增加操作请求对应的数据操作日志;第一日志发送单元,用于将所述数据操作日志发送至所述迁移目标。
在本公开的一种示例性实施例中,所述数据迁移装置还包括:第三标识获取单元,用于在接收到数据操作请求时,获取与所述数据操作请求对应的数据的迁移状态的标识;第三判断单元,用于基于所述标识判断与所述数据操作请求对应的数据是否处于已迁移;第三日志添加单元,用于在判定所述数据处于已迁移时,添加与所述数据操作请求对应的数据操作日志;第二日志发送单元,用于将所述数据操作日志发送至所述迁移目标。
在本公开的一种示例性实施例中,所述数据迁移装置还包括:数据存储单元,用于将迁移过程中的新增数据保存在目标存储结构中;数据添加单元,用于在打包完所述待迁移数据后通过所述定时任务将所述新增数据添加到对应的slot中。
在本公开的一种示例性实施例中,所述数据迁移装置还包括:删除单元,用于在接收到所述迁移目标返回的所述一个或多个slot迁移成功的消息后,删除所述迁移源中对应的slot中的数据。
在本公开的一种示例性实施例中,迁移单元包括:打包单元,用于通过多线程的方式打包与所述数据迁移请求对应的slot上的待迁移数据;异步迁移单元,用于异步地将所述待迁移数据发送至迁移目标。
根据本公开的第三方面,提高了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上述第一项所述的数据迁移方法。
根据本公开的第四方面,提高了一种电子设备,包括:处理器;以及存储器,所述存储器上存储有计算机可读指令,所述计算机可读指令被所述处理器执行时实现如上述第一项所述的数据迁移方法。
根据本发明实施例的技术方案,一方面,将以slot为单位的数据迁移请求放入任务队列中进行处理,无需等待迁移请求处理完成就能够处理正常的业务请求,从而能够降低迁移过程中正常业务请求的阻塞;另一方面,通过定时任务检测到任务队列中存在数据迁移请求时,异步地将对应的slot上的待迁移数据发送至迁移目标,由于定时任务是在正常业务请求之后执行的,能够进一步降低迁移过程中正常业务请求的阻塞;再一方面,以slot为单位进行数据迁移,在整个slot数据迁移成功后才进行删除,从而能够更好地保障数据一致性,并且能够提高数据迁移效率。
附图说明
通过参考附图阅读下文的详细描述,本发明示例性实施例的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本发明的若干实施例,其中:
图1示意性示出了根据本发明的一些实施例的示例性应用场景的示意框图;
图2示意性示出了根据本发明的一些实施例的数据迁移方法的流程示意图;
图3示意性示出了根据本发明的一些实施例的数据迁移过程中发生数据互斥的处理流程示意图;
图4示意性示出了根据本发明的一些实施例的数据迁移过程中发生数据互斥的处理流程示意图;
图5示意性示出了根据本发明的一些实施例的迁移源与迁移目标的交互过程的示意图;
图6示意性示出了根据本发明的另一些实施例的迁移源与迁移目标的交互过程的示意图;
图7示意性示出了根据本发明的一些实施例的数据迁移装置的示意框图;
图8示意性地示出了根据本发明的示例实施例的存储介质的示意图;以及
图9示意性地示出了根据发明的示例实施例的电子设备的方框图。
在附图中,相同或对应的标号表示相同或对应的部分。
具体实施方式
下面将参考若干示例性实施例来描述本发明的原理和精神。应当理解,给出这些实施例仅仅是为了使本领域技术人员能够更好地理解进而实现本发明,而并非以任何方式限制本发明的范围。相反,提供这些实施例是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
本领域技术人员知道,本发明的实施例可以实现为一种系统、装置、设备、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。
根据本发明的实施例,提出了一种数据迁移方法、数据迁移装置、介质和电子设备。
在本文中,需要理解的是,所涉及的术语同步迁移指的是发送迁移数据后需等待回复才能执行后续操作。异步迁移指的是发送迁移数据后无需等待回复直接执行后续操作。并发迁移指的是多个迁移任务可以同时开启,在cpu调度单元中互不影响,各自完成数据迁移。数据互斥指的是某个数据在迁移过程中出现业务方对其有读写请求。此外,附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。
下面参考本发明的若干代表性实施例,详细阐释本发明的原理和精神。
发明概述
本发明人发现,现有的技术方案中,数据迁移的命令为:migratehostport""dbidtimeout[copy|replace]keyskey1key2...keyn,其中:hostport指定迁移的目的节点地址;dbid指定迁移的数据库id;timeout指定迁移的超时时间;key1key2...keyn表示待迁移的key。在现有技术方案中,无论是采用同步迁移方式还是异步迁移方式,都是以key为单位进行数据迁移,在迁移失败后容易出现部分数据残留;在数据迁移过程中,经常出现迁移任务与正常业务请求同时操作一个数据的互斥场景,造成正常业务请求的阻塞。
基于上述内容,本发明的基本思想在于,因为在redis中定时任务是在正常业务请求处理之后执行的,为了降低迁移过程中正常业务请求的阻塞,将迁移任务的管理放入到定时任务中进行,此外,由于以key为单位进行数据迁移的迁移效率较低,并且迁移失败后容易出现部分数据残留,因此,在本发明的实施例中,以slot为单位进行数据迁移,在整个slot数据迁移完成后才同步到用户,从而能够更好地保障数据一致性。
在介绍了本发明的基本原理之后,下面具体介绍本发明的各种非限制性实施例。
应用场景总览
首先参考图1,图1示出了根据本发明的一些实施例的示例性应用场景的示意框图。如图1所示,redis集群包括5个节点,每个节点拥有一部分slot,总共16384个slot,每个slot与key之间具有映射关系。在对redis集群进行扩容时,例如,将新节点6加入集群时,需要为新节点6迁移数据以实现扩容。
应该理解的是,图1所示的应用场景仅是本发明的实施例可以在其中得以实现的一个示例。本发明的实施例还可以应用于redis集群缩容等场景下,本发明实施例的适用范围不受到上述应用场景任何方面的限制。
示例性方法
下面结合图1的应用场景,参考图2来描述根据本发明示例性实施例的数据处理方法。需要注意的是,上述应用场景仅是为了便于理解本发明的精神和原理而示出,本发明的实施例在此方面不受任何限制。相反,本发明的实施例可以应用于适用的任何场景。
参照图2所示,在步骤s210,在接收到对迁移源中一个或多个槽slot的以slot为单位的数据迁移请求时,将所述数据迁移请求放入待迁移的任务队列中。
在示例实施例中,迁移源为redis集群中的一个节点,每个节点包含多个slot,每个节点会存储映射到其包含的slot的数据。对redis集群进行扩容例如增加一个节点时,需要重新分配集群中的数据,产生数据迁移的需求。例如,在图1中,redis集群增加一个节点6时,需要将其他节点的数据迁移到节点6以进行扩容。
在示例实施例中,采用以下迁移命令进行数据迁移:migratehostport""dbidtimeout[copy|replace][slots|keys][key1|slot1][key2|slot2]...[keyn|slotn],其中:hostport指定迁移的目标节点地址;dbid指定迁移源的数据库id;timeout指定迁移的超时时间;如果指定了copy选项,表示不删除源节点上的key;如果指定了replace选项,替换目标节点上已存在的key(如果存在)。[slots|keys]表示该迁移命令既可以以slot为单位进行迁移,也可以以key为单位进行迁移。进一步地,在进行数据迁移时,向redis集群中的迁移源的节点发送迁移命令例如,migrate192.168.1.16379“”060replaceslots123,该迁移命令表示需要把slot123所对应的数据从源节点迁移到目标节点,该目标节点的ip地址为192.168.1.1,端口号为6379。
在示例实施例中,在接收到以slot为单位的数据迁移请求时,可以将数据迁移请求封装放入待迁移的任务队列中。通过将数据迁移请求放入任务队列里面,并在正常业务请求处理完成之后对任务队列中的数据迁移请求进行处理,无需等待迁移请求处理完成就能够处理正常的业务请求,从而能够减少迁移过程中正常业务请求的阻塞。
在步骤s210中,通过定时任务检测所述任务队列中是否存在所述数据迁移请求。
redis本身的处理流程是分两部分,一部分是处理业务的正常业务请求,另一部分是通过定时任务来处理redis系统本身的逻辑,redis在处理完所有业务请求后会进入相关定时任务处理流程,即定时任务是在业务请求处理之后执行的。在本示例实施例中,将迁移任务的管理放在定时任务中来处理,由于定时任务是在正常业务请求之后执行的,能够降低迁移过程中正常业务请求的阻塞。
在示例实施例中,可以通过redis中的列表来实现任务队列,在定时任务中检测到任务队列中有待迁移的数据迁移请求,则将与该数据迁移请求对应的slot的待迁移数据推送到后台实际迁移的多线程任务中。
在步骤s230中,在检测到存在所述数据迁移请求时,异步地将与所述数据迁移请求对应的slot上的待迁移数据发送至迁移目标。
在示例实施例中,在检测到任务队列中存在数据迁移请求时,解析数据迁移请求以确定待迁移的slot,通过redis集群中slots_to_keys结构获取当前所有归属在待迁移slot上的数据。slots_to_keys结构为一种radixtree结构,用来保存所有映射到待迁移slot上数据的keys,即slots_to_keys分别保存了归属于每个slot上的所有keys,这样可以通过这些keys可以获取到完整的需要迁移的键值数据。
在示例实施例中,通过redis服务器上的迁移任务打包需要迁移slot上的数据,在迁移源与迁移目标之间进行少量的迁移命令交互后,异步地将对应的slot上的待迁移数据到迁移目标。进一步地,通过redis服务器上的迁移任务能够对多个slot并发执行迁移,即通过多线程的方式并发迁移多个slot。例如,可以通过多线程的方式打包与所述数据迁移请求对应的slot上的待迁移数据,异步地将所述待迁移数据发送至迁移目标。
根据图2的示例实施例中的数据迁移方法,一方面,将以slot为单位的数据迁移请求放入任务队列中进行处理,无需等待迁移请求处理完成就能够处理正常的业务请求,从而能够降低迁移过程中正常业务请求的阻塞;另一方面,通过定时任务检测到任务队列中存在数据迁移请求时,异步地将对应的slot上的待迁移数据发送至迁移目标,由于定时任务是在正常业务请求之后执行的,能够进一步降低迁移过程中正常业务请求的阻塞;再一方面,以slot为单位进行数据迁移,在整个slot数据迁移成功后才进行删除,从而能够更好地保障数据一致性,并且能够提高数据迁移效率。
进一步地,在示例实施例中,在迁移过程中会对需要进行迁移的keys进行迁移状态的标识:未迁移、迁移中、已迁移以及业务请求中。通过设置单个key的迁移状态来达到最小互斥单位,即以单个key为互斥单位,而不是一组key。通过对单个key的迁移状态进行标识,能够达到最小互斥粒度防止阻塞放大,使得迁移能够平滑进行。
进一步地,在示例实施例中,将迁移过程中产生的新增数据保存在目标存储结构例如未迁移的slot中,在打包完待迁移数据后通过redis定时任务将新增数据刷回到对应的存储结构例如slot中。
此外,在示例实施例中,在接收到所述迁移目标返回的所述一个或多个slot迁移成功的消息后,删除迁移源中对应的slot中的数据。在得到迁移目标关于待迁移slot的迁移成功的反馈后,redis服务发送该slot迁移成功的报文给到迁移需求方例如迁移命令发起的用户。redis服务通过gossip协议确认待迁移slot已经成功迁移到迁移目标(即该slot已经归属到目标节点),则删除原有slot的数据。
由于在单个的键值对数据迁移成功后不会进行删除操作,直到迁移源确定待迁移的slot成功迁移之后才会删除原有的slot上的数据,从而确保了在迁移目标出现故障时导致的数据丢失,使得能够保障数据的一致性。
进一步地,在示例实施例中,在发生迁移异常时,在迁移目标处通过定时任务检测是否存在数据残留,如果存在数据残留,则清除对应的数据残留,确保数据的一致性。此外,由于在迁移过程中请求和响应仅在迁移源上执行,不会在迁移源与迁移目标之间进行切换,迁移过程中不会产生额外的请求交互。
图3示意性示出了根据本发明的一些实施例的数据迁移过程中发生数据互斥的处理流程示意图。
在步骤s310中,在接收到数据删除操作请求时,获取与所述数据删除操作请求对应的数据的迁移状态的标识。
在示例实施例中,在迁移过程中,若接收到数据删除操作请求,则产生了迁移任务和数据删除业务请求同时操作该数据的互斥场景,需要根据该数据的迁移状态进行相应的处理。在redis服务器接收到数据删除请求时,解析该数据删除请求确定对应数据的key,获取对应数据的key的迁移状态的标识。可以用数字或字母对数据的key的迁移状态进行标识,例如,可以用0标识未迁移,1标识迁移中,2标识已迁移。需要说明的是,也可以采用其他的方式对key的迁移状态进行标识,本发明对此不进行特殊限定。
在步骤s320中,基于所述标识判断与所述数据删除操作请求对应的数据是否处于迁移中。
在示例实施例中,用0标识未迁移,1标识迁移中,2标识已迁移。若该数据的迁移状态的标识为0,则确定该数据处于未迁移状态;若该数据的迁移状态的标识为1,则确定该数据处于迁移中;若该数据的迁移状态的标识为2,则确定该数据已迁移。
在步骤s330中,在判定所述数据处于迁移中时,将所述数据标识为已删除。
在示例实施例中,在根据数据的key的迁移状态的标识判定数据处于迁移中时,将该数据标识为已删除,例如,可以用“-”号将该数据标识为已删除。
在步骤s340中,添加与所述数据删除操作请求对应的数据操作日志。
为了使迁移源与迁移目标处的数据保存一致,需要在迁移目标处接收到该处于“迁移中”的数据之后,在迁移目标处对该数据进行删除操作,因此,在示例实施例中,需要添加与数据删除操作请求对应的数据操作日志,以及将该数据操作日志发送至迁移目标。
图4示意性示出了根据本发明的一些实施例的数据迁移过程中互斥处理的流程示意图。
在步骤s410中,在接收到数据更新操作请求时,获取与所述数据更新操作请求对应的数据的迁移状态的标识。
在示例实施例中,在迁移过程中,若接收到数据更新操作请求,则产生了迁移任务和数据更新业务请求同时操作该数据的互斥场景,需要根据该数据的迁移状态进行相应的处理。在redis服务器在接收到数据更新请求时,解析该数据更新请求确定对应数据的key,获取对应数据的key的迁移状态的标识。例如,可以用0标识未迁移,1标识迁移中,2标识已迁移。
在步骤s420中,基于所述标识判断与所述数据更新操作请求对应的数据是否处于迁移中。
在示例实施例中,若该数据的迁移状态的标识为0,则确定该数据处于未迁移状态;若该数据的迁移状态的标识为1,则确定该数据处于迁移中。
在步骤s430中,在判定所述数据处于迁移中时,确定所述数据的数据类型。
在示例实施例中,在对处于迁移中的数据进行数据更新操作时,需要根据数据的数据类型进行相应的处理,因此,需要确定与数据更新操作请求对应的数据的数据类型。redis常见数据类型有:string即字符串、list即链表、set即集合、zset即有序集合、hash散列表、bitmap即位图。
在步骤s440中,基于所述数据的数据类型对所述数据进行处理。
在示例实施例中,对于string类型的数据,直接通过数据更新操作请求中的新数据更新该string类型的数据。对于其他类型的数据结构例如list类型数据,由于用户的更新操作请求可能仅操作整个链表中的某一条链上的数据,如果与string类型进行一样的处理,会涉及到拷贝整个链表数据,为了减少数据处理量,需要对与数据更新操作请求对应的数据进行互斥处理例如加锁处理,在更新操作完成后,解除该互斥处理即解锁处理并继续对与该更新操作对应的数据进行迁移处理。通过对与数据更新操作请求对应的数据进行互斥处理,在等待极短时间后即可直接在原有数据上操作,能够减少阻塞等待的时间。
进一步地,为了保障数据的一致性,在数据更新操作请求处理完成时,添加与数据更新操作请求对应的数据操作日志。
此外,在示例实施例中,在接收到数据增加操作请求时,添加与所述数据增加操作请求对应的数据操作日志;将添加的数据操作日志发送至迁移目标。为了更好地保障数据的一致性,在迁移过程中有针对已经迁移的数据或者新增数据的操作请求时,记录相应操作请求的操作日志,后续将记录的操作日志一并发往迁移目标。
在图5示意性示出了根据本发明的一些实施例的迁移源与迁移目标的交互过程的示意图。
参照图5所示,在步骤s51中,迁移客户端向迁移源发送以slot为单位的数据迁移请求,迁移客户端可以为自动化组件或者迁移脚本。
在步骤s52中,在迁移源接收到该数据迁移请求后,将该数据迁移请求放入待迁移的任务队列中,并向迁移客户端返回确认信息。
在步骤s53中,迁移源与迁移目标开始进行交互,例如进行必要的迁移命令交互。
在步骤s54中,在必要的迁移命令交互完成之后,迁移源向迁移目标发送待迁移数据以及对应的操作日志,例如正常业务请求对待迁移数据的操作日志。
在步骤s55中,迁移目标在接收到待迁移数据以及对应的操作日志之后,向迁移源返回针对slot的迁移应答,例如对应的slot迁移成功的应答。
在步骤s56中,迁移源接收到迁移目标的反馈之后,向迁移客户端返回迁移成功的应答。
图6示意性示出了根据本发明的另一些实施例的迁移源与迁移目标的交互过程的示意图。
参照图6所示,在步骤s61中,迁移源向迁移目标发送以slot为单位的迁移导入命令,即将待迁移slot导入迁移目标的消息。
在步骤s62中,迁移目标接收到迁移源发生的slot迁移导入命令之后,向迁移源返回对slot导入命令的应答。
在步骤s63中,迁移源接收到迁移目标的的成功反馈之后,迁移目标发送关于待迁移slot的解码后的键值对数据。
在步骤s64中,迁移目标在接收到迁移源发送的对应的slot的键值对数据之后,向迁移源返回数据迁移成功的应答。
在步骤s65中,在迁移过程中产生新增数据时,迁移源记录响应的新增数据的操作日志,向迁移目标发送新增数据以及对应的操作日志。
在步骤s66中,迁移目标在接收到新增数据以及对应的操作日志之后,向迁移源返回对增量数据迁移成功的应答。
在步骤s67中,在迁移源完成了所有待迁移的任务之后,向迁移目标发送迁移完成的消息。
在步骤s68中,迁移目标在接收到迁移源发送的迁移完成的消息之后,在成功接收到所有迁移数据之后,向迁移源返回迁移成功的应答。迁移源在接收到迁移目标返回的迁移成功的应答后,可以释放原始键值对数据。
示例性装置
在介绍了本发明示例性实施例的方法之后,接下来,参考图7对本发明示例性实施例的数据处理装置。
在图7中,数据处理装置700可以包括:请求处理单元710、检测单元720以及迁移单元730。其中,请求处理单元710用于在接收到对迁移源中一个或多个slot的以slot为单位的数据迁移请求时,将所述数据迁移请求放入待迁移的任务队列中;检测单元720用于通过定时任务检测所述任务队列中是否存在所述数据迁移请求;迁移单元730用于在检测到存在所述数据迁移请求时,异步地将与所述数据迁移请求对应的slot上的待迁移数据发送至迁移目标。
在本公开的一种示例性实施例中,所述数据迁移装置700还包括:状态标识单元,用于对所述待迁移数据的键key的迁移状态进行标识,所述迁移状态包括:未迁移、迁移中、已迁移以及业务请求中,每个所述slot包含有多个所述key。
在本公开的一种示例性实施例中,所述数据迁移装置700还包括:第一标识获取单元,用于在接收到数据删除操作请求时,获取与所述数据删除操作请求对应的数据的迁移状态的标识;第一判断单元,用于基于所述标识判断与所述数据删除操作请求对应的数据是否处于迁移中;标识单元,用于在判定所述数据处于迁移中时,将所述数据标识为已删除;第一日志添加单元,用于添加与所述数据删除操作请求对应的数据操作日志。
在本公开的一种示例性实施例中,所述数据迁移装置700还包括:第二标识获取单元,用于在接收到数据更新操作请求时,获取与所述数据更新操作请求对应的数据的迁移状态的标识;第二判断单元,用于基于所述标识判断与所述数据更新操作请求对应的数据是否处于迁移中;数据类型确定单元,用于在判定所述数据处于迁移中时,确定所述数据的数据类型;数据处理单元,用于基于所述数据的数据类型对所述数据进行处理。
在本公开的一种示例性实施例中,数据处理单元被配置为:在所述数据类型为字符串类型时,通过所述数据更新操作请求中的新数据更新所述数据,并将所述数据标识为删除。
在本公开的一种示例性实施例中,数据处理单元被配置为:在所述数据类型为链表类型时,对与所述数据更新操作请求对应的数据进行互斥处理;在更新操作完成后,解除所述互斥处理并继续对与所述更新操作对应的数据进行迁移处理。
在本公开的一种示例性实施例中,所述数据迁移装置700还包括:第二日志添加单元,用于在所述数据更新操作请求处理完成时,添加与所述数据更新操作请求对应的数据操作日志。
在本公开的一种示例性实施例中,所述数据迁移装置700还包括:第三日志添加单元,用于在接收到数据增加操作请求时,添加与所述数据增加操作请求对应的数据操作日志;第一日志发送单元,用于将所述数据操作日志发送至所述迁移目标。
在本公开的一种示例性实施例中,所述数据迁移装置700还包括:第三标识获取单元,用于在接收到数据操作请求时,获取与所述数据操作请求对应的数据的迁移状态的标识;第三判断单元,用于基于所述标识判断与所述数据操作请求对应的数据是否处于已迁移;第四日志添加单元,用于在判定所述数据处于已迁移时,添加与所述数据操作请求对应的数据操作日志;第二日志发送单元,用于将所述数据操作日志发送至所述迁移目标。
在本公开的一种示例性实施例中,所述数据迁移装置700还包括:数据存储单元,用于将迁移过程中的新增数据保存在目标存储结构中;数据添加单元,用于在打包完所述待迁移数据后通过所述定时任务将所述新增数据添加到对应的slot中。
在本公开的一种示例性实施例中,所述数据迁移700还包括:删除单元,用于在接收到所述迁移目标返回的所述一个或多个slot迁移成功的消息后,删除所述迁移源中对应的slot中的数据。
在本公开的一种示例性实施例中,迁移单元730包括:打包单元,用于通过多线程的方式打包与所述数据迁移请求对应的slot上的待迁移数据;异步迁移单元,用于异步地将所述待迁移数据发送至迁移目标。
示例性介质
在介绍了本发明示例性实施例的装置之后,接下来,对本发明示例性实施例的存储介质进行说明。
在一些实施例中,本发明的各个方面还可以实现为一种介质,其上存储有程序代码,当所述程序代码被设备的处理器执行时用于实现本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施例的数据处理方法中的步骤。
例如,所述设备的处理器执行所述程序代码时可以实现如图2中所述的步骤s210,在接收到对迁移源中一个或多个槽slot的以slot为单位的数据迁移请求时,将所述数据迁移请求放入待迁移的任务队列中;步骤s220,通过定时任务检测所述任务队列中是否存在所述数据迁移请求;步骤s230,在检测到存在所述数据迁移请求时,异步地将与所述数据迁移请求对应的slot上的待迁移数据发送至迁移目标。
参考图8所示,描述了根据本发明的实施例的用于实现上述数据处理方法的程序产品800,其可以采用便携式紧凑盘只读存储器(cd-rom)并包括程序代码,并可以在终端设备,例如个人电脑上运行。然而,本发明的程序产品不限于此。
所述程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。
计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质。
可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如java、c++等,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(lan)或广域网(wan),连接到用户计算设备。
示例性计算设备
在介绍了本发明示例性实施例的数据处理方法、数据处理装置以及存储介质之后,接下来,介绍根据本发明的示例性实施例的电子设备。
所属技术领域的技术人员能够理解,本发明的各个方面可以实现为系统、方法或程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施例、完全的软件实施例(包括固件、微代码等),或硬件和软件方面结合的实施例,这里可以统称为“电路”、“模块”或“系统”。
在一些可能的实施例中,根据本发明的电子设备可以至少包括至少一个处理单元、以及至少一个存储单元。其中,所述存储单元存储有程序代码,当所述程序代码被所述处理单元执行时,使得所述处理单元执行本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施例的数据处理方法中的步骤。例如,所述处理单元可以执行如图2中所示的步骤s210,在接收到对迁移源中一个或多个槽slot的以slot为单位的数据迁移请求时,将所述数据迁移请求放入待迁移的任务队列中;步骤s220,通过定时任务检测所述任务队列中是否存在所述数据迁移请求;步骤s230,在检测到存在所述数据迁移请求时,异步地将与所述数据迁移请求对应的slot上的待迁移数据发送至迁移目标。
下面参照图9来描述根据本发明的示例实施例的电子设备900。图9所示的电子设备900仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图9所示,电子设备900以通用计算设备的形式表现。电子设备900的组件可以包括但不限于:上述至少一个处理单元901、上述至少一个存储单元902、连接不同系统组件(包括存储单元902和处理单元901)的总线903、显示单元907。
总线903表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器、外围总线、图形加速端口、处理器或者使用多种总线结构中的任意总线结构的局域总线。
存储单元902可以包括易失性存储器形式的可读介质,例如随机存取存储器(ram)9021和/或高速缓存存储器9022,还可以进一步包括只读存储器(rom)9023。
存储单元902还可以包括具有一组(至少一个)程序模块9024的程序/实用工具9025,这样的程序模块9024包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
电子设备900也可以与一个或多个外部设备904(例如键盘、指向设备、蓝牙设备等)通信,还可与一个或者多个使得用户能与电子设备900交互的设备通信,和/或与使得电子设备900能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(i/o)接口905进行。并且,电子设备900还可以通过网络适配器906与一个或者多个网络(例如局域网(lan),广域网(wan)和/或公共网络,例如因特网)通信。如图所示,网络适配器906通过总线903与电子设备900的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备900使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、raid系统、磁带驱动器以及数据备份存储系统等。
应当注意,尽管在上文详细描述中提及了数据处理装置的若干单元/模块或子单元/模块,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本发明的实施例,上文描述的两个或更多单元/模块的特征和功能可以在一个单元/模块中具体化。反之,上文描述的一个单元/模块的特征和功能可以进一步划分为由多个单元/模块来具体化。
此外,尽管在附图中以特定顺序描述了本发明方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
虽然已经参考若干具体实施例描述了本发明的精神和原理,但是应该理解,本发明并不限于所公开的具体实施例,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本发明旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。