CN118170717A - 一种数据迁移方法、装置、电子设备及存储介质 - Google Patents

一种数据迁移方法、装置、电子设备及存储介质 Download PDF

Info

Publication number
CN118170717A
CN118170717A CN202410275575.8A CN202410275575A CN118170717A CN 118170717 A CN118170717 A CN 118170717A CN 202410275575 A CN202410275575 A CN 202410275575A CN 118170717 A CN118170717 A CN 118170717A
Authority
CN
China
Prior art keywords
target
file
directory
queue
migrated
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202410275575.8A
Other languages
English (en)
Inventor
张威
郝振
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Inspur Jinan data Technology Co ltd
Original Assignee
Inspur Jinan data Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Inspur Jinan data Technology Co ltd filed Critical Inspur Jinan data Technology Co ltd
Priority to CN202410275575.8A priority Critical patent/CN118170717A/zh
Publication of CN118170717A publication Critical patent/CN118170717A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/11File system administration, e.g. details of archiving or snapshots
    • G06F16/119Details of migration of file systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明涉及计算机技术领域,公开了一种数据迁移方法、装置、电子设备及存储介质,包括:将数据迁移源文件目录作为根目录;基于主线程扫描根目录,得到根目录下一层级的所有子目录和子文件;将子目录添加至待扫描目录队列,将子文件添加至待迁移文件队列;基于目标线程遍历待扫描目录队列将目标线程扫描到的子目录添加至待扫描目录队列,将目标线程扫描到的子文件添加至待迁移文件队列,并返回至在预设线程池中调用若干个目标线程,基于目标线程遍历待扫描目录队列的步骤。通过引入了多线程并发扫描的机制,维护一个待扫描目录队列,可同时从纵向和横向两个方向逐层递进遍历扫描整个目录结构,提高了文件扫描效率,为提高数据迁移效率奠定了基础。

Description

一种数据迁移方法、装置、电子设备及存储介质
技术领域
本申请涉及计算机技术领域,尤其涉及一种数据迁移方法、装置、电子设备及存储介质。
背景技术
当今信息技术飞速发展,带来海量数据的快速增长,各种存储技术更新换代,数据迁移是当今信息技术领域的一个充满挑战的任务,用于将数据从一个存储位置或系统迁移到另一个存储位置或系统。其中,文件扫描是数据迁移过程中不可或缺的步骤,文件扫描效率将直接影响数据迁移效率,因此如何进行文件扫描成为了重点研究内容。
在相关技术中,通常由根节点出发,向下递归扫描整个文件目录结构,如果目录结构很大,会粗略拆分成几个小目录,然后分别几个小目录作为根节点,递归遍历整个目录结构,最终扫描得到文件数据。
但是,在海量小文件场景下,如果目录结构较大,上述方法将导致递归深度非常大,甚至发生堆栈内存溢出的情况,降低了文件扫描效率,也就不利于保证数据迁移效率。
发明内容
本申请提供一种数据迁移方法、装置、电子设备及存储介质,以解决相关技术降低了文件扫描效率,也就不利于保证数据迁移效率等缺陷。
本申请第一个方面提供一种数据迁移方法,包括:
获取数据迁移源文件目录,并将所述数据迁移源文件目录作为根目录;
基于主线程扫描所述根目录,得到根目录下一层级的所有子目录和子文件;
将所述子目录添加至待扫描目录队列,将所述子文件添加至待迁移文件队列;
在预设线程池中调用若干个目标线程,基于所述目标线程遍历所述待扫描目录队列;
将所述目标线程扫描到的子目录添加至所述待扫描目录队列,将所述目标线程扫描到的子文件添加至所述待迁移文件队列,并返回至所述在预设线程池中调用若干个目标线程,基于所述目标线程遍历所述待扫描目录队列的步骤,直至所述待扫描目录队列为空;
将所述待迁移文件队列中的所有子文件,迁移至目标地址。
在一种可选的实施方式中,所述在预设线程池中调用若干个目标线程,基于所述目标线程遍历所述待扫描目录队列,包括:
获取所述待扫描目录队列中各子目录的子元素个数;
根据各所述子目录的子元素个数,对所述子目录进行分类处理,以确定各所述子目录的分类结果;其中,当所述子目录的分类结果至少包括第一类别和第二类别,所述第一类别的子目录的子元素个数大于所述第二类别的子目录的子元素个数;
针对任一所述子目录,在该子目录的分类结果为第一类别的情况下,在第一线程池调用当前处于空闲状态的第一目标线程,以基于所述第一目标线程扫描该子目录;
在该子目录的分类结果为第二类别的情况下,在第二线程池调用当前处于空闲状态的第二目标线程,以基于所述第二目标线程扫描该子目录;
其中,所述预设线程池包括第一线程池和第二线程池,所述第一线程池包括若干个第一目标线程,所述第二线程池包括若干个第二目标线程,所述第一目标线程的扫描耗时大于所述第二目标线程的扫描耗时。
在一种可选的实施方式中,所述根据各所述子目录的子元素个数,对所述子目录进行分类处理,以确定各所述子目录的分类结果,包括:
针对任一所述子目录,在该子目录的元素个数达到预设元素个数阈值的情况下,确定该子目录的分类结果为第一类别;
在该子目录的元素个数未达到预设元素个数阈值的情况下,确定该子目录的分类结果为第二类别。
在一种可选的实施方式中,所述将所述待迁移文件队列中的所有子文件,迁移至目标地址,包括:
根据所述待迁移文件队列中各子文件的文件数据类型,在所述待迁移文件队列中筛选目标子文件;
根据所述目标子文件的特征信息,判断所述目标子文件是否为待压缩文件;
在所述目标子文件为待压缩文件的情况下,对所述目标子文件进行压缩处理,得到目标压缩子文件;
将所述目标压缩子文件,迁移至目标地址。
在一种可选的实施方式中,所述根据所述目标子文件的特征信息,判断所述目标子文件是否为待压缩文件,包括:
根据所述目标子文件的特征信息,确定所述目标子文件的实际磁盘占用空间值和元数据表征的数据大小;
根据所述实际磁盘占用空间值与所述数据大小之间的比值,判断所述目标子文件是否为稀疏文件;
在所述目标子文件为稀疏文件的情况下,确定所述目标子文件为待压缩文件。
在一种可选的实施方式中,所述方法还包括:
获取所述待迁移文件队列中各子文件的属性信息;
将各所述子文件的属性信息保存至预设数据库;
在进行增量迁移过程中,在所述预设数据库中读取已迁移子文件的属性信息;
针对任一所述已迁移子文件,根据所述已迁移子文件的属性信息,判断该已迁移子文件是否为待增量迁移子文件;
在该已迁移子文件为待增量迁移子文件情况下,按照所述属性信息进行增量迁移操作。
在一种可选的实施方式中,所述属性信息至少包括文件大小、修改时间、哈希检验码和文件路径名,所述根据所述已迁移子文件的属性信息,判断该已迁移子文件是否为待增量迁移子文件,包括:
获取所述已迁移子文件的最新属性信息;
根据所述最新属性信息与从所述预设数据库中读取到的属性信息之间的对比结果,判断该已迁移子文件是否写入新数据;
在确定所述已迁移子文件是否写入新数据的情况下,确定该已迁移子文件为待增量迁移子文件。
本申请第二个方面提供一种数据迁移装置,包括:
获取模块,用于获取数据迁移源文件目录,并将所述数据迁移源文件目录作为根目录;
第一扫描模块,用于基于主线程扫描所述根目录,得到根目录下一层级的所有子目录和子文件;
管理模块,用于将所述子目录添加至待扫描目录队列,将所述子文件添加至待迁移文件队列;
第二扫描模块,用于在预设线程池中调用若干个目标线程,基于所述目标线程遍历所述待扫描目录队列;
更新模块,用于将所述目标线程扫描到的子目录添加至所述待扫描目录队列,将所述目标线程扫描到的子文件添加至所述待迁移文件队列,并返回至所述在预设线程池中调用若干个目标线程,基于所述目标线程遍历所述待扫描目录队列的步骤,直至所述待扫描目录队列为空;
迁移模块,用于将所述待迁移文件队列中的所有子文件,迁移至目标地址。
在一种可选的实施方式中,所述第二扫描模块,具体用于:
获取所述待扫描目录队列中各子目录的子元素个数;
根据各所述子目录的子元素个数,对所述子目录进行分类处理,以确定各所述子目录的分类结果;其中,当所述子目录的分类结果至少包括第一类别和第二类别,所述第一类别的子目录的子元素个数大于所述第二类别的子目录的子元素个数;
针对任一所述子目录,在该子目录的分类结果为第一类别的情况下,在第一线程池调用当前处于空闲状态的第一目标线程,以基于所述第一目标线程扫描该子目录;
在该子目录的分类结果为第二类别的情况下,在第二线程池调用当前处于空闲状态的第二目标线程,以基于所述第二目标线程扫描该子目录;
其中,所述预设线程池包括第一线程池和第二线程池,所述第一线程池包括若干个第一目标线程,所述第二线程池包括若干个第二目标线程,所述第一目标线程的扫描耗时大于所述第二目标线程的扫描耗时。
在一种可选的实施方式中,所述第二扫描模块,具体用于:
针对任一所述子目录,在该子目录的元素个数达到预设元素个数阈值的情况下,确定该子目录的分类结果为第一类别;
在该子目录的元素个数未达到预设元素个数阈值的情况下,确定该子目录的分类结果为第二类别。
在一种可选的实施方式中,所述迁移模块,具体用于:
根据所述待迁移文件队列中各子文件的文件数据类型,在所述待迁移文件队列中筛选目标子文件;
根据所述目标子文件的特征信息,判断所述目标子文件是否为待压缩文件;
在所述目标子文件为待压缩文件的情况下,对所述目标子文件进行压缩处理,得到目标压缩子文件;
将所述目标压缩子文件,迁移至目标地址。
在一种可选的实施方式中,所述迁移模块,具体用于:
根据所述目标子文件的特征信息,确定所述目标子文件的实际磁盘占用空间值和元数据表征的数据大小;
根据所述实际磁盘占用空间值与所述数据大小之间的比值,判断所述目标子文件是否为稀疏文件;
在所述目标子文件为稀疏文件的情况下,确定所述目标子文件为待压缩文件。
在一种可选的实施方式中,所述装置还包括:增量迁移模块,用于:
获取所述待迁移文件队列中各子文件的属性信息;
将各所述子文件的属性信息保存至预设数据库;
在进行增量迁移过程中,在所述预设数据库中读取已迁移子文件的属性信息;
针对任一所述已迁移子文件,根据所述已迁移子文件的属性信息,判断该已迁移子文件是否为待增量迁移子文件;
在该已迁移子文件为待增量迁移子文件情况下,按照所述属性信息进行增量迁移操作。
在一种可选的实施方式中,所述属性信息至少包括文件大小、修改时间、哈希检验码和文件路径名,所述增量迁移模块,具体用于:
获取所述已迁移子文件的最新属性信息;
根据所述最新属性信息与从所述预设数据库中读取到的属性信息之间的对比结果,判断该已迁移子文件是否写入新数据;
在确定所述已迁移子文件是否写入新数据的情况下,确定该已迁移子文件为待增量迁移子文件。
本申请第三个方面提供一种电子设备,包括:至少一个处理器和存储器;
所述存储器存储计算机执行指令;
所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如上第一个方面以及第一个方面各种可能的设计所述的方法。
本申请第四个方面提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如上第一个方面以及第一个方面各种可能的设计所述的方法。
本申请技术方案,具有如下优点:
本申请提供一种数据迁移方法、装置、电子设备及存储介质,该方法包括:获取数据迁移源文件目录,并将数据迁移源文件目录作为根目录;基于主线程扫描根目录,得到根目录下一层级的所有子目录和子文件;将子目录添加至待扫描目录队列,将子文件添加至待迁移文件队列;在预设线程池中调用若干个目标线程,基于目标线程遍历待扫描目录队列将目标线程扫描到的子目录添加至待扫描目录队列,将目标线程扫描到的子文件添加至待迁移文件队列,并返回至在预设线程池中调用若干个目标线程,基于目标线程遍历待扫描目录队列的步骤,直至待扫描目录队列为空;将待迁移文件队列中的所有子文件,迁移至目标地址。上述方案提供的方法,通过引入了多线程并发扫描的机制,维护一个待扫描目录队列,可同时从纵向和横向两个方向逐层递进遍历扫描整个目录结构,提高了文件扫描效率,为提高数据迁移效率奠定了基础。
附图说明
为了更清楚地说明本申请实施例或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1为本申请实施例基于的数据迁移方法系统的结构示意图;
图2为本申请实施例提供的数据迁移方法的流程示意图;
图3为本申请实施例提供的目录结构示意图;
图4为本申请实施例提供的目录扫描流程示意图;
图5为本申请实施例提供的增量迁移流程示意图;
图6为本申请实施例提供的数据迁移装置的结构示意图;
图7为本申请实施例提供的电子设备的结构示意图;
通过上述附图,已示出本申请明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本公开构思的范围,而是通过参考特定实施例为本领域技术人员说明本申请的概念。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
此外,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。在以下各实施例的描述中,“多个”的含义是两个以上,除非另有明确具体的限定。
在相关技术中,当今信息技术飞速发展,带来海量数据的快速增长,各种存储技术更新换代,数据迁移是当今信息技术领域的一个充满挑战的任务,用于将数据从一个存储位置或系统迁移到另一个位置或系统。无论是数据迁移、备份、系统升级还是数据整合,文件目录扫描都是不可或缺的步骤。由于数据迁移工具属于第三方,源端和目标端相对都是封闭的黑盒,采用规范协议进行数据读写时高效率识别、分析和记录源文件系统中的数据,尤其是海量小文件场景,成为了业界难题。通常,对于文件目录的扫描通常由根节点出发,向下递归扫描整个文件目录结构,如果目录结构很大,会粗略拆分成几个小目录,然后分别几个小目录作为根节点,递归遍历整个目录结构,最终扫描得到文件数据。如果目录结构很大,现有方法会导致递归深度非常大,会产生堆栈内存溢出。在海量小文件场景下,特别是在迁移第三方存储数据时,无法直接读取系统的文件结构元数据,只能通过遍历的方式读取数据,现有的文件扫描方法就会出现效率上的瓶颈,影响整体迁移的速度。
针对上述问题,本申请实施例提供一种数据迁移方法、装置、电子设备及存储介质,该方法包括:获取数据迁移源文件目录,并将数据迁移源文件目录作为根目录;基于主线程扫描根目录,得到根目录下一层级的所有子目录和子文件;将子目录添加至待扫描目录队列,将子文件添加至待迁移文件队列;在预设线程池中调用若干个目标线程,基于目标线程遍历待扫描目录队列将目标线程扫描到的子目录添加至待扫描目录队列,将目标线程扫描到的子文件添加至待迁移文件队列,并返回至在预设线程池中调用若干个目标线程,基于目标线程遍历待扫描目录队列的步骤,直至待扫描目录队列为空;将待迁移文件队列中的所有子文件,迁移至目标地址。上述方案提供的方法,通过引入了多线程并发扫描的机制,维护一个待扫描目录队列,可同时从纵向和横向两个方向逐层递进遍历扫描整个目录结构,提高了文件扫描效率,为提高数据迁移效率奠定了基础。
下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本发明实施例进行描述。
首先,对本申请所基于的数据迁移系统的结构进行说明:
本申请实施例提供的数据迁移方法、装置、电子设备及存储介质,适用于将待迁移数据从源端迁移至目标端。如图1所示,为本申请实施例基于的数据迁移系统的结构示意图,主要包括源端、目标端及数据迁移装置。该装置用于对待迁移文件在源端的数据迁移源文件目录进行扫描,在扫描得到所有待迁移的子文件后,依次将所有子文件迁移至目标端上的目标地址。
本申请实施例提供了一种数据迁移方法,用于将待迁移数据从源端迁移至目标端,该方法以单个目录以及其下一层的所有子元素作为扫描处理的最小结构,对大目录结构进行切割划分扫描,结合多线程技术,可以做到一边在横向上遍历扫描目录下的文件数据,另一边在纵向上向目录树更深层次递进扫描。本申请实施例的执行主体为电子设备,比如服务器、台式电脑、笔记本电脑、平板电脑及其他可用于进行数据迁移的电子设备。
如图2所示,为本申请实施例提供的数据迁移方法的流程示意图,该方法包括:
步骤201,获取数据迁移源文件目录,并将数据迁移源文件目录作为根目录。
其中,数据迁移源文件目录即为待迁移文件在源端的文件目录。
步骤202,基于主线程扫描根目录,得到根目录下一层级的所有子目录和子文件。
具体地,基于主线程对最顶层的根目录进行纵向扫描,得到根目录下一层级的所有子目录和子文件。
步骤203,将子目录添加至待扫描目录队列,将子文件添加至待迁移文件队列。
需要说明的是,由于子目录下还包括下一级的子目录及子文件,因此需要对子目标进行进一步的扫描。
具体地,将待扫描的子目录添加至待扫描目录队列,以供后续流程进行扫描。将子文件添加至待迁移文件队列,以等待迁移。
步骤204,在预设线程池中调用若干个目标线程,基于目标线程遍历待扫描目录队列。
需要说明的是,预设线程池包括多个线程,各线程可以并行运行,以实现多个子目录的并行扫描。
具体地,为了高效地管理和迁移海量小文件数据,本申请实施采用了一种自动拆分目录结构的扫描方法。这个方法的起点是数据迁移源文件目录,将其视为根节点,并从顶层开始分别从纵向和横向两个方向逐层递进遍历扫描,确保能够全面地涵盖数据源目录树的每个节点。其扫描规则为单个扫描线程只会遍历处理目录下一层的所有元素,不会处理更深层次的目录/文件,扫描处理完一个目录后再从待扫描目录队列中获取新的目录进行扫描处理。
具体地,如图3所示,为本申请实施例提供的目录结构示意图,rootDir即为根目录,dir1、dir2......dirN为根目录下一层级的子目录,file1,file2......fileN为根目录下一层级的子文件,将子目录dir1、dir2......dirN放入待扫描目录队列,将子文件file1、file2......fileN放入待迁移文件队列,直至rootDir下一层级的所有元素全部遍历处理完成。基于本申请实施例提供的方法整个目录结构都会被彻底扫描和处理。通过这种扫描策略,进行并发扫描,可以显著减少整体扫描时间,从而更快地完成数据迁移任务,提高了整个数据迁移过程的效率和性能。并且,采用这种扫描机制,使一个层级深的目录结构拆分成多个简单的两层目录结构,可以由不同的线程同时扫描处理,避免因某一个目录太大,扫描耗时长导致整个进程耗时慢的问题,从而极大提高了扫描效率。而且这种目录拆分方法,扫描线程只处理目录的下一层级,不需要进行递归扫描操作,避免了递归深度很大带来的堆栈溢出问题。多线程并发扫描充分利用了多核处理器的性能,使得在相同时间内可以处理更多的数据,加速了整个数据迁移过程,尤其在迁移海量小文件数据的场景下。
其中,由于dir1、dir2......dirN下一级的子元素数量一般较多,为提高扫描效率,目标rootDir、dir1、dir2......dirN的扫描均可以基于主线程进行,再下一层级的子目录由预设线程池中的目标线程扫描。
步骤205,将目标线程扫描到的子目录添加至待扫描目录队列,将目标线程扫描到的子文件添加至待迁移文件队列,并返回至在预设线程池中调用若干个目标线程,基于目标线程遍历待扫描目录队列的步骤(步骤204),直至待扫描目录队列为空。
具体地,目标线程通过对子目录进行扫描,得到该子目录下一级的子目录和子文件,将扫描到的子目录添加至待扫描目录队列,将扫描得到的子文件添加至待迁移文件队列,以此类推,直至所有子目录都被扫描,即待扫描目录队列为空。
步骤206,将待迁移文件队列中的所有子文件,迁移至目标地址。
具体地,当待扫描目录队列为空时,待迁移文件队列中已包括待迁移文件的所有文件数据,因此可以依次将待迁移文件队列中的所有子文件,迁移至目标地址,以将待迁移文件迁移至目标端。
在上述实施例的基础上,为防止并发扫描处理过程中遇到目录下一级子元素很多,所有线程都在处理耗时比较久的大目录,导致整体耗时很久的情况,作为一种可实施的方式,在一实施例中,在预设线程池中调用若干个目标线程,基于目标线程遍历待扫描目录队列,包括:
步骤2041,获取待扫描目录队列中各子目录的子元素个数;
步骤2042,根据各子目录的子元素个数,对子目录进行分类处理,以确定各子目录的分类结果;其中,当子目录的分类结果至少包括第一类别和第二类别,第一类别的子目录的子元素个数大于第二类别的子目录的子元素个数;
步骤2043,针对任一子目录,在该子目录的分类结果为第一类别的情况下,在第一线程池调用当前处于空闲状态的第一目标线程,以基于第一目标线程扫描该子目录;
步骤2044,在该子目录的分类结果为第二类别的情况下,在第二线程池调用当前处于空闲状态的第二目标线程,以基于第二目标线程扫描该子目录。
其中,预设线程池包括第一线程池和第二线程池,第一线程池包括若干个第一目标线程,第二线程池包括若干个第二目标线程,第一目标线程的扫描耗时大于第二目标线程的扫描耗时。
具体地,在一实施例中,针对任一子目录,可以在该子目录的元素个数达到预设元素个数阈值的情况下,确定该子目录的分类结果为第一类别;在该子目录的元素个数未达到预设元素个数阈值的情况下,确定该子目录的分类结果为第二类别。
具体地,如图4所示,为本申请实施例提供的目录扫描流程示意图,为防止并发扫描处理过程中遇到目录下一级子元素很多,所有线程都在处理耗时比较久的大目录,导致整体耗时很久的情况,启用两个扫描线程池(,分别为用于扫描处理大目录的ThreadPool1(第一线程池)和处理小目录的ThreadPool2(第二线程池),以此进行不同负载任务的隔离。并发扫描时,先从待扫描目录队列中获取一个子目录dir1,通过系统命令读取其下一级子元素个数subNum1,如果subNum1>(预设元素个数阈值=10000)则判定为大目录(第一类别),提交到ThreadPool1进行扫描处理,否则判定为小目录(第二类别),则提交到ThreadPool2。扫描线程执行时遍历处理目录下一层级的子元素,得到子目录继续放入待扫描目录队列,得到子文件放入待迁移文件队列。扫描线程处理完一个目录后,继续从待扫描目录队列中获取新的子目录进行处理,直到待扫描目标队列中不再有新子目录放入。
其中,待扫描目录队列中的子目录可以根据入队顺序确定扫描顺序,也可以根据子目录的下一级子元素个数及各预设线程池的线程空闲情况,随机选择子目录,即随机确定扫描顺序。
在上述实施例的基础上,为进一步提高数据迁移效率,作为一种可实施的方式,在一实施例中,将待迁移文件队列中的所有子文件,迁移至目标地址,包括:
步骤2061,根据待迁移文件队列中各子文件的文件数据类型,在待迁移文件队列中筛选目标子文件;
步骤2062,根据目标子文件的特征信息,判断目标子文件是否为待压缩文件;
步骤2063,在目标子文件为待压缩文件的情况下,对目标子文件进行压缩处理,得到目标压缩子文件;
步骤2064,将目标压缩子文件,迁移至目标地址。
具体地,在扫描文件过程中,可以根据子文件的文件数据类型如文本、图像、视频、日志等进行初筛判断,由于对图像、视频等多媒体格式文件的压缩效果不明显,因此可以将文本、日志等非多媒体格式文件确定为目标子文件,并进一步根据目标子文件的特征信息,判断各个目标子文件是否为待压缩文件,若是,则对其进行压缩后再进行迁移,反之则直接迁移。
具体地,在一实施例中,可以根据目标子文件的特征信息,确定目标子文件的实际磁盘占用空间值和元数据表征的数据大小;根据实际磁盘占用空间值与数据大小之间的比值,判断目标子文件是否为稀疏文件;在目标子文件为稀疏文件的情况下,确定目标子文件为待压缩文件。
具体地,可以基于linux系统命令查看目标子文件的特征信息,以得到目标子文件的实际磁盘占用空间值realSize,再读取元数据中的数据大小metaSize,如果realSize/metaSize≤30%,则确定该目标子文件为稀疏文件。稀疏文件指的是文件中大部分内容是空白或占用存储空间较少的数据。后续在数据迁移过程实际数据传输时,动态考虑文件的稀疏性。如果文件被识别为包含稀疏数据(系数文件),可以决定是否进行压缩传输。对于包含稀疏数据的文件,压缩传输可以显著减少需要传输的数据量,从而节省了带宽资源,降低了传输成本,特别适用于海量数据迁移。这一功能对于扫描处理不同类型的文件数据和优化数据迁移过程都具有重要意义。
在上述实施例的基础上,为进一步提高数据迁移效率,作为一种可实施的方式,在一实施例中,方法还包括:
步骤301,获取待迁移文件队列中各子文件的属性信息;
步骤302,将各子文件的属性信息保存至预设数据库;
步骤303,在进行增量迁移过程中,在预设数据库中读取已迁移子文件的属性信息;
步骤304,针对任一已迁移子文件,根据已迁移子文件的属性信息,判断该已迁移子文件是否为待增量迁移子文件;
步骤305,在该已迁移子文件为待增量迁移子文件情况下,按照属性信息进行增量迁移操作。
其中,属性信息至少包括文件大小、修改时间、哈希检验码和文件路径名,可以以文件的文件路径名为键,以获取到的属性信息(文件大小、修改时间和哈希检验码)为值,记录并保存到键值对数据库(预设数据库)。
具体地,在一实施例中,可以获取已迁移子文件的最新属性信息;根据最新属性信息与从预设数据库中读取到的属性信息之间的对比结果,判断该已迁移子文件是否写入新数据;在确定已迁移子文件是否写入新数据的情况下,确定该已迁移子文件为待增量迁移子文件。
具体地,如图5所示,为本申请实施例提供的增量迁移流程示意图,第一次扫描发现文件file1、file2需要迁移,则使用系统命令读取其大小、修改时间信息,然后使用md5sum计算其hash校验,获取到的这些信息组成关键属性信息作为值,以文件路径名为键,存入键值对数据库中。后续迁移模块会将其迁移至目的端存储。第二次增量迁移时,在源端存储上读取最新的file1、file2的属性信息(最新属性信息),然后以文件路径名为键从数据库中查询该文件的关键属性信息,对比校验属性信息是否相同,主要验证哈希校验码是否相同,如果不同,标记为需要增量迁移,再记录保存最新的属性信息来覆盖旧有数据,否则直接跳过。这消除了需要在目的端存储磁盘上执行额外的I/O操作的必要性。因此,这种策略大大减少了数据增量迁移扫描过程中的I/O操作次数和计算资源,降低了磁盘访问的负担,提高了系统的性能和资源利用效率,提高了整体性能。
本申请实施例提供的数据迁移方法,通过获取数据迁移源文件目录,并将数据迁移源文件目录作为根目录;基于主线程扫描根目录,得到根目录下一层级的所有子目录和子文件;将子目录添加至待扫描目录队列,将子文件添加至待迁移文件队列;在预设线程池中调用若干个目标线程,基于目标线程遍历待扫描目录队列将目标线程扫描到的子目录添加至待扫描目录队列,将目标线程扫描到的子文件添加至待迁移文件队列,并返回至在预设线程池中调用若干个目标线程,基于目标线程遍历待扫描目录队列的步骤,直至待扫描目录队列为空;将待迁移文件队列中的所有子文件,迁移至目标地址。上述方案提供的方法,通过引入了多线程并发扫描的机制,维护一个待扫描目录队列,可同时从纵向和横向两个方向逐层递进遍历扫描整个目录结构,提高了文件扫描效率,解决海量小文件迁移场景下的扫描效率瓶颈问题,为提高数据迁移效率奠定了基础。本申请实施例提供的方法不仅提供了快速、高效的数据迁移文件目录扫描,还记录保存了扫描过的文件属性信息,以及智能识别稀疏文件作为后续迁移进行压缩传输判断的依据。为数据迁移任务带来了更高的效率、可靠性和灵活性。极大地改善数据迁移流程,减少了时间和资源的浪费。
本申请实施例提供了一种数据迁移装置,用于执行上述实施例提供的数据迁移方法。
如图6所示,为本申请实施例提供的数据迁移装置的结构示意图。该数据迁移装置60包括:获取模块601、第一扫描模块602、管理模块603、第二扫描模块604、更新模块605和迁移模块606。
其中,获取模块,用于获取数据迁移源文件目录,并将数据迁移源文件目录作为根目录;第一扫描模块,用于基于主线程扫描根目录,得到根目录下一层级的所有子目录和子文件;管理模块,用于将子目录添加至待扫描目录队列,将子文件添加至待迁移文件队列;第二扫描模块,用于在预设线程池中调用若干个目标线程,基于目标线程遍历待扫描目录队列;更新模块,用于将目标线程扫描到的子目录添加至待扫描目录队列,将目标线程扫描到的子文件添加至待迁移文件队列,并返回至在预设线程池中调用若干个目标线程,基于目标线程遍历待扫描目录队列的步骤,直至待扫描目录队列为空;迁移模块,用于将待迁移文件队列中的所有子文件,迁移至目标地址。
具体地,在一实施例中,第二扫描模块,具体用于:
获取待扫描目录队列中各子目录的子元素个数;
根据各子目录的子元素个数,对子目录进行分类处理,以确定各子目录的分类结果;其中,当子目录的分类结果至少包括第一类别和第二类别,第一类别的子目录的子元素个数大于第二类别的子目录的子元素个数;
针对任一子目录,在该子目录的分类结果为第一类别的情况下,在第一线程池调用当前处于空闲状态的第一目标线程,以基于第一目标线程扫描该子目录;
在该子目录的分类结果为第二类别的情况下,在第二线程池调用当前处于空闲状态的第二目标线程,以基于第二目标线程扫描该子目录;
其中,预设线程池包括第一线程池和第二线程池,第一线程池包括若干个第一目标线程,第二线程池包括若干个第二目标线程,第一目标线程的扫描耗时大于第二目标线程的扫描耗时。
具体地,在一实施例中,第二扫描模块,具体用于:
针对任一子目录,在该子目录的元素个数达到预设元素个数阈值的情况下,确定该子目录的分类结果为第一类别;
在该子目录的元素个数未达到预设元素个数阈值的情况下,确定该子目录的分类结果为第二类别。
具体地,在一实施例中,迁移模块,具体用于:
根据待迁移文件队列中各子文件的文件数据类型,在待迁移文件队列中筛选目标子文件;
根据目标子文件的特征信息,判断目标子文件是否为待压缩文件;
在目标子文件为待压缩文件的情况下,对目标子文件进行压缩处理,得到目标压缩子文件;
将目标压缩子文件,迁移至目标地址。
具体地,在一实施例中,迁移模块,具体用于:
根据目标子文件的特征信息,确定目标子文件的实际磁盘占用空间值和元数据表征的数据大小;
根据实际磁盘占用空间值与数据大小之间的比值,判断目标子文件是否为稀疏文件;
在目标子文件为稀疏文件的情况下,确定目标子文件为待压缩文件。
具体地,在一实施例中,该装置还包括:增量迁移模块,用于:
获取待迁移文件队列中各子文件的属性信息;
将各子文件的属性信息保存至预设数据库;
在进行增量迁移过程中,在预设数据库中读取已迁移子文件的属性信息;
针对任一已迁移子文件,根据已迁移子文件的属性信息,判断该已迁移子文件是否为待增量迁移子文件;
在该已迁移子文件为待增量迁移子文件情况下,按照属性信息进行增量迁移操作。
具体地,在一实施例中,属性信息至少包括文件大小、修改时间、哈希检验码和文件路径名,增量迁移模块,具体用于:
获取已迁移子文件的最新属性信息;
根据最新属性信息与从预设数据库中读取到的属性信息之间的对比结果,判断该已迁移子文件是否写入新数据;
在确定已迁移子文件是否写入新数据的情况下,确定该已迁移子文件为待增量迁移子文件。
关于本实施例中的数据迁移装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
本申请实施例提供的数据迁移装置,用于执行上述实施例提供的数据迁移方法,其实现方式与原理相同,不再赘述。
本申请实施例提供了一种电子设备,用于执行上述实施例提供的数据迁移方法。
如图7所示,为本申请实施例提供的电子设备的结构示意图。该电子设备70包括:至少一个处理器71和存储器72。
存储器存储计算机执行指令;至少一个处理器执行存储器存储的计算机执行指令,使得至少一个处理器执行如上实施例提供的数据迁移方法。
本申请实施例提供的电子设备,用于执行上述实施例提供的数据迁移方法,其实现方式与原理相同,不再赘述。
本申请实施例提供了一种计算机可读存储介质,计算机可读存储介质中存储有计算机执行指令,当处理器执行计算机执行指令时,实现如上任一实施例提供的数据迁移方法。
本申请实施例提供的包含计算机可执行指令的存储介质,可用于存储前述实施例中提供的数据迁移方法的计算机执行指令,其实现方式与原理相同,不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
本领域技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。

Claims (10)

1.一种数据迁移方法,其特征在于,包括:
获取数据迁移源文件目录,并将所述数据迁移源文件目录作为根目录;
基于主线程扫描所述根目录,得到根目录下一层级的所有子目录和子文件;
将所述子目录添加至待扫描目录队列,将所述子文件添加至待迁移文件队列;
在预设线程池中调用若干个目标线程,基于所述目标线程遍历所述待扫描目录队列;
将所述目标线程扫描到的子目录添加至所述待扫描目录队列,将所述目标线程扫描到的子文件添加至所述待迁移文件队列,并返回至所述在预设线程池中调用若干个目标线程,基于所述目标线程遍历所述待扫描目录队列的步骤,直至所述待扫描目录队列为空;
将所述待迁移文件队列中的所有子文件,迁移至目标地址。
2.根据权利要求1所述的方法,其特征在于,所述在预设线程池中调用若干个目标线程,基于所述目标线程遍历所述待扫描目录队列,包括:
获取所述待扫描目录队列中各子目录的子元素个数;
根据各所述子目录的子元素个数,对所述子目录进行分类处理,以确定各所述子目录的分类结果;其中,当所述子目录的分类结果至少包括第一类别和第二类别,所述第一类别的子目录的子元素个数大于所述第二类别的子目录的子元素个数;
针对任一所述子目录,在该子目录的分类结果为第一类别的情况下,在第一线程池调用当前处于空闲状态的第一目标线程,以基于所述第一目标线程扫描该子目录;
在该子目录的分类结果为第二类别的情况下,在第二线程池调用当前处于空闲状态的第二目标线程,以基于所述第二目标线程扫描该子目录;
其中,所述预设线程池包括第一线程池和第二线程池,所述第一线程池包括若干个第一目标线程,所述第二线程池包括若干个第二目标线程,所述第一目标线程的扫描耗时大于所述第二目标线程的扫描耗时。
3.根据权利要求2所述的方法,其特征在于,所述根据各所述子目录的子元素个数,对所述子目录进行分类处理,以确定各所述子目录的分类结果,包括:
针对任一所述子目录,在该子目录的元素个数达到预设元素个数阈值的情况下,确定该子目录的分类结果为第一类别;
在该子目录的元素个数未达到预设元素个数阈值的情况下,确定该子目录的分类结果为第二类别。
4.根据权利要求1所述的方法,其特征在于,所述将所述待迁移文件队列中的所有子文件,迁移至目标地址,包括:
根据所述待迁移文件队列中各子文件的文件数据类型,在所述待迁移文件队列中筛选目标子文件;
根据所述目标子文件的特征信息,判断所述目标子文件是否为待压缩文件;
在所述目标子文件为待压缩文件的情况下,对所述目标子文件进行压缩处理,得到目标压缩子文件;
将所述目标压缩子文件,迁移至目标地址。
5.根据权利要求4所述的方法,其特征在于,所述根据所述目标子文件的特征信息,判断所述目标子文件是否为待压缩文件,包括:
根据所述目标子文件的特征信息,确定所述目标子文件的实际磁盘占用空间值和元数据表征的数据大小;
根据所述实际磁盘占用空间值与所述数据大小之间的比值,判断所述目标子文件是否为稀疏文件;
在所述目标子文件为稀疏文件的情况下,确定所述目标子文件为待压缩文件。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
获取所述待迁移文件队列中各子文件的属性信息;
将各所述子文件的属性信息保存至预设数据库;
在进行增量迁移过程中,在所述预设数据库中读取已迁移子文件的属性信息;
针对任一所述已迁移子文件,根据所述已迁移子文件的属性信息,判断该已迁移子文件是否为待增量迁移子文件;
在该已迁移子文件为待增量迁移子文件情况下,按照所述属性信息进行增量迁移操作。
7.根据权利要求6所述的方法,其特征在于,所述属性信息至少包括文件大小、修改时间、哈希检验码和文件路径名,所述根据所述已迁移子文件的属性信息,判断该已迁移子文件是否为待增量迁移子文件,包括:
获取所述已迁移子文件的最新属性信息;
根据所述最新属性信息与从所述预设数据库中读取到的属性信息之间的对比结果,判断该已迁移子文件是否写入新数据;
在确定所述已迁移子文件是否写入新数据的情况下,确定该已迁移子文件为待增量迁移子文件。
8.一种数据迁移装置,其特征在于,包括:
获取模块,用于获取数据迁移源文件目录,并将所述数据迁移源文件目录作为根目录;
第一扫描模块,用于基于主线程扫描所述根目录,得到根目录下一层级的所有子目录和子文件;
管理模块,用于将所述子目录添加至待扫描目录队列,将所述子文件添加至待迁移文件队列;
第二扫描模块,用于在预设线程池中调用若干个目标线程,基于所述目标线程遍历所述待扫描目录队列;
更新模块,用于将所述目标线程扫描到的子目录添加至所述待扫描目录队列,将所述目标线程扫描到的子文件添加至所述待迁移文件队列,并返回至所述在预设线程池中调用若干个目标线程,基于所述目标线程遍历所述待扫描目录队列的步骤,直至所述待扫描目录队列为空;
迁移模块,用于将所述待迁移文件队列中的所有子文件,迁移至目标地址。
9.一种电子设备,其特征在于,包括:至少一个处理器和存储器;
所述存储器存储计算机执行指令;
所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如权利要求1至7任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如权利要求1至7任一项所述的方法。
CN202410275575.8A 2024-03-11 2024-03-11 一种数据迁移方法、装置、电子设备及存储介质 Pending CN118170717A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202410275575.8A CN118170717A (zh) 2024-03-11 2024-03-11 一种数据迁移方法、装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202410275575.8A CN118170717A (zh) 2024-03-11 2024-03-11 一种数据迁移方法、装置、电子设备及存储介质

Publications (1)

Publication Number Publication Date
CN118170717A true CN118170717A (zh) 2024-06-11

Family

ID=91359774

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202410275575.8A Pending CN118170717A (zh) 2024-03-11 2024-03-11 一种数据迁移方法、装置、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN118170717A (zh)

Similar Documents

Publication Publication Date Title
CN1079552C (zh) 采用稀疏文件的实时数据迁移系统和方法
US8799238B2 (en) Data deduplication
CN110109915B (zh) 用于管理哈希表的方法、设备和计算机程序产品
CN109697016B (zh) 用于改进容器的存储性能的方法和装置
US20100281077A1 (en) Batching requests for accessing differential data stores
CN102567427B (zh) 一种对象数据处理方法及装置
US7536426B2 (en) Hybrid object placement in a distributed storage system
KR102264119B1 (ko) CaseDB: 엣지컴퓨팅을 위한 저비용 Put-Intensive 키-벨류 저장장치
US20110106806A1 (en) Process for optimizing file storage systems
CN1834956A (zh) 多线程元数据的处理方法
CN100458792C (zh) 用于管理海量存储系统的方法和数据处理系统
CN114416670B (zh) 适用于网盘文档的索引创建方法、装置、网盘及存储介质
CN112965939A (zh) 一种文件合并方法、装置和设备
CN115576899B (zh) 构建索引的方法和装置以及文件查找方法和装置
Tao et al. LHF: A new archive based approach to accelerate massive small files access performance in HDFS
US8880478B2 (en) Scan-free archiving
CN1622094A (zh) 一种合并文件的方法
CN112241396B (zh) 基于Spark的对Delta进行小文件合并的方法及系统
US9483469B1 (en) Techniques for optimizing disk access
CN118170717A (zh) 一种数据迁移方法、装置、电子设备及存储介质
CN113590566B (zh) 基于堆结构的SequenceFile存储优化方法、装置、设备及存储介质
CN112711564A (zh) 合并处理方法以及相关设备
CN111752941A (zh) 一种数据存储、访问方法、装置、服务器及存储介质
CN113326262B (zh) 基于键值数据库的数据处理方法、装置、设备及介质
CN115599295A (zh) 一种存储系统的节点扩容方法和装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination