CN115630021B - 大数据环境下对象存储中小文件合并方法和装置 - Google Patents
大数据环境下对象存储中小文件合并方法和装置 Download PDFInfo
- Publication number
- CN115630021B CN115630021B CN202211594298.4A CN202211594298A CN115630021B CN 115630021 B CN115630021 B CN 115630021B CN 202211594298 A CN202211594298 A CN 202211594298A CN 115630021 B CN115630021 B CN 115630021B
- Authority
- CN
- China
- Prior art keywords
- file
- sequence
- merged
- files
- node
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/13—File access structures, e.g. distributed indices
- G06F16/137—Hash-based
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/16—File or folder operations, e.g. details of user interfaces specifically adapted to file systems
- G06F16/162—Delete operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/172—Caching, prefetching or hoarding of files
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提出了一种大数据环境下对象存储中小文件合并方法、装置及电子设备,涉及对象存储技术领域,其中,大数据环境下对象存储中小文件合并方法包括:当用户读写文件时获取用户当前访问文件的文件大小;当其小于小文件大小阈值时,将当前访问文件对应的文件编号缓存到小文件组集合中,并使用哈希表保存访问次数;当用户访问文件数量达到合并文件数量阈值时,根据哈希表从小文件组集合中筛选出访问次数大于保留文件所需的最少访问次数阈值的目标文件编号;根据用户对目标文件编号进行分组以得到目标文件编号序列,进而获取目标文件;对目标文件进行对象存储,并将目标文件原文件删除。采用上述方案的本申请实现了海量小文件的高效存储与访问支持。
Description
技术领域
本申请涉及对象存储技术领域,尤其涉及大数据环境下对象存储中小文件合并方法和装置。
背景技术
随着移动互联网和云计算技术的迅速发展,数字化信息呈爆炸式增长,特别是科学计算、高性能计算、Web服务等应用领域中图片、邮件、文本、互联网档案、小视频等小文件正以指数级速度增长,并且对所需存储服务的需求也在增加。使得存储系统面临着巨大挑战。分布式存储是最符合当下的存储方式。常用的分布式存储方法主要包括块存储,文件存储和对象存储。其中,对象存储由于其低成本,出色的可伸缩性以及简单方便的外部接口,在当今的云时代中起着越来越重要的作用。
对象存储是一种扁平结构,文件是以对象形式分布在数据节点中。对象存储的开放接口一般是REST接口或者最新的RPC 接口,这些接口使用和理解都非常简单,在大部分系统中都有被使用。对象存储可以通过添加新的数据节点的方式扩展容量,也可以通过增加接口服务器的方式加速用户请求处理。由于对象存储的灵活性和平坦性,较适合作不经常变动数据的存储。对象包括有对象数据实体和与之对应的元数据信息,元数据信息中有一部分会被存储系统本身利用,利用这部分元数据做到快速查找。对象存储不能像文件存储一样方便的修改数据,而必须要通过完全写入的方式覆盖掉原来的对象的方式改变原有对象。对象存储技术会将数据按照一定的规则,诸如根据其哈希值的方法映射到分布式集群数据节点上存储。可以自由的向集群添加新节点,横向扩展空间的同时又提供了额外的I/O性能。此外,对象存储系统有自己独特的存储结构,数据对象本身和其元数据搭配可以快速且简单地扁平化地搜寻到数据对象。
传统大数据环境下的对象存储文件系统是面向大文件数据存储与访问而设计的,在对海量小文件存储与访问时,存在元数据结构效率低、元数据服务器性能瓶颈、磁盘 I/O效率低、磁盘空间利用率低和网络通信延时高等一系列问题。究其原因,主要是由元数据和数据两个方面造成的。一:元数据占比高、访问频率高、耗时开销大。每个文件不论大小其元数据大小相同。显然,文件越小,元数据占比就越高,有效数据率就低。二:数据访问随机性强、I/O 粒度小导致磁盘吞吐量低。海量小文件场景的“大量随机小粒度 I/O”会影响 SSD的寿命和性能。因此,对海量小文件进行高效存储与访问支持,是当前大数据环境下对象存储系统必须面对的现实问题。
发明内容
本申请旨在至少在一定程度上解决相关技术中的技术问题之一。
为此,本申请的第一个目的在于提出一种大数据环境下对象存储中小文件合并方法,解决了传统分布式文件系统面对海量小文件存储与访问时,存在的效率低、元数据服务器性能瓶颈的技术问题,实现了海量小文件的高效存储与访问支持。
本申请的第二个目的在于提出一种大数据环境下对象存储中小文件合并装置。
为达上述目的,本申请第一方面实施例提出了一种大数据环境下对象存储中小文件合并方法,包括:当用户读写文件时,获取用户当前访问文件的文件大小;当文件大小小于小文件大小阈值时,将当前访问文件对应的文件编号缓存到小文件组集合中,并使用哈希表保存当前访问文件的访问次数;当用户访问文件数量达到合并文件数量阈值时,根据哈希表从小文件组集合中筛选出访问次数大于保留文件所需的最少访问次数阈值的目标文件编号;根据用户对目标文件编号进行分组以得到分组后的目标文件编号序列,并根据目标文件编号序列获取目标文件;对目标文件进行对象存储,并将目标文件的原文件删除。
本申请实施例的大数据环境下对象存储中小文件合并方法,通过当用户频繁地访问某些小文件时,预先对这些文件合并,每次读取某个小文件,就将该小文件所在的合并后大文件整体预读到内存中,本申请通过文件合并、整体预读的方式大幅度减少磁盘 I/O的访问次数和元数据服务器的负载压力。
可选地,在本申请的一个实施例中,哈希表包括文件编号和对应文件的访问次数,小文件组集合包括用户对应的访问文件编号序列,用户对应的访问文件编号序列包括用户访问的所有文件的文件编号,
根据哈希表从小文件组集合中筛选出访问次数大于保留文件所需的最少访问次数阈值的目标文件编号,包括:
遍历小文件组集合依次得到文件编号序列,遍历文件编号序列得到当前文件编号;
根据当前文件编号从哈希表中映射得到对应文件的访问次数,当对应文件的访问次数小于保留文件所需的最少访问次数阈值时,将当前文件编号从文件编号序列中删除;
将经过处理后的文件编号序列中的文件编号作为目标文件编号。
可选地,在本申请的一个实施例中,根据用户对目标文件编号进行分组以得到分组后的目标文件编号序列,并根据目标文件编号序列获取目标文件,包括:
按照访问文件的用户对目标文件编号进行分组,并按照访问次数对分组后的文件编号排序,得到目标文件编号序列;
利用目标文件编号序列构建待合并关联信息树;
对待合并关联信息树前序遍历得到待合并文件序列集合;
根据待合并文件序列集合获取待合并文件编号序列组;
基于待合并文件编号序列组,通过文件编号访问元数据服务器查找对应文件并读取,将读取出的文件作为目标文件。
可选地,在本申请的一个实施例中,利用目标文件编号序列构建待合并关联信息树,包括:
定义关联信息树,并初始化关联信息树的根节点,其中,关联信息树的树结点结构包括文件编号、建树过程中结点的访问次数和该结点的孩子结点集合;
遍历小文件组集合,得到待插入树中的文件编号序列;
定义关联信息树的当前结点变量,并将当前结点变量初始化指向根节点;
遍历待插入树中的文件编号序列,得到当前待插入序列号;
若当前结点变量所指向的结点的孩子结点集合中不存在当前待插入序列号所对应的结点,构建树结点结构作为当前待插入序列号所对应的结点,将树结点结构插入当前结点变量的孩子结点集合中,将当前结点向量的指向修改为当前待插入序列号对应的结点,并增加当前待插入序列号对应的结点的访问次数;
将处理后的关联信息树作为待合并关联信息树。
可选地,在本申请的一个实施例中,对待合并关联信息树前序遍历得到待合并文件序列集合,包括:
定义关联信息树的访问路径序列和文件序列集合,其中,访问路径序列为栈结构;
定义用于遍历关联信息树的变量,并将用于遍历关联信息树的变量初始化指向待合并关联信息树的根节点;
从用于遍历关联信息树的变量所指向的结点出发,根据前序遍历规则对待合并关联信息树进行递归访问;
当递归访问到当前结点时,若当前结点的访问次数小于保留文件所需的文件最少访问次数阈值时,提前返回递归上层,否则将当前结点的结点值加到访问路径序列中;
当递归到空节点返回上层时,将访问路径序列插入到文件序列集合中,并从访问路径序列中弹出最近插入的结点;
将处理后的文件序列集合作为待合并文件序列集合。
可选地,在本申请的一个实施例中,根据待合并文件序列集合获取待合并文件编号序列组,包括:
定义已合并文件编号集合和单次合并文件最大数量;
从待合并文件序列集合中选取当前最长文件编号序列,并依次选取当前最长文件编号序列中的文件编号,若选取的文件编号已经在已合并文件编号集合中,则跳过该文件继续选取文件,否则选取该文件编号并将其添加到已合并文件编号集合中;
将处理后的已合并文件编号集合作为待合并文件编号序列组,其中,待合并文件编号序列组的长度为单次合并文件最大数量。
可选地,在本申请的一个实施例中,对目标文件进行对象存储,包括:
通过元数据服务器计算得到目标文件中每个小文件的第一参数和第二参数,并得到对象编号,其中,第一参数用于全局标识每一个文件,第二参数为文件分片的编号,对象编号用于获取文件的物理地址;
通过元数据服务器发起创建对象请求,得到创建的对象所处的对象存储设备;
通过对象存储设备依据元数据服务器所分配的第一参数和第二参数依次将目标文件存储到创建的对象中。
为达上述目的,本申请第二方面实施例提出了一种大数据环境下对象存储中小文件合并装置,包括第一获取模块、第一存储模块、筛选模块、第二获取模块、第二存储模块,其中
第一获取模块,用于当用户读写文件时,获取用户当前访问文件的文件大小;
第一存储模块,用于当文件大小小于小文件大小阈值时,将当前访问文件对应的文件编号缓存到小文件组集合中,并使用哈希表保存当前访问文件的访问次数;
筛选模块,用于当用户访问文件数量达到合并文件数量阈值时,根据哈希表从小文件组集合中筛选出访问次数大于保留文件所需的最少访问次数阈值的目标文件编号;
第二获取模块,用于根据用户对目标文件编号进行分组以得到分组后的目标文件编号序列,并根据目标文件编号序列获取目标文件;
第二存储模块,用于对目标文件进行对象存储,并将目标文件的原文件删除。
可选地,在本申请的一个实施例中,哈希表包括文件编号和对应文件的访问次数,小文件组集合包括用户对应的访问文件编号序列,用户对应的访问文件编号序列包括用户访问的所有文件的文件编号,
根据哈希表从小文件组集合中筛选出访问次数大于保留文件所需的最少访问次数阈值的目标文件编号,包括:
遍历小文件组集合依次得到文件编号序列,遍历文件编号序列得到当前文件编号;
根据当前文件编号从哈希表中映射得到对应文件的访问次数,当对应文件的访问次数小于保留文件所需的最少访问次数阈值时,将当前文件编号从文件编号序列中删除;
将经过处理后的文件编号序列中的文件编号作为目标文件编号。
可选地,在本申请的一个实施例中,对目标文件进行对象存储,包括:
通过元数据服务器计算得到目标文件中每个小文件的第一参数和第二参数,并得到对象编号,其中,第一参数用于全局标识每一个文件,第二参数为文件分片的编号,对象编号用于获取文件的物理地址;
通过元数据服务器发起创建对象请求,得到创建的对象所处的对象存储设备;
通过对象存储设备依据元数据服务器所分配的第一参数和第二参数依次将目标文件存储到创建的对象中。
本申请附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本申请的实践了解到。
附图说明
本申请上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
图1为本申请实施例一所提供的一种大数据环境下对象存储中小文件合并方法的流程示意图;
图2为本申请实施例的另一流程图;
图3为本申请实施例的本申请实施例提供的一种大数据环境下对象存储中小文件合并装置的结构示意图。
具体实施方式
下面详细描述本申请的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本申请,而不能理解为对本申请的限制。
下面参考附图描述本申请实施例的大数据环境下对象存储中小文件合并方法和装置。
图1为本申请实施例一所提供的一种大数据环境下对象存储中小文件合并方法的流程示意图。
如图1所示,该大数据环境下对象存储中小文件合并方法包括以下步骤:
步骤101,当用户读写文件时,获取用户当前访问文件的文件大小;
步骤102,当文件大小小于小文件大小阈值时,将当前访问文件对应的文件编号缓存到小文件组集合中,并使用哈希表保存当前访问文件的访问次数;
步骤103,当用户访问文件数量达到合并文件数量阈值时,根据哈希表从小文件组集合中筛选出访问次数大于保留文件所需的最少访问次数阈值的目标文件编号;
步骤104,根据用户对目标文件编号进行分组以得到分组后的目标文件编号序列,并根据目标文件编号序列获取目标文件;
步骤105,对目标文件进行对象存储,并将目标文件的原文件删除。
本申请实施例的大数据环境下对象存储中小文件合并方法,通过当用户频繁地访问某些小文件时,预先对这些文件合并,每次读取某个小文件,就将该小文件所在的合并后大文件整体预读到内存中,本申请通过文件合并、整体预读的方式大幅度减少磁盘 I/O的访问次数和元数据服务器的负载压力。
可选地,在本申请的一个实施例中,哈希表包括文件编号和对应文件的访问次数,小文件组集合包括用户对应的访问文件编号序列,用户对应的访问文件编号序列包括用户访问的所有文件的文件编号,
根据哈希表从小文件组集合中筛选出访问次数大于保留文件所需的最少访问次数阈值的目标文件编号,包括:
遍历小文件组集合依次得到文件编号序列,遍历文件编号序列得到当前文件编号;
根据当前文件编号从哈希表中映射得到对应文件的访问次数,当对应文件的访问次数小于保留文件所需的最少访问次数阈值时,将当前文件编号从文件编号序列中删除;
将经过处理后的文件编号序列中的文件编号作为目标文件编号。
可选地,在本申请的一个实施例中,根据用户对目标文件编号进行分组以得到分组后的目标文件编号序列,并根据目标文件编号序列获取目标文件,包括:
按照访问文件的用户对目标文件编号进行分组,并按照访问次数对分组后的文件编号排序,得到目标文件编号序列;
利用目标文件编号序列构建待合并关联信息树;
对待合并关联信息树前序遍历得到待合并文件序列集合;
根据待合并文件序列集合获取待合并文件编号序列组;
基于待合并文件编号序列组,通过文件编号访问元数据服务器查找对应文件并读取,将读取出的文件作为目标文件。
可选地,在本申请的一个实施例中,利用目标文件编号序列构建待合并关联信息树,包括:
定义关联信息树,并初始化关联信息树的根节点,其中,关联信息树的树结点结构包括文件编号、建树过程中结点的访问次数和该结点的孩子结点集合;
遍历小文件组集合,得到待插入树中的文件编号序列。
定义关联信息树的当前结点变量,并将当前结点变量初始化指向根节点;
遍历待插入树中的文件编号序列,得到当前待插入序列号;
若当前结点变量所指向的结点的孩子结点集合中不存在当前待插入序列号所对应的结点,构建树结点结构作为当前待插入序列号所对应的结点,将树结点结构插入当前结点变量的孩子结点集合中,将当前结点向量的指向修改为当前待插入序列号对应的结点,并增加当前待插入序列号对应的结点的访问次数;
将处理后的关联信息树作为待合并关联信息树。
可选地,在本申请的一个实施例中,对待合并关联信息树前序遍历得到待合并文件序列集合,包括:
定义关联信息树的访问路径序列和文件序列集合,其中,访问路径序列为栈结构;
定义用于遍历关联信息树的变量,并将用于遍历关联信息树的变量初始化指向待合并关联信息树的根节点;
从用于遍历关联信息树的变量所指向的结点出发,根据前序遍历规则对待合并关联信息树进行递归访问;
当递归访问到当前结点时,若当前结点的访问次数小于保留文件所需的文件最少访问次数阈值时,提前返回递归上层,否则将当前结点的结点值加到访问路径序列中;
当递归到空节点返回上层时,将访问路径序列插入到文件序列集合中,并从访问路径序列中弹出最近插入的结点;
将处理后的文件序列集合作为待合并文件序列集合。
可选地,在本申请的一个实施例中,根据待合并文件序列集合获取待合并文件编号序列组,包括:
定义已合并文件编号集合和单次合并文件最大数量;
从待合并文件序列集合中选取当前最长文件编号序列,并依次选取当前最长文件编号序列中的文件编号,若选取的文件编号已经在已合并文件编号集合中,则跳过该文件继续选取文件,否则选取该文件编号并将其添加到已合并文件编号集合中;
将处理后的已合并文件编号集合作为待合并文件编号序列组,其中,待合并文件编号序列组的长度为单次合并文件最大数量。
可选地,在本申请的一个实施例中,对目标文件进行对象存储,包括:
通过元数据服务器计算得到目标文件中每个小文件的第一参数和第二参数,并得到对象编号,其中,第一参数用于全局标识每一个文件,第二参数为文件分片的编号,对象编号用于获取文件的物理地址;
通过元数据服务器发起创建对象请求,得到创建的对象所处的对象存储设备;
通过对象存储设备依据元数据服务器所分配的第一参数和第二参数依次将目标文件存储到创建的对象中。
图2为本申请实施例的另一流程图,下面结合图2介绍本申请的另一实施例。本申请的实施例包括合并模块的启动和合并文件两个过程,其中,
合并模块的启动包括:
在合并操作前,需要将用户对文件的访问进行统计以及判断其是否是对小文件进行操作,如果不是小文件则不进行任何的操作,并等待用户继续访问文件。如果是小文件则保存其相关信息并对小文件数量进行统计。当小文件达到一定数量时,启动合并操作。启动过程详见下述步骤2、3;
合并文件包括:
该阶段可分为三个阶段。
根据用户的访问行为以及保留文件所需的文件最少访问次数阈值mAccThreshold,对文件访问关联性较差的小文件不进行合并,筛选后得到要执行合并操作的文件。详见下述步骤4、5。
根据筛选后的多个小文件序列构建一个关联信息树,并对该树进行前序遍历操作,对遍历的中间路径信息进行保存,得到具体要合并的多个小文件组。详见下述步骤6、7、8、9。
为小文件组分配元数据信息,合并后保存到OSD设备中并依次删除原小文件。详见下述步骤10、11、12。
如图2所示,本申请的实施例包括以下步骤:
步骤1 定义小文件大小阈值smsThreshold,定义用于启动文件合并模块的文件数量阈值nFileThreshold,当前文件数量FileNum,定义用户集合Users = {User1,User2,...,Useri,...,Usern},定义小文件组集合sFileGroup={FilesIds1,FilesIds2,...,FilesIdsi,...,FilesIdsn},n为用户数量,Useri表示用户编号为i,且用户集合Users内不存在重复值,FilesIdsi表示用户Useri所访问的文件编号序列,其中,m为文件数量,fileni表示第i个文件编号。
步骤2 当用户Useri读写文件时,访问元数据服务器(MDS)获取当前用户Useri所访问文件元数据中的信息(User,filen,size),User为当前用户,filen为用户所访问的文件的编号,size为文件大小。当size小于小文件大小阈值smsThreshold时,将当前文件数量FileNum自增1以及用户Useri插入用户集合USERS,filen插入小文件组sFileGroup中对应的文件编号序列FilesIdsi。当文件数量FileNum >= nFileThreshold(文件数量阈值)时,执行步骤3,否则执行步骤2,继续等待用户写入文件。
步骤3 定义保留文件所需的文件最少访问次数阈值mAccThreshold,定义文件访问次数哈希表times{filen,t},filen为key值,t为value值表示文件编号filen所对应文件访问的总次数,t默认初始化为0。遍历用户集合Users找到每个用户Useri所访问的文件编号序列FilesIdsi,遍历序列FilesIdsi依次得到文件编号fileni,将fileni作为哈希值,times[fileni]自增1。
步骤4 遍历小文件组集合sFileGroup依次得到文件编号序列FilesIdsi,遍历FilesIdsi得到文件编号fileni,根据哈希表times[fileni]映射得到该文件的总访问次数ti,当ti < mAccThreshold时将文件编号fileni从文件编号序列FilesIdsi中删除。
步骤5 将小文件组集合sFileGroup按照其包含的文件编号序列FilesIdsi的长度从大到小排序,遍历小文件组集合sFileGroup依次得到文件编号序列FilesIdsi,将文件编号序列FilesIdsi按照文件编号filenj的文件访问次数从大到小排序。
步骤6 定义待构建的关联信息树(AssInfTree)并初始化为只有一个根节点,根节点为root,树结点结构定义为 {filen,count,children},filen为文件编号,count为建树过程中结点的总访问次数,集合children表示该结点的孩子结点集合。遍历小文件组集合sFileGroup,得到待插入树中的文件编号序列FilesIdsi ={filen1,filen2,...,fileni,...,filenn}。
步骤7 定义关联信息树AssInfTree的结点变量p,变量p初始化指向树的根节点root,遍历待插入树中的文件编号序列FilesIdsi,得到当前待插入序列号fileni,若p所指向的结点的孩子结点集合children中不存在fileni所对应结点,构建树结点结构temp={filen,count,children},filen为当前待插入文件编号fileni,count=1,孩子结点集合children初始为空集合。将结点temp插入p结点中的集合children中。变量p结点指向修改为p结点对应的孩子结点集合children中的结点fileni,将该结点的count值自增1。小文件组集合sFileGroup中所有序列插入完成后执行步骤8,否则得到下一个待插入树中的文件编号序列FilesIdsi+1,再次执行步骤7。
步骤8 定义关联信息树AssInfTree的访问路径序列AccPath = {filen1,filen2,...,fileni,...,filenm},序列AccPath为栈结构,仅支持先进后出操作,定义待合并文件序列集合MergeFiles = {AccPath1,AccPath2,....,AccPathi,....,AccPathn},MergeFiles集合按照序列长度从大到小排序。
步骤9 定义用于遍历关联信息树的变量q,变量q初始化指向树的根节点root。从变量q所指向的结点出发,根据前序遍历规则对关联信息树AssInfTree进行递归访问:当变量q递归访问到某结点时,若变量q所指结点的count值小于保留文件所需的文件最少访问次数阈值mAccThreshold时,提前返回到递归上层。否则将变量q所指向的结点值filen追加到序列AccPath中。当递归到空结点返回上层时将AccPath插入到待合并文件序列集合MergeFiles中。并从序列AccPath中弹出最近插入的结点。
步骤10 定义已合并文件编号集合Merged ={filen1,filen2,filen3,...,fileni,...,filenm},定义单次合并文件最大数量cnt,从待合并文件序列集合MergeFiles中选取当前最长文件编号序列AccPathi,依次选取AccPathi中文件编号,若文件编号已经在集合Merged中则跳过该文件继续选取文件,否则选取该文件将其添加到集合Merged中,得到长度等于cnt的文件编号序列{filen1,filen2,filen3,...},通过文件编号访问元数据服务器MDS找到对应的小文件并构建待合并小文件集合Littlefiles = {Lfile1,Lfile2,Lfile3,...}。Littlefiles集合的大小通常不超过20。元数据服务器MDS根据公式(1)、(2)、(3)依次为Littlefiles中的小文件分配ino 和 ono并得到对象编号Oid。其中,k为MDS所定义全局唯一数值,i为Littlefiles中的小文件序列下标。ino用于全局标识每一个文件,ono为文件分片的编号,Oid用于获取文件的物理地址。
ino=k+i (1)
ono = -i (2)
oid=(ino+ono+1)<<32|1 (3)
步骤11 向元数据服务器MDS发起创建对象(OP)请求,得到该对象OP所处的对象存储设备OSD,OSD将小文件集合Littlefiles依据元数据服务器MDS所分配的ino和ono依次将小文件存储到对象OP中。若待合并文件序列集合MergeFiles不为空,执行步骤10,否则小文件合并操作完毕。
步骤12 遍历已合并文件编号集合Merged得到文件编号fileni,访问元数据服务器MDS得到文件编号fileni对应小文件Lfilei,将该小文件Lfilei所对应的对象从对象存储设备OSD中删除。
为了实现上述实施例,本申请还提出一种大数据环境下对象存储中小文件合并装置。
图3为本申请实施例提供的一种大数据环境下对象存储中小文件合并装置的结构示意图。
如图3所示,该大数据环境下对象存储中小文件合并装置包括第一获取模块、第一存储模块、筛选模块、第二获取模块、第二存储模块,其中,
第一获取模块,用于当用户读写文件时,获取用户当前访问文件的文件大小;
第一存储模块,用于当文件大小小于小文件大小阈值时,将当前访问文件对应的文件编号缓存到小文件组集合中,并使用哈希表保存当前访问文件的访问次数;
筛选模块,用于当用户访问文件数量达到合并文件数量阈值时,根据哈希表从小文件组集合中筛选出访问次数大于保留文件所需的最少访问次数阈值的目标文件编号;
第二获取模块,用于根据用户对目标文件编号进行分组以得到分组后的目标文件编号序列,并根据目标文件编号序列获取目标文件;
第二存储模块,用于对目标文件进行对象存储,并将目标文件的原文件删除。
可选地,在本申请的一个实施例中,哈希表包括文件编号和对应文件的访问次数,小文件组集合包括用户对应的访问文件编号序列,用户对应的访问文件编号序列包括用户访问的所有文件的文件编号,
根据哈希表从小文件组集合中筛选出访问次数大于保留文件所需的最少访问次数阈值的目标文件编号,包括:
遍历小文件组集合依次得到文件编号序列,遍历文件编号序列得到当前文件编号;
根据当前文件编号从哈希表中映射得到对应文件的访问次数,当对应文件的访问次数小于保留文件所需的最少访问次数阈值时,将当前文件编号从文件编号序列中删除;
将经过处理后的文件编号序列中的文件编号作为目标文件编号。
可选地,在本申请的一个实施例中,对目标文件进行对象存储,包括:
通过元数据服务器计算得到目标文件中每个小文件的第一参数和第二参数,并得到对象编号,其中,第一参数用于全局标识每一个文件,第二参数为文件分片的编号,对象编号用于获取文件的物理地址;
通过元数据服务器发起创建对象请求,得到创建的对象所处的对象存储设备;
通过对象存储设备依据元数据服务器所分配的第一参数和第二参数依次将目标文件存储到创建的对象中。
需要说明的是,前述对大数据环境下对象存储中小文件合并方法实施例的解释说明也适用于该实施例的大数据环境下对象存储中小文件合并装置,此处不再赘述。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、 “示例”、“具体示例”或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本申请的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本申请的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现定制逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本申请的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本申请的实施例所属技术领域的技术人员所理解。
在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,"计算机可读介质"可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
应当理解,本申请的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。如,如果用硬件来实现和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
此外,在本申请各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。
上述提到的存储介质可以是只读存储器,磁盘或光盘等。尽管上面已经示出和描述了本申请的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本申请的限制,本领域的普通技术人员在本申请的范围内可以对上述实施例进行变化、修改、替换和变型。
Claims (7)
1.一种大数据环境下对象存储中小文件合并方法,其特征在于,包括以下步骤:
当用户读写文件时,获取用户当前访问文件的文件大小;
当所述文件大小小于小文件大小阈值时,将所述当前访问文件对应的文件编号缓存到小文件组集合中,并使用哈希表保存所述当前访问文件的访问次数;
当用户访问文件数量达到合并文件数量阈值时,根据所述哈希表从所述小文件组集合中筛选出访问次数大于保留文件所需的最少访问次数阈值的目标文件编号;
根据用户对所述目标文件编号进行分组以得到分组后的目标文件编号序列,并根据所述目标文件编号序列获取目标文件;
对所述目标文件进行对象存储,并将所述目标文件的原文件删除;
所述哈希表包括文件编号和对应文件的访问次数,所述小文件组集合包括用户对应的访问文件编号序列,所述用户对应的访问文件编号序列包括用户访问的所有文件的文件编号,
所述根据所述哈希表从所述小文件组集合中筛选出访问次数大于保留文件所需的最少访问次数阈值的目标文件编号,包括:
遍历所述小文件组集合依次得到文件编号序列,遍历所述文件编号序列得到当前文件编号;
根据所述当前文件编号从所述哈希表中映射得到对应文件的访问次数,当所述对应文件的访问次数小于所述保留文件所需的最少访问次数阈值时,将所述当前文件编号从所述文件编号序列中删除;
将经过处理后的文件编号序列中的文件编号作为所述目标文件编号;
所述根据用户对所述目标文件编号进行分组以得到分组后的目标文件编号序列,并根据所述目标文件编号序列获取目标文件,包括:
按照访问文件的用户对所述目标文件编号进行分组,并按照访问次数对分组后的文件编号排序,得到所述目标文件编号序列;
利用所述目标文件编号序列构建待合并关联信息树;
对所述待合并关联信息树前序遍历得到待合并文件序列集合;
根据所述待合并文件序列集合获取待合并文件编号序列组;
基于所述待合并文件编号序列组,通过文件编号访问元数据服务器查找对应文件并读取,将读取出的文件作为所述目标文件。
2.如权利要求1所述的方法,其特征在于,所述利用所述目标文件编号序列构建待合并关联信息树,包括:
定义关联信息树,并初始化所述关联信息树的根节点,其中,所述关联信息树的树节点节点结构包括文件编号、建树过程中节点的访问次数和该节点的孩子节点集合;
遍历所述小文件组集合,得到待插入树中的文件编号序列;
定义关联信息树的当前节点变量,并将所述当前节点变量初始化指向所述根节点;
遍历所述待插入树中的文件编号序列,得到当前待插入序列号;
若当前节点变量所指向的节点的孩子节点集合中不存在当前待插入序列号所对应的节点,构建树节点结构作为所述当前待插入序列号所对应的节点,将所述树节点结构插入所述当前节点变量的孩子节点集合中,将当前节点向量的指向修改为所述当前待插入序列号对应的节点,并增加所述当前待插入序列号对应的节点的访问次数;
将处理后的关联信息树作为所述待合并关联信息树。
3.如权利要求2所述的方法,其特征在于,所述对所述待合并关联信息树前序遍历得到待合并文件序列集合,包括:
定义关联信息树的访问路径序列和文件序列集合,其中,所述访问路径序列为栈结构;
定义用于遍历关联信息树的变量,并将所述用于遍历关联信息树的变量初始化指向所述待合并关联信息树的根节点;
从所述用于遍历关联信息树的变量所指向的节点出发,根据前序遍历规则对所述待合并关联信息树进行递归访问;
当递归访问到当前节点时,若所述当前节点的访问次数小于所述保留文件所需的文件最少访问次数阈值时,提前返回递归上层,否则将所述当前节点的节点值加到所述访问路径序列中;
当递归到空节点返回上层时,将所述访问路径序列插入到所述文件序列集合中,并从所述访问路径序列中弹出最近插入的节点;
将处理后的文件序列集合作为所述待合并文件序列集合。
4.如权利要求3所述的方法,其特征在于,所述根据所述待合并文件序列集合获取待合并文件编号序列组,包括:
定义已合并文件编号集合和单次合并文件最大数量;
从所述待合并文件序列集合中选取当前最长文件编号序列,并依次选取所述当前最长文件编号序列中的文件编号,若选取的文件编号已经在所述已合并文件编号集合中,则跳过该文件继续选取文件,否则选取该文件编号并将其添加到所述已合并文件编号集合中;
将处理后的已合并文件编号集合作为所述待合并文件编号序列组,其中,所述待合并文件编号序列组的长度为所述单次合并文件最大数量。
5.如权利要求1所述的方法,其特征在于,所述对所述目标文件进行对象存储,包括:
通过元数据服务器计算得到所述目标文件中每个小文件的第一参数和第二参数,并得到对象编号,其中,所述第一参数用于全局标识每一个文件,所述第二参数为文件分片的编号,所述对象编号用于获取文件的物理地址;
通过元数据服务器发起创建对象请求,得到创建的对象所处的对象存储设备;
通过所述对象存储设备依据元数据服务器所分配的第一参数和第二参数依次将所述目标文件存储到创建的对象中。
6.一种大数据环境下对象存储中小文件合并装置,其特征在于,包括第一获取模块、第一存储模块、筛选模块、第二获取模块、第二存储模块,其中
所述第一获取模块,用于当用户读写文件时,获取用户当前访问文件的文件大小;
所述第一存储模块,用于当所述文件大小小于小文件大小阈值时,将所述当前访问文件对应的文件编号缓存到小文件组集合中,并使用哈希表保存所述当前访问文件的访问次数;
所述筛选模块,用于当用户访问文件数量达到合并文件数量阈值时,根据所述哈希表从所述小文件组集合中筛选出访问次数大于保留文件所需的最少访问次数阈值的目标文件编号;
所述第二获取模块,用于根据用户对所述目标文件编号进行分组以得到分组后的目标文件编号序列,并根据所述目标文件编号序列获取目标文件;
所述第二存储模块,用于对所述目标文件进行对象存储,并将所述目标文件的原文件删除;
所述哈希表包括文件编号和对应文件的访问次数,所述小文件组集合包括用户对应的访问文件编号序列,所述用户对应的访问文件编号序列包括用户访问的所有文件的文件编号,
所述根据所述哈希表从所述小文件组集合中筛选出访问次数大于保留文件所需的最少访问次数阈值的目标文件编号,包括:
遍历所述小文件组集合依次得到文件编号序列,遍历所述文件编号序列得到当前文件编号;
根据所述当前文件编号从所述哈希表中映射得到对应文件的访问次数,当所述对应文件的访问次数小于所述保留文件所需的最少访问次数阈值时,将所述当前文件编号从所述文件编号序列中删除;
将经过处理后的文件编号序列中的文件编号作为所述目标文件编号;
所述根据用户对所述目标文件编号进行分组以得到分组后的目标文件编号序列,并根据所述目标文件编号序列获取目标文件,包括:
按照访问文件的用户对所述目标文件编号进行分组,并按照访问次数对分组后的文件编号排序,得到所述目标文件编号序列;
利用所述目标文件编号序列构建待合并关联信息树;
对所述待合并关联信息树前序遍历得到待合并文件序列集合;
根据所述待合并文件序列集合获取待合并文件编号序列组;
基于所述待合并文件编号序列组,通过文件编号访问元数据服务器查找对应文件并读取,将读取出的文件作为所述目标文件。
7.如权利要求6所述的装置,其特征在于,所述对所述目标文件进行对象存储,包括:
通过元数据服务器计算得到所述目标文件中每个小文件的第一参数和第二参数,并得到对象编号,其中,所述第一参数用于全局标识每一个文件,所述第二参数为文件分片的编号,所述对象编号用于获取文件的物理地址;
通过元数据服务器发起创建对象请求,得到创建的对象所处的对象存储设备;
通过所述对象存储设备依据元数据服务器所分配的第一参数和第二参数依次将所述目标文件存储到创建的对象中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211594298.4A CN115630021B (zh) | 2022-12-13 | 2022-12-13 | 大数据环境下对象存储中小文件合并方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211594298.4A CN115630021B (zh) | 2022-12-13 | 2022-12-13 | 大数据环境下对象存储中小文件合并方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115630021A CN115630021A (zh) | 2023-01-20 |
CN115630021B true CN115630021B (zh) | 2023-03-28 |
Family
ID=84909660
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211594298.4A Active CN115630021B (zh) | 2022-12-13 | 2022-12-13 | 大数据环境下对象存储中小文件合并方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115630021B (zh) |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020178176A1 (en) * | 1999-07-15 | 2002-11-28 | Tomoki Sekiguchi | File prefetch contorol method for computer system |
CN103577123B (zh) * | 2013-11-12 | 2016-06-22 | 河海大学 | 一种基于hdfs的小文件优化存储方法 |
CN105404652A (zh) * | 2015-10-29 | 2016-03-16 | 河海大学 | 一种基于hdfs的海量小文件处理方法 |
CN108710639B (zh) * | 2018-04-17 | 2021-05-14 | 桂林电子科技大学 | 一种基于Ceph的海量小文件存取优化方法 |
CN108846021B (zh) * | 2018-05-22 | 2021-10-26 | 广东技术师范大学 | 一种基于用户访问偏好模型的海量小文件存储方法 |
-
2022
- 2022-12-13 CN CN202211594298.4A patent/CN115630021B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN115630021A (zh) | 2023-01-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101467589B1 (ko) | 데이터 구조를 가지는 하나 이상의 장치 판독가능 매체, 및장치 실행가능 명령어를 구비한 하나 이상의 장치 판독가능 매체 | |
CN108628753B (zh) | 内存空间管理方法和装置 | |
US8762353B2 (en) | Elimination of duplicate objects in storage clusters | |
US8423733B1 (en) | Single-copy implicit sharing among clones | |
CN103064639B (zh) | 数据存储方法及装置 | |
US8099421B2 (en) | File system, and method for storing and searching for file by the same | |
US9875183B2 (en) | Method and apparatus for content derived data placement in memory | |
US6697795B2 (en) | Virtual file system for dynamically-generated web pages | |
CN113961514B (zh) | 数据查询方法及装置 | |
US9336255B2 (en) | Techniques for traversal and storage of directory entries of a storage volume | |
KR20200122994A (ko) | 키 값 첨부 | |
US9355121B1 (en) | Segregating data and metadata in a file system | |
CN111090618B (zh) | 一种数据读取方法、系统及设备 | |
CN111813813B (zh) | 一种数据管理方法、装置、设备及存储介质 | |
KR100654462B1 (ko) | 캐쉬 메모리를 메모리 블록으로 나누어 파일의 데이터를저장하는 캐쉬 방법 및 캐쉬 시스템 | |
CN114116612B (zh) | 一种基于b+树索引归档文件的存取方法 | |
CN115630021B (zh) | 大数据环境下对象存储中小文件合并方法和装置 | |
CN117827787A (zh) | 一种应用于分布式文件系统的元数据管理方法及系统 | |
JP4391983B2 (ja) | ファイルシステム経路処理装置及び方法 | |
CN117215477A (zh) | 数据对象存储方法、装置、计算机设备和存储介质 | |
US20130218851A1 (en) | Storage system, data management device, method and program | |
CN115904211A (zh) | 一种存储系统、数据处理方法及相关设备 | |
CN111723266B (zh) | 海量数据处理方法和装置 | |
CN110765290A (zh) | 图片存储方法、读取方法、装置及存取系统 | |
CN112084141A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |