技术领域
[0001] 本说明书实施例涉及数据库技术领域,具体地,涉及数据库数据迁移方法和数据库。
相关背景技术
[0002] 目前,分布式数据库中通常存放有大量的数据,该数据可以包括但不限于隐私数据。在分布式数据库中,通常会因负载均衡或容灾恢复的需求,将数据库节点上的部分或全部数据迁移到其他数据库节点上。由于迁移过程中涉及数据的物理拷贝,这势必会耗费较多的数据迁移时间。
[0003] 因此,迫切需要一种合理、可靠的方案,可以实现快速数据迁移。
具体实施方式
[0018] 下面结合附图和实施例对本说明书作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0019] 需要说明的是,为了便于描述,附图中仅示出了与有关发明相关的部分。在不冲突的情况下,本说明书中的实施例及实施例中的特征可以相互组合。
[0020] 如前所述,在分布式数据库中,通常会因负载均衡或容灾恢复的需求,将数据库节点上的部分或全部数据迁移到其他数据库节点上。由于迁移过程中涉及数据的物理拷贝,这势必会耗费较多的数据迁移时间。基于此,本说明书的一些实施例提供了数据库数据迁移方法,可以实现快速数据迁移。
[0021] 参看图1,其为本说明书实施例中的数据库的结构示意图。如图1所示,该数据库具有计算存储分离架构,并包括多个数据库节点(例如图1中示出的数据库节点1、数据库节点2、…、数据库节点N)。其中,N可以是大于1的自然数。在该计算存储分离架构下,该多个数据库节点均具有利用外部存储资源存储数据的能力。另外,该多个数据库节点均可以用于对其存储至外部存储资源上的数据进行计算处理。
[0022] 具体地,该多个数据库节点中任意的数据库节点,例如数据库节点1,可以通过网络将待存储的目标数据存储至外部存储资源。该目标数据在外部存储资源上以元数据块(Meta Block)和数据块(Data Block)的结构进行存储。该元数据块中的元数据用来描述和索引对应的数据。其中,图1中示出的元数据块A和其对应的若干数据块可以位于外部存储资源中,元数据块A可以存放有该目标数据中的元数据,该若干数据块可以存放有该目标数据中对应于该元数据的数据。
[0023] 实践中,在外部存储资源中可以使用块(如2M(Megabytes,兆字节)大小的块)来存放元数据和数据。其中,元数据可以理解为数据的数据,其大小远远小于对应的数据的大小。存放数据的块可称为数据块,存放元数据的块可称为元数据块。通常,一个元数据块可以对应若干数据块,该元数据块存放有其对应的若干数据块各自存放的数据的元数据。
[0024] 进一步地,外部存储资源中还可以包括超级块(Super Block)。在外部存储资源中,可以将多个元数据块以链表的形式串联在一起,并将链表的头结点记录在超级块中,方便进程启动加载。其中,该头结点例如可以指示出其对应的元数据块,针对该元数据块对应的数据块的描述信息,以及该元数据块的下一元数据块,等等。该描述信息例如可以包括数据块数量和/或块标识范围,等等。
[0025] 当数据库节点1存储至外部存储资源上的目标数据需要迁移到数据库节点2时,例如因需要对数据库节点1进行负载均衡或容灾恢复等原因而需要迁移时,数据库节点2可以获取该目标数据的元数据,并将其加载到内存,从而基于该元数据接管其对应的数据。
[0026] 采用此种数据迁移方式,可以避免数据的物理拷贝,只向用于迁入数据的数据库节点传递必要的元数据,大大节省了数据迁移时间,实现了快速数据迁移。
[0027] 下面,结合具体的实施例,描述上述方法的具体实施步骤。
[0028] 参看图2,其示出了数据库数据迁移方法的一个实施例的流程200。其中,该数据库具有计算存储分离架构,并且包括第一数据库节点(例如前文中的数据库节点1)和第二数据库节点(例如前文中的数据库节点2),第一数据库节点和第二数据库节点均具有利用外部存储资源存储数据的能力。该方法包括以下步骤:步骤202,第一数据库节点接收数据存储请求,通过网络将待存储的目标数据存储至外部存储资源,目标数据在外部存储资源上以元数据块和数据块的结构进行存储;元数据块中的元数据用来描述和索引对应的数据;
步骤204,当该外部存储资源上的目标数据需要迁移到第二数据库节点时,第二数据库节点获取目标数据的元数据,并将其加载到内存,从而基于该元数据接管其对应的数据。
[0029] 下面,对步骤202‑204做进一步说明。
[0030] 在步骤202中,第一数据库节点可以接收数据存储请求,该数据存储请求可以包括待存储的目标数据。目标数据例如可以包括数据和该数据的元数据。之后,第一数据库节点可以通过网络将目标数据存储至外部存储资源,目标数据在外部存储资源上以元数据块和数据块的结构进行存储。该元数据块中的元数据用来描述和索引对应的数据。
[0031] 在步骤204中,当外部存储资源上的目标数据需要迁移到第二数据库节点时,第二数据库节点可以获取目标数据的元数据,例如基于目标数据的元数据地址获取元数据,或者基于外部存储资源上的目标元数据块的块标识获取元数据,该目标元数据块是存放有目标数据的元数据的元数据块。之后,第二数据库节点可以将获取到的元数据加载到内存,从而基于该元数据接管其对应的数据。其中,该元数据地址例如可以包括该外部存储资源的网络位置,以及该目标元数据块在该外部存储资源中所处的位置等。
[0032] 实践中,第二数据库节点在获取目标数据的元数据之前,可以接收数据接管消息,该数据接管消息可以包括目标数据的元数据地址,或者上述目标数据块的块标识。进一步地,该数据接管消息还可以包括第一数据库节点的标识。
[0033] 举例来说,数据库还可以包括用于数据迁移控制的控制节点,该控制节点可以是软件单元,或者数据库节点等,在此不做具体限定。第二数据库节点所接收的数据接管消息,可以是该控制节点发送的。具体地,该控制节点中可以保存有数据迁移策略,该控制节点可以基于数据迁移策略,决策出需要进行数据迁移的第一数据库节点,第一数据库节点需要迁出的目标数据,以及用于迁入目标数据的第二数据库节点。之后,该控制节点可以基于决策结果,向第二数据库节点发送数据接管消息。
[0034] 下面,以目标数据的元数据地址为例,介绍第二数据库节点采用的元数据获取过程。
[0035] 在一个例子中,第二数据库节点可以基于目标数据的元数据地址从外部存储资源获取元数据。需要指出,无论第一数据库节点是否发生宕机等故障,第二数据库节点都可以采用此种元数据获取过程。
[0036] 在另一个例子中,第一数据库节点可以保存有目标数据的元数据,以及存储于外部存储资源上的该元数据的元数据地址。在第一数据库节点能正常通信的情况下,第二数据库节点可以向第一数据库节点发送数据迁移消息,该数据迁移消息可以包括该元数据地址。之后,第二数据库节点可以从第一数据库节点接收关联于该元数据地址的元数据。
[0037] 在一个实施例中,数据库还可以包括第一数据库节点和第二数据库节点各自对应的存储引擎,该存储引擎具有与外部存储资源进行通信的能力。其中,存储引擎可以位于对应的数据库节点中,也可以独立于对应的数据库节点,在此不做具体限定。当存储引擎独立于数据库节点时,存储引擎可以对应一个或多个数据库节点。在一个例子中,存储引擎可以采用LSM‑Tree(Log Structured Merge Tree,日志结构合并树)存储架构。
[0038] 基于此,在步骤202中,第一数据库节点可以向对应的存储引擎发送待存储的目标数据,以使得该存储引擎通过网络将待存储的目标数据存储至外部存储资源。相应的,在步骤204中,当该外部存储资源上的目标数据需要迁移到第二数据库节点时,第二数据库节点可以经由对应的存储引擎获取目标数据的元数据,如经由对应的存储引擎基于目标数据的元数据地址从外部存储资源获取元数据;或者,经由对应的存储引擎向第一数据库节点发送数据迁移消息,从而从第一数据库节点接收关联于该元数据地址的元数据。之后,第二数据库节点可以将获取到的元数据加载到内存,从而基于该元数据接管其对应的数据。
[0039] 需要说明,基于上述目标数据块的块标识的元数据获取过程,可以根据前文中描述的基于目标数据的元数据地址的元数据获取过程类推得到,在此不再举例说明。
[0040] 图2对应的实施例提供的数据库数据迁移方案,可以避免数据的物理拷贝,只向用于迁入数据的数据库节点传递必要的元数据,大大节省了数据迁移时间,实现了快速数据迁移。
[0041] 实践中,图2对应的实施例提供的数据库数据迁移方案,可以应用于负载均衡、容灾恢复等场景,以实现快速负载均衡、快速容灾恢复等功能。
[0042] 下面,先介绍数据库数据迁移方案在负载均衡场景中的应用。
[0043] 在负载均衡场景中,第一数据库节点存储至外部存储资源上的目标数据,由第一数据库节点负责计算处理。为了减轻第一数据库节点的计算压力,可以将外部存储资源上的目标数据迁移到第二数据库节点。第二数据库节点可以获取目标数据的元数据,并将其加载到内存,从而基于该元数据接管其对应的数据。
[0044] 其中,第二数据库节点可以采用多种元数据获取方式。
[0045] 在一个例子中,第一数据库节点保存有目标数据的元数据,以及存储于外部存储资源上的该元数据的元数据地址。在第一数据库节点能正常通信的情况下,第二数据库节点可以向第一数据库节点发送数据迁移消息,该数据迁移消息包括该元数据地址。之后,第二数据库节点可以从第一数据库节点接收关联于该元数据地址的元数据。
[0046] 进一步地,数据库还可以包括第二数据库节点对应的存储引擎,第二数据库节点可以由对应存储引擎通知第一数据库节点进行数据迁移,从而使得第一数据库节点向第二数据库节点发送关联于上述元数据地址的元数据。具体地,第二数据库节点可以采用如图3示出的元数据获取过程。
[0047] 参看图3,其是负载均衡场景下元数据获取过程的一个示意图。该元数据获取过程包括以下步骤:步骤302,第二数据库节点向对应的存储引擎发送第二数据接管消息,其中包括目标数据的元数据地址,以及第一数据库节点和第二数据库节点各自的标识;步骤304,第二数据库节点对应的存储引擎向第一数据库节点发送数据迁移消息,数据迁移消息包括上述元数据地址和第二数据库节点的标识;步骤306,第一数据库节点将其保存的关联于上述元数据地址的元数据发送至第二数据库节点。
[0048] 需要指出,第一数据库节点在将其保存的关联于上述元数据地址的元数据发送至第二数据库节点之后,可以删除本地保存的该元数据。如此,第一数据库节点便不再具有针对该元数据对应的数据的计算处理权限。
[0049] 作为一种可选的实现方式,外部存储资源中可以保存有第一数据库节点的日志文件。实践中,当第一数据库节点负责的元数据需要变更时,通常先往第一数据库节点的日志文件中写入相应的元数据变更日志,而后在满足一定条件时(例如当前时间到达设定的元数据更新时间,或者,对应的元数据尚未更新的元数据变更日志的条数达到设定条数等),根据元数据变更日志进行元数据更新。
[0050] 为了使得第二数据库节点获得最新的元数据,第一数据库节点可以先确定本地保存的关联于上述元数据地址的元数据是否需要更新。
[0051] 例如,关联于上述元数据地址的元数据所在的目标元数据块,可以配置有用于指示其是否需要进行元数据更新的标记信息,可以基于该标记信息确定目标元数据块是否需要进行元数据更新。若确定目标元数据块需要进行元数据更新,则第一数据库节点可以经由对应的存储引擎,从外部存储资源获取第一数据库节点的日志文件。而后,第一数据库节点可以基于日志文件对本地保存的关联于上述元数据地址的元数据进行更新。然后,第一数据库节点可以将更新后的元数据发送至第二数据库节点。
[0052] 再例如,第一数据库节点可以先经由对应的存储引擎,从外部存储资源获取第一数据库节点的日志文件。而后,第一数据库节点可以基于日志文件,确定关联于上述元数据地址的元数据是否需要进行更新。若确定该元数据需要进行更新,则第一数据库节点可以基于日志文件对本地保存的该元数据进行更新,并将更新后的元数据发送至第二数据库节点。
[0053] 为了确保元数据的一致性,第一数据库节点在对本地保存的关联于上述元数据地址的元数据进行更新后,还可以将本次更新的元数据同步至外部存储资源上的目标元数据块中。
[0054] 通过采用图3示出的元数据获取过程,可以在整个数据库数据迁移过程中避免数据的物理拷贝,只在数据库节点间传递必要的元数据,大大节省了负载均衡的时间,实现了快速负载均衡。
[0055] 以上基于一个例子介绍了负载均衡场景下可采用的元数据获取方式。在另一个例子中,第二数据库节点还可以采用其他的元数据获取方式。例如,第二数据库节点可以基于目标数据的元数据地址从外部存储资源获取元数据。
[0056] 进一步地,第二数据库节点可以经由对应的存储引擎,基于上述元数据地址从外部存储资源获取元数据。其中,此种元数据获取方式与下文中图5对应的实施例涉及的元数据获取方式类似,具体实现细节可参考图5对应的实施例中的相关说明。需要指出,在采用此种元数据方式的情况下,该存储引擎在将元数据返回给第二数据库节点之后,可以向第一数据库节点发送针对该元数据的删除消息,以使得第一数据库节点删除本地保存的该元数据。
[0057] 前文中介绍了数据库数据迁移方案在负载均衡场景中的应用。下面,接着介绍该方案在容灾恢复场景中的应用。
[0058] 在容灾恢复场景中,第一数据库节点存储至外部存储资源上的目标数据,由第一数据库节点负责计算处理。当第一数据库节点发生宕机等故障时,为了确保数据库的稳定性,需要针对第一数据库节点进行快速容灾恢复,例如将外部存储资源上的该目标数据迁移到正常工作的一个或多个第二数据库节点。
[0059] 实践中,为了避免给第二数据库节点带来较大的计算压力,可以由多个第二数据库节点并发接管目标数据中的不同数据。作为示例,假设第一数据库节点为如图4中所示的数据库节点1,目标数据中的元数据分布在如图4中所示的元数据块A和元数据块B中,元数据块A和元数据块B各自对应的若干数据块中存放有目标数据中的数据,该多个第二数据库节点包括如图4中所示的数据库节点2和数据库节点3。其中,图4是容灾恢复场景下数据迁移过程的一个示意图。在进行容灾恢复时,例如可以将元数据块A中的元数据传递至数据库节点2,以使得数据库节点2接管该元数据对应的数据,以及将元数据块B中的元数据传递至数据库节点3,以使得数据库节点3接管该元数据对应的数据。
[0060] 由于第一数据库节点发生故障,无法与第二数据库节点进行通信,因而第二数据库节点可以从外部存储资源获取目标数据的元数据,并将其加载到内存,从而基于该元数据接管其对应的数据。
[0061] 在一个例子中,第二数据库节点可以基于目标数据的元数据地址从外部存储资源获取元数据。
[0062] 进一步地,第二数据库节点可以经由对应的存储引擎,基于目标数据的元数据地址从外部存储资源获取元数据。具体地,第二数据库节点可以采用如图5中所示的元数据获取过程。
[0063] 参看图5,其为容灾恢复场景下元数据获取过程的一个示意图。该元数据获取过程包括以下步骤:步骤502,第二数据库节点向对应的存储引擎发送第一数据接管消息,其中包括目标数据的元数据地址;步骤504,第二数据库节点对应的存储引擎基于元数据地址从外部存储资源获取元数据;步骤506,第二数据库节点对应的存储引擎向第二数据库节点返回元数据。
[0064] 需要指出,第一数据接管消息中的元数据地址,可以是目标数据中全部或部分元数据的地址。
[0065] 作为一种可选的实现方式,外部存储资源中可以存放有第一数据库节点的日志文件。这里,关于日志文件的解释,可参考前文中的相关说明,在此不再赘述。
[0066] 为了使得第二数据库节点获得最新的元数据,第二数据库节点对应的存储引擎可以先确定关联于上述元数据地址的元数据是否需要更新。
[0067] 例如,该元数据所在的目标元数据块可以配置有用于指示其是否需要进行元数据更新的标记信息,可以基于该标记信息确定目标元数据块是否需要进行元数据更新。若确定目标元数据块需要进行元数据更新,则该存储引擎可以从外部存储资源获取第一数据库节点的日志文件。而后,该存储引擎可以基于日志文件对基于上述元数据地址获取的元数据进行更新。然后,该存储引擎可以将更新后的元数据发送至第二数据库节点。
[0068] 再例如,该存储引擎可以先从外部存储资源获取第一数据库节点的日志文件。而后,存储引擎可以基于日志文件,确定基于上述元数据地址获取的元数据是否需要进行更新。若确定该元数据需要进行更新,则该存储引擎可以基于日志文件对该元数据进行更新,并将更新后的元数据发送至第二数据库节点。
[0069] 为了确保元数据的一致性,该存储引擎在对获取到的元数据进行更新后,还可以将本次更新的元数据同步至外部存储资源上的目标元数据块中。
[0070] 通过采用图5示出的元数据获取过程,可以在整个数据库数据迁移过程中避免数据的物理拷贝,只向用于迁入数据的数据库节点传递必要的元数据,大大节省了容灾恢复的时间,实现了快速容灾恢复。
[0071] 在一个实施例中,外部存储资源可以包括分布式块存储资源和分布式文件存储资源,前文中描述的目标数据可以具体存储于分布式块存储资源中,日志文件可以具体存储于分布式文件存储资源中。其中,分布式块存储资源中包括如前所述的数据块、元数据块和超级块。
[0072] 进一步地,前文中描述的存储引擎可以具有支持不同分布式块存储资源调用的第一接口,外部存储资源中的分布式块存储资源可以通过第一接口接入存储引擎。另外,存储引擎还可以具有支持不同分布式文件存储资源调用的第二接口,外部存储资源中的分布式文件存储资源可以通过第二接口接入存储引擎。
[0073] 应该理解,第一接口和第二接口均是统一的存储引擎接口。第一接口可以使得存储引擎方便快捷地对接不同的分布式块存储资源,第二接口可以使得存储引擎方便快捷地对接不同的分布式文件存储资源,能提升存储引擎的普适性。
[0074] 根据前文中的描述,可以看出,本说明书的上述实施例提供的数据库数据迁移方法,可以采用能适用于LSM‑Tree、面向云原生的计算存储分离架构,而且能够达到以下技术效果:基于通用的分布式块存储资源,成本更低,适用性更加广泛;基于数据分区功能和paxos一致性协议,不需要处理复杂的写入冲突逻辑,同步代价小;大数据量下的秒级快速负载均衡和容灾恢复。
[0075] 本说明书实施例还提供了一种数据库,该数据库具有计算存储分离架构,并且包括第一数据库节点和第二数据库节点,第一数据库节点和第二数据库节点均具有利用外部存储资源存储数据的能力;第一数据库节点,被配置成接收数据存储请求,通过网络将待存储的目标数据存储至外部存储资源,目标数据在外部存储资源上以元数据块和数据块的结构进行存储;该元数据块中的元数据用来描述和索引对应的数据;第二数据库节点,被配置成当该外部存储资源上的目标数据需要迁移到第二数据库节点时,获取目标数据的元数据,并将其加载到内存,从而基于该元数据接管其对应的数据。
[0076] 关于该数据库的具体实现细节和有益效果,可参考前文中方法实施例的相关说明,在此不再赘述。
[0077] 本领域技术人员应该可以意识到,在上述一个或多个示例中,本说明书披露的多个实施例所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。
[0078] 在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
[0079] 以上所述的具体实施方式,对本说明书披露的多个实施例的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本说明书披露的多个实施例的具体实施方式而已,并不用于限定本说明书披露的多个实施例的保护范围,凡在本说明书披露的多个实施例的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本说明书披露的多个实施例的保护范围之内。