一种面向分布式文件系统的小文件存储方法及装置转让专利

申请号 : CN201910298854.5

文献号 : CN110069466B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 彭智勇王淞彭煜玮

申请人 : 武汉大学

摘要 :

本发明提供了一种面向海量小文件存储场景的基于历史查询记录建模方法以及基于建模结果的文件合并策略生成方法。在基于历史查询记录建模方法中,提出了一种查询图模型,通过将文件以及文件之间的共同访问关系映射成图中节点以及节点之间的边权重关系,反应文件自身的查询数与不同文件之间共同查询数量的关系。在基于查询图模型生成文件合并策略的方法中,提出一种基于节点和边权重的文件关联关系度量,可以有效反应不同文件之间的关联关系。并基于该关联关系,采用图聚类方法来对节点进行合并,并根据最终合并结果来生成文件合并策略,实现了自动发现近似最优文件合并策略的目标。该发明有效解决了分布式文件系统中对海量小文件进行存储的问题。

权利要求 :

1.一种面向分布式文件系统的小文件存储方法,其特征在于,包括:步骤S1:基于用户的历史查询记录,构建查询图模型,查询图模型包括节点和边,节点和边具有权重,其中,查询图模型中的节点用以表示一个文件,节点的权重用以表示文件的查询次数,节点与节点之间的边的权重用以表示文件之间的共同访问关系;

步骤S2:根据查询图模型中节点的权重和边的权重,计算各个节点对应的文件之间的关联度,基于计算出的关联度采用图聚类方法来对节点进行合并,获得合并结果,将合并结果作为文件合并策略;

步骤S3:根据文件合并策略对待存储的文件进行存储;

其中,步骤S2具体包括:

步骤S2.1:根据节点的权重和边的权重,计算各个节点对应的文件之间的关联度,给定节点N1,N2,两个节点的权重分别为w1,w2,节点之间边的权重为e,则两个节点对应的文件之间的关联度Cor(N1,N2)的计算方式如下:步骤S2.2:根据关联度的大小,从具有最大关联度的节点对开始进行合并,直到查询图模型G中所有的节点合并完成,获得合并结果,将其作为文件合并策略。

2.如权利要求1所述的方法,其特征在于,步骤S1具体包括:步骤S1.1:采集用户的全部历史查询记录Q;

步骤S1.2:初始化查询图模型G,其中,查询图模型G为空图;

步骤S1.3:根据文件的查询次数和不同文件被共同访问的次数,确定查询图模型G中的节点和边的权重。

3.如权利要求1所述的方法,其特征在于,步骤S2.2具体包括:步骤S2.2.1:从具有最大关联度的节点对开始进行合并后,更新节点的属性信息,其中,属性信息包括权重和体量,并根据更新后的属性信息重新计算被合并节点与周围节点之间的关联度大小;

步骤S2.2.2:判断合并的节点的总体量大小是否达设定阈值,如果达到则将合并的节点中所包含子节点集合所对应文件集合作为需要合并的文件集,并从查询图模型G中删除对应节点集合;

步骤S2.2.3:重复执行步骤S2.2.1~步骤S2.2.2,直到查询图

4.如权利要求3所述的方法,其特征在于,步骤S2.2.1中更新节点的属性信息具体包括:将合并后节点的权重设置为原始合并节点权重和减去边权重;

将合并后新节点与周围节点的边权重设置为原始相关边的较大值。

5.一种面向分布式文件系统的小文件存储装置,其特征在于,包括:查询图模型构建模块,用于基于用户的历史查询记录,构建查询图模型,查询图模型包括节点和边,节点和边具有权重,其中,查询图模型中的节点用以表示一个文件,节点的权重用以表示文件的查询次数,节点与节点之间的边的权重用以表示文件之间的共同访问关系;

文件合并策略生成模块,用于根据查询图模型中节点的权重和边的权重,计算各个节点对应的文件之间的关联度,基于计算出的关联度采用图聚类方法来对节点进行合并,获得合并结果,将合并结果作为文件合并策略;

文件存储模块,用于根据文件合并策略对待存储的文件进行存储;

其中,文件合并策略生成模块具体用于执行下述步骤:

步骤S2.1:根据节点的权重和边的权重,计算各个节点对应的文件之间的关联度,给定节点N1,N2,两个节点的权重分别为w1,w2,节点之间边的权重为e,则两个节点对应的文件之间的关联度Cor(N1,N2)的计算方式如下:步骤S2.2:根据关联度的大小,从具有最大关联度的节点对开始进行合并,直到查询图模型G中所有的节点合并完成,获得合并结果,将其作为文件合并策略。

6.如权利要求5所述的装置,其特征在于,查询图模型构建模块具体用于执行下述步骤:步骤S1.1:采集用户的全部历史查询记录Q;

步骤S1.2:初始化查询图模型G,其中,查询图模型G为空图;

步骤S1.3:根据文件的查询次数和不同文件被共同访问的次数,确定查询图模型G中的节点和边的权重。

7.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被执行时实现如权利要求1至4中任一项权利要求所述的方法。

8.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至4中任一项权利要求所述的方法。

说明书 :

一种面向分布式文件系统的小文件存储方法及装置

技术领域

[0001] 本发明涉及数据管理技术领域,具体涉及一种面向分布式文件系统的小文件存储方法及装置。

背景技术

[0002] 随着大数据时代的到来,在各种数字化平台上每日会产生海量的数据,这些数据很多是以小文件的形式存在的。例如在FaceBook、微信、微博等平台,每日用户会上传大量的图片,这些图片的大小一般为数KB到数十MB;在抖音,快手等平台也会有很多用户上传海量的短视频,这些短视频大小一般也为数十MB到几十MB。相关的数据存储平台需要妥善存储这些数据,使得用户在使用这些数据时能够快速的获取自己想要读取的信息。
[0003] 现有技术中,一些常见的分布式文件系统的基本存储单元往往都大于这些小文件的大小。以HDFS为例,HDFS是目前最流行的分布式文件系统。HDFS在存储数据时,所使用的基本逻辑存储单元是“文件块”,一般的文件块大小默认设置为64MB或者128MB。当存入的文件大小小于该文件块大小时,仍然会使用一整个文件块来存储数据。因此,在使用HDFS存储短视频、音频、文档等小文件时,由于文件数量多而单个文件较小,会导致一批次数据在HDFS中产生大量的文件块。
[0004] 本发明申请人在实施本发明的过程中,发现现有技术中至少存在如下技术问题:
[0005] 当产生大量文件快时,会占用较多的内存空间,影响NameNode的性能,且NameNode数据查询性能下降,进而导致HDFS读/写数据效率下降。
[0006] 由此可知,现有技术中的方法存在占用大量内存空间的技术问题。

发明内容

[0007] 有鉴于此,本发明提供了一种面向分布式文件系统的小文件存储方法及装置,用以解决或者至少部分解决现有技术中的方法存在占用大量内存空间的技术问题。
[0008] 本发明第一方面提供了一种面向分布式文件系统的小文件存储方法,包括:
[0009] 步骤S1:基于用户的历史查询记录,构建查询图模型,查询图模型包括节点和边,节点和边具有权重,其中,查询图模型中的节点用以表示一个文件,节点的权重用以表示文件的查询次数,节点与节点之间的边的权重用以表示文件之间的共同访问关系;
[0010] 步骤S2:根据查询图模型中节点的权重和边的权重,计算各个节点对应的文件之间的关联度,基于计算出的关联度采用图聚类方法来对节点进行合并,获得合并结果,将合并结果作为文件合并策略;
[0011] 步骤S3:根据文件合并策略对待存储的文件进行存储。
[0012] 在一种实现方式中,步骤S1具体包括:
[0013] 步骤S1.1:采集用户的全部历史查询记录Q;
[0014] 步骤S1.2:初始化查询图模型G,其中,查询图模型G为空图;
[0015] 步骤S1.3:根据文件的查询次数和不同文件被共同访问的次数,确定查询图模型G中的节点和边的权重。
[0016] 在一种实现方式中,步骤S2具体包括:
[0017] 步骤S2.1:根据节点的权重和边的权重,计算各个节点对应的文件之间的关联度,给定节点N1,N2,两个节点的权重分别为w1,w2,节点之间边的权重为e,则两个节点对应的文件之间的关联度Cor(N1,N2)的计算方式如下:
[0018]
[0019] 步骤S2.2:根据关联度的大小,从具有最大关联度的节点对开始进行合并,直到查询图模型G中所有的节点合并完成,获得合并结果,将其作为文件合并策略。
[0020] 在一种实现方式中,步骤S2.2具体包括:
[0021] 步骤S2.2.1:从具有最大关联度的节点对开始进行合并后,更新节点的属性信息,其中,属性信息包括权重和体量,并根据更新后的属性信息重新计算被合并节点与周围节点之间的关联度大小;
[0022] 步骤S2.2.2:判断合并的节点的总体量大小是否达设定阈值,如果达到则将合并的节点中所包含子节点集合所对应文件集合作为需要合并的文件集,并从查询图模型G中删除对应节点集合;
[0023] 步骤S2.2.3:重复执行步骤S2.2.1~步骤S2.2.2,直到查询图
[0024] 在一种实现方式中,步骤S2.2.1中更新节点的属性信息具体包括:
[0025] 将合并后节点的权重设置为原始合并节点权重和减去边权重;
[0026] 将合并后新节点与周围节点的边权重设置为原始相关边的较大值。
[0027] 基于同样的发明构思,本发明第二方面提供了一种面向分布式文件系统的小文件存储装置,包括:
[0028] 查询图模型构建模块,用于基于用户的历史查询记录,构建查询图模型,查询图模型包括节点和边,节点和边具有权重,其中,查询图模型中的节点用以表示一个文件,节点的权重用以表示文件的查询次数,节点与节点之间的边的权重用以表示文件之间的共同访问关系;
[0029] 文件合并策略生成模块,用于根据查询图模型中节点的权重和边的权重,计算各个节点对应的文件之间的关联度,基于计算出的关联度采用图聚类方法来对节点进行合并,获得合并结果,将合并结果作为文件合并策略;
[0030] 文件存储模块,用于根据文件合并策略对待存储的文件进行存储。
[0031] 在一种实现方式中,查询图模型构建模块具体用于执行下述步骤:
[0032] 步骤S1.1:采集用户的全部历史查询记录Q;
[0033] 步骤S1.2:初始化查询图模型G,其中,查询图模型G为空图;
[0034] 步骤S1.3:根据文件的查询次数和不同文件被共同访问的次数,确定查询图模型G中的节点和边的权重。
[0035] 在一种实现方式中,文件合并策略生成模块具体用于执行下述步骤:
[0036] 步骤S2.1:根据节点的权重和边的权重,计算各个节点对应的文件之间的关联度,给定节点N1,N2,两个节点的权重分别为w1,w2,节点之间边的权重为e,则两个节点对应的文件之间的关联度Cor(N1,N2)的计算方式如下:
[0037]
[0038] 步骤S2.2:根据关联度的大小,从具有最大关联度的节点对开始进行合并,直到查询图模型G中所有的节点合并完成,获得合并结果,将其作为文件合并策略。
[0039] 基于同样的发明构思,本发明第三方面提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被执行时实现第一方面所述的方法。
[0040] 基于同样的发明构思,本发明第四方面提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如第一方面所述的方法。
[0041] 本申请实施例中的上述一个或多个技术方案,至少具有如下一种或多种技术效果:
[0042] 本发明提出了一种面向分布式文件系统的小文件存储方法,首先基于用户的历史查询记录,构建查询图模型,然后根据查询图模型中节点和边的权重,计算各个节点对应的文件之间的关联度,并基于关联度,采用图聚类方法生成文件合并策略,再根据文件合并策略对待存储的文件进行存储。
[0043] 相对于现有技术中的存储方法而言,本发明在基于历史查询记录建模方法中,构建了一种查询图模型,通过将文件以及文件之间的共同访问关系映射成图中节点以及节点之间的边权重关系,反应了文件自身的查询数与不同文件之间共同查询数量的关系。在基于查询图模型生成文件合并策略的方法中,基于节点和边权重的文件关联关系度量,可以有效反应不同文件之间的关联关系。并基于该关联关系,采用了图聚类方法来对节点进行合并,并根据最终合并结果来生成文件合并策略,实现了自动发现近似最优文件合并策略的目标。解决分布式文件系统中对海量小文件进行存储占用大量内存空间的技术问题。

附图说明

[0044] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0045] 图1为一种实施方案中面向分布式文件系统的小文件存储方法的流程图;
[0046] 图2为一种具体示例中查询记录示例以及生成的对应查询图的示意图;
[0047] 图3为一种具体示例中查询图节点合并过程示意图;
[0048] 图4为一种实施方案中面向分布式文件系统的小文件存储装置的结构框图;
[0049] 图5为本发明实施例中计算机可读存储介质的结构图;
[0050] 图6为本发明实施例中计算机设备的结构图。

具体实施方式

[0051] 本发明通过大量的研究与实践:发现在一个HDFS系统中存储大量的文件块会存在以下三个方面问题:
[0052] (1)NameNode内存压力。针对HDFS系统中的每一个文件块,都需要在管理者节点(NameNode)中生成一条相应的元数据来维护该数据块的相关基本信息,例如该文件块所关联的文件名,文件大小等。因此,NameNode中元数据信息的数据量是与系统中所存储文件块数量直接相关的。如果系统中存储了太多的文件块,将会导致NameNode中的需要存储的元数据数量过多,从而占用太多的内存空间,影响NameNode的性能。
[0053] (2)NameNode数据查询性能下降。过多的元数据除了会对NameNode的内存占用带来压力以外,还会导致HDFS系统查找数据的性能下降。在使用HDFS系统定位需要访问的某个文件时,是通过遍历NameNode中的全部元数据信息,从而进一步定位到需要访问的文件所对应的文件块所在的节点等定位信息的。因此,查询数据的效率直接与NameNode遍历元数据的速度相关。当系统中存储的元数据过多时,需要遍历的数据总量也会变多,因此查询数据的效率也会变慢。
[0054] (3)HDFS读/写数据效率下降。在通过HDFS读/写文件块数据时需要经历以下三个阶段:打开文件块传输流,读/写文件,关闭文件块传输流。在读写每个文件块时都需要经理这个过程。如果每个文件所对应的文件体量太小,在这一过程中,第二阶段,即读/写文件所花费的耗时就会很少,此时,第一和第三阶段的耗时与第二阶段的耗时比例就会显著增加,有更多的时间被花费在打开和关闭文件块传输流上。由于更多的时间被花费在这些阶段,导致花费在实际数据传输阶段的时间占比变小。直观的反应就是数据传输的效率变慢,因为更多的时间被花费在与数据传输无关的其他阶段。
[0055] 基于以上分析,采用传统的HDFS系统存储小文件会存在诸多问题。为了解决这种问题,本发明采用的发明构思是将若干个小文件合并成一个大文件,再存入HDFS系统中。这样一来,多个小文件被存入一个文件块内,可以极大的减少系统中的文件块数量,从而起到减少NameNode中元数据量的效果。
[0056] 然而,使用文件合并方法的一大问题在于使用什么样的策略来合并小文件。使用不同的策略合并文件将会导致在读取文件时效率的巨大差异。其原因在于HDFS系统并不支持直接读取文件块内的一部分数据。如果需要访问文件块内的一部分数据,那么需要将整个文件块全部读取出来。这一特性带来的直观影响是如果将不相关的小文件存在一个文件块内,为了读取其中一个小文件,需要将整个文件块全部读取出来,造成大量的额外读/写开销。如果能够将需要共同访问的文件都放在一个文件块内,通过读取一个文件块就可以将全部需要读取的文件全部取出。会极大的提升小文件的读取效率。下面使用一个简单的例子来说明这一场景。
[0057] 假设需要存储128个MB的小文件,通过将这128个文件合并成一个大文件,可以使用一个HDFS数块存下全部的文件,然而,为了读取其中的一个文件,则需要将整个128MB的大文件块全部读取出来。这就导致数据读取所产生的读/写被放大了128倍。然而,如果这128个文件都是被频繁共同访问的文件,例如属于同一个相册里的照片,那么,由于这些文件本身的相关性,用户往往需要同时读取全部的文件,这样一来,就只需要读取一个文件块就可以满足用户的读取需求。从而在解决小文件管理问题的同时,实现较高效率的文件读取性能。
[0058] 因此,使用文件合并方法管理小文件的重要技术挑战之一就是如何找到一个合适的文件合并策略。本发明所提出的“面向分布式文件系统的小文件存储方法”即是一种能够发现一个近似最优的文件合并策略的技术。本发明提供的技术方案主要存在以下三个贡献:
[0059] (1)本发明提出了一种查询模式建模发方法,通过分析HDFS中数据的历史访问模式,可以将该访问模式转换成图模型,再通过聚类算法找到那些被频繁共同访问的数据。该方法具有极强的普适性,可以适用于大量数据处理场景下,涉及对海量小文件的存储,管理问题。
[0060] (2)本发明创新性地提出了一种文件关联度度量方法。由于在判断哪些文件应当被划分到一个文件块的过程中,一个重要的挑战即是度量各个文件之间的相关度。通过将具有最大相关度的文件合并到同一个文件块中,才能够找到那些应当被合并到同一个数据块中的文件。这一过程需要合理的度量不同文件之间的相关度。本发明提出的关联度度量方法可以很好的表达在合并过程中,不同文件之间的关联度。
[0061] (3)本发明所提出的方法允许用户自定义想要合并的文件大小,并根据用户所设置的文件大小,自动调整文件合并策略。由于传统的HDFS系统往往默认将文件块大小设置成64MB或128MB。因此,现有的很多文件合并策略也默认将小文件合并成这些固定大小的文件块。然而,本技术考虑了用户需要自定义文件块大小的需求。本发明方法可以根据用户所选择的文件块大小,自动调整分块策略,使得生成的策略不仅可以近似逼近最优解,同时也能满足用户对文件块大小的需求。
[0062] 综上所述,“面向分布式文件系统的小文件存储技术”在面向分布式小文件存储的应用场景下具有广泛的应用价值。在科学研究领域也具有重要的意义。
[0063] 为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0064] 实施例一
[0065] 本实施例提供了一种面向分布式文件系统的小文件存储方法,请参见图1,该方法包括:
[0066] 步骤S1:基于用户的历史查询记录,构建查询图模型,查询图模型包括节点和边,节点和边具有权重,其中,查询图模型中的节点用以表示一个文件,节点的权重用以表示文件的查询次数,节点与节点之间的边的权重用以表示文件之间的共同访问关系。
[0067] 同时,该节点还具有体量属性v,其大小为节点对应文件的大小(例如一个15MB文件对应节点的体量为15MB)。需要说明的是,数据存储与管理领域,通常将大小在1MB以内的文件称为小文件,百万级数量及以上称为海量。
[0068] 在一种实施方式中,步骤S1具体包括:
[0069] 步骤S1.1:采集用户的全部历史查询记录Q;
[0070] 步骤S1.2:初始化查询图模型G,其中,查询图模型G为空图;
[0071] 步骤S1.3:根据文件的查询次数和不同文件被共同访问的次数,确定查询图模型G中的节点和边的权重。
[0072] 在具体的实施过程中,历史查询记录包括查询的次数和查询的文件。针对记录Q中的每一条查询记录所访问的文件集合F=(f1,f2,…,fk),如果G中不包含这一文件(fi G,fi∈F),则在查询图G中创建一个新的节点代表对应文件fi。如果G中包含这一文件,则将该文件在查询图G中对应节点权重加1。在查询图G中,针对F中的任意一对文件,fi∈F,fj∈F,为对应的节点之间添加一条边。如果该边已存在于查询图G中,则将对应边权重加1。G中不包含这一文件,表明该文件未被查询过,包含,则表明该文件被查询过。节点的权重表示文件的查询次数。若两个节点之间存在边,表示对应的两个文件被共同访问过,边的权重则表示被共同访问的次数。
[0073] 步骤S2:根据查询图模型中节点的权重和边的权重,计算各个节点对应的文件之间的关联度,基于计算出的关联度采用图聚类方法来对节点进行合并,获得合并结果,将合并结果作为文件合并策略。
[0074] 具体来说,通过步骤S1已经将历史查询记录转化成了查询图模型。接下来,步骤S2中使用图聚类算法来对查询图进行聚类。聚类结构即反映了哪些文件应当被合并成一个大文件。
[0075] 在一种实施方式中,步骤S2具体包括:
[0076] 步骤S2.1:根据节点的权重和边的权重,计算各个节点对应的文件之间的关联度,给定节点N1,N2,两个节点的权重分别为w1,w2,节点之间边的权重为e,则两个节点对应的文件之间的关联度Cor(N1,N2)的计算方式如下:
[0077]
[0078] 步骤S2.2:根据关联度的大小,从具有最大关联度的节点对开始进行合并,直到查询图模型G中所有的节点合并完成,获得合并结果,将其作为文件合并策略。
[0079] 具体来说,查询图模型中,图中的每一个节点都代表着需要存储的小文件。因此,在本发明中对查询图中节点的操作,都可以看作是对图中节点对应小文件的操作。
[0080] 在一种实施方式中,步骤S2.2具体包括:
[0081] 步骤S2.2.1:从具有最大关联度的节点对开始进行合并后,更新节点的属性信息,其中,属性信息包括权重和体量,并根据更新后的属性信息重新计算被合并节点与周围节点之间的关联度大小;
[0082] 步骤S2.2.2:判断合并的节点的总体量大小是否达设定阈值,如果达到则将合并的节点中所包含子节点集合所对应文件集合作为需要合并的文件集,并从查询图模型G中删除对应节点集合;
[0083] 步骤S2.2.3:重复执行步骤S2.2.1~步骤S2.2.2,直到查询图
[0084] 具体来说,体量即节点对应的文件所占的空间大小。在具有最大关联度的节点对合并完以后,重新计算被合并节点权重与体量,以及该节点与周围节点之间的关联度大小。设定阈值可以根据所使用的存储平台不同,自行定义,设定阈值即合并文件体量上限。例如,主流的分步式文件系统所能存储的单个文件大小具有阈值(例如HDFS系统为128MB)。
[0085] 当重复执行S2.2.1~步骤S2.2.2直到查询图 此时,可以得到复数个合并后的节点,这些节点同时也可以被看作多个小文件的集合。与对应的文件集合。这些文件集合就是在合并小文件时应当遵循的合并的策略。
[0086] 其中,步骤S2.2.1中更新节点的属性信息具体包括:
[0087] 将合并后节点的权重设置为原始合并节点权重和减去边权重;
[0088] 将合并后新节点与周围节点的边权重设置为原始相关边的较大值。
[0089] 具体来说,在对两个节点合并以后,为了能够正确描述新合并后的节点本身的属性(节点权重、体量等),以及新节点与周围节点之间的关联度,保证查询图的准确性,需要更新操作。
[0090] 1)合并后节点的权重为原始合并节点权重和减去边权重。即新权重w=w1+w2-e;
[0091] (2)合并后新节点与周围节点的边权重为原始相关边的较大值。即假设原始节点N1,N2分别与第三个节点Nk有相邻边,权重分别为ek1,ek2,则新节点N与Nk之间边的权重为ek=max(ek1,ek2)。
[0092] (3)新节点的体量为v=v1+v2,其中v1,v2分别代表两个参与合并的旧节点体量。
[0093] 步骤S3:根据文件合并策略对待存储的文件进行存储。
[0094] 具体来说,可以根据步骤S2中的文件合并策略对原始小文件进行合并,并将合并后的大文件存入分布式系统中。
[0095] 为了更清楚地说明本发明中采用的查询图模型生成文件合并策略的过程,下面通过具体的示例予以详细介绍。
[0096] 其中,图2为针对5个查询所生成的查询图的示例。其中,图中左侧Q1-Q5分别代表5个不同的查询,每个查询访问的文件以Filex的形式表示。图2右侧为基于这5个查询生成的查询图实例。图中每个节点分别代表一个文件,节点中的数字代表对应节点的权重,图中边上的数字代表边的权重。从图2的结果可以直观的看出,通过本发明的方法对历史查询记录进行建模,可以生成一个包含权重的大图,反应了各个文件各自的查询次数以及被共同访问的次数。
[0097] 图3为一个查询图的局部信息(子图),以及将该子图中具有最大关联关系的边合并以后,新合并节点与周围节点的权重更新结果。其中,图3a代表原始的查询子图,其节点和边上的数字分别代表节点权重以及边权重;图3b代表使用本发明提出的关联度度量计算以后,各个节点之间的关联关系,这些关联关系具体反映在边的数字中。图3c代表将具有最大关联关系的节点合并以后(合并节点4,5)的新节点权重以及其与周围节点权重大小的示例;图3d代表基于新的权重关系,计算的新节点与周围节点之间的关联度大小。
[0098] 总体来说,本发明具有以下主要有益效果:
[0099] 第一.本发明中所提出的文件合并策略,可以有效应用于大量需要在分布式文件系统中存储海量小文件的应用场景。
[0100] 尽管在本发明实施例中主要以HDFS系统为例,在实际应用中,还有许多分布式数据存储系统都使用了类似于HDFS的文件管理机制。在使用这些系统来存储小文件时,都会碰到HDFS中出现的类似问题。本发明所提出的技术可以有效解决传统分布式数据存储系统无法有效支持海量小文件存储的问题。
[0101] 第二.本发明可以自动发现近似最优的文件合并策略。
[0102] 与传统的简单文件合并策略不同。在很多应用场景下,尽管用户采用了文件合并策略来管理海量小文件,但他们在实际应用中,往往都是使用简单的规则作为文件合并策略,例如按照文件的先后顺序进行合并,或者是按照某一属性进行合并。这些规则尽管能够将小文件合并起来,但这些规则往往都不能反映文件的真实访问模式,因此使用这些规则生成的合并结果在数据读/写操作上效率并不高,而本发明则充分考虑了文件历史访问模式在文件合并策略生成过程中的重要性,因此所生成的策略能更好的反应文件访问模式,因而具备更高的读/写效率。
[0103] 第三.本发明支持用户自定义参数,具有较强的灵活性
[0104] 考虑到很多分布式数据存储系统应用环境下,用户可能会自定义文件块大小,本发明提出的方法可以有效支持用户在自定义文件块大小场景下的分块策略,具有较强的灵活性,可以适用于更多的应用场景。
[0105] 本发明中提出的方案,可以很好的解决在分布式数据存储系统应用环境下的小文件存储问题,该发明对解决互联网环境下的海量小文件存储问题具有重要意义与贡献。
[0106] 实施例二
[0107] 本实施例提供了一种面向分布式文件系统的小文件存储装置,请参见图4,该装置包括:
[0108] 查询图模型构建模块201,用于基于用户的历史查询记录,构建查询图模型,查询图模型包括节点和边,节点和边具有权重,其中,查询图模型中的节点用以表示一个文件,节点的权重用以表示文件的查询次数,节点与节点之间的边的权重用以表示文件之间的共同访问关系;
[0109] 文件合并策略生成模块202,用于根据查询图模型中节点的权重和边的权重,计算各个节点对应的文件之间的关联度,基于计算出的关联度采用图聚类方法来对节点进行合并,获得合并结果,将合并结果作为文件合并策略;
[0110] 文件存储模块203,用于根据文件合并策略对待存储的文件进行存储。
[0111] 在一种实现方式中,查询图模型构建模块201具体用于执行下述步骤:
[0112] 步骤S1.1:采集用户的全部历史查询记录Q;
[0113] 步骤S1.2:初始化查询图模型G,其中,查询图模型G为空图;
[0114] 步骤S1.3:根据文件的查询次数和不同文件被共同访问的次数,确定查询图模型G中的节点和边的权重。
[0115] 在一种实现方式中,文件合并策略生成模块202具体用于执行下述步骤:
[0116] 步骤S2.1:根据节点的权重和边的权重,计算各个节点对应的文件之间的关联度,给定节点N1,N2,两个节点的权重分别为w1,w2,节点之间边的权重为e,则两个节点对应的文件之间的关联度Cor(N1,N2)的计算方式如下:
[0117]
[0118] 步骤S2.2:根据关联度的大小,从具有最大关联度的节点对开始进行合并,直到查询图模型G中所有的节点合并完成,获得合并结果,将其作为文件合并策略。
[0119] 在一种实现方式中,文件合并策略生成模块202还用于执行下述步骤:
[0120] 步骤S2.2.1:从具有最大关联度的节点对开始进行合并后,更新节点的属性信息,其中,属性信息包括权重和体量,并根据更新后的属性信息重新计算被合并节点与周围节点之间的关联度大小;
[0121] 步骤S2.2.2:判断合并的节点的总体量大小是否达设定阈值,如果达到则将合并的节点中所包含子节点集合所对应文件集合作为需要合并的文件集,并从查询图模型G中删除对应节点集合;
[0122] 步骤S2.2.3:重复执行步骤S2.2.1~步骤S2.2.2,直到查询图
[0123] 在一种实现方式中,文件合并策略生成模块202还用于执行下述步骤:
[0124] 将合并后节点的权重设置为原始合并节点权重和减去边权重;
[0125] 将合并后新节点与周围节点的边权重设置为原始相关边的较大值。
[0126] 由于本发明实施例二所介绍的装置,为实施本发明实施例一中面向分布式文件系统的小文件存储方法所采用的装置,故而基于本发明实施例一所介绍的方法,本领域所属人员能够了解该装置的具体结构及变形,故而在此不再赘述。凡是本发明实施例一的方法所采用的装置都属于本发明所欲保护的范围。
[0127] 实施例三
[0128] 基于同一发明构思,本申请还提供了一种计算机可读存储介质300,请参见图5,其上存储有计算机程序311,该程序被执行时实现实施例一中的方法。
[0129] 由于本发明实施例三所介绍的计算机可读存储介质,为实施本发明实施例一中面向分布式文件系统的小文件存储所采用的计算机可读存储介质,故而基于本发明实施例一所介绍的方法,本领域所属人员能够了解该计算机可读存储介质的具体结构及变形,故而在此不再赘述。凡是本发明实施例一的方法所采用的计算机可读存储介质都属于本发明所欲保护的范围。
[0130] 实施例四
[0131] 基于同一发明构思,本申请还提供了一种计算机设备,请参见图6,包括存储401、处理器402及存储在存储器上并可在处理器上运行的计算机程序403,处理器402执行上述程序时实现实施例一中的方法。
[0132] 由于本发明实施例四所介绍的计算机设备为实施本发明实施例一中面向分布式文件系统的小文件存储方法所采用的计算机设备,故而基于本发明实施例一所介绍的方法,本领域所属人员能够了解该计算机设备的具体结构及变形,故而在此不再赘述。凡是本发明实施例一中方法所采用的计算机设备都属于本发明所欲保护的范围。
[0133] 尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
[0134] 显然,本领域的技术人员可以对本发明实施例进行各种改动和变型而不脱离本发明实施例的精神和范围。这样,倘若本发明实施例的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。