海量小文件存储方法、装置、nfs服务节点和存储介质
技术领域
1.本技术涉及文件存储领域,具体而言,涉及一种海量小文件存储方法、装置、nfs服务节点和存储介质。
背景技术:2.在网络环境高速发展的情况下,各种数据呈现出几何式增长的状态,同时往往会产生百亿级的海量小文件,在此情况下,海量小文件问题是工业界以及学术界公认的难题。
3.目前,为了满足海量小文件存储的低时延需求,通常需要对硬盘驱动器设置缓存器作为磁盘缓冲区,例如固态硬盘等,以降低海量小文件存储的访问时延,但该方法需要在该缓存器中持续写入,从而会严重缩短缓存器的使用寿命。
技术实现要素:4.有鉴于此,本技术的目的在于提供一种海量小文件存储方法、装置、nfs服务节点和存储介质,以避免在缓存器中持续写入,从而可在满足文件存储的低时延要求的同时,延长缓存器的使用寿命。
5.为了实现上述目的,本技术实施例采用的技术方案如下:
6.第一方面,本技术提供一种海量小文件存储方法,应用于多节点nfs服务集群中的nfs服务节点,所述方法包括:
7.根据当前时间段内请求队列对应的写入请求添加数量、所述当前时间段的前一时间段内存储至数据存储集群中的文件数量、所述请求队列在所述当前时间段的前一时间段的结束时刻对应的写入请求数量,计算所述请求队列在所述当前时间段内的增长因子;所述请求队列包括文件的写入请求,所述增长因子表征所述请求队列中的写入请求的增长情况;
8.根据所述增长因子确定是否启用所述nfs服务节点中的缓存器对所述请求队列中的文件进行存储。
9.在可选的实施方式中,所述根据所述增长因子确定是否启用所述nfs服务节点中的缓存器对所述请求队列中的文件进行存储,包括:
10.若所述增长因子不小于第一阈值,则启用所述nfs服务节点中的缓存器,并通过所述缓存器和所述数据存储集群对所述请求队列中的文件进行存储;
11.若所述增长因子小于所述第一阈值,则通过所述数据存储集群对所述请求队列中的文件进行存储。
12.在可选的实施方式中,所述若所述增长因子小于所述第一阈值,则通过所述数据存储集群对所述请求队列中的文件进行存储,包括:
13.若所述增长因子不大于第二阈值,则读取出所述缓存器存储的文件,并通过所述数据存储集群对读取出的文件进行存储;
14.若所述增长因子大于所述第二阈值且小于所述第一阈值,则通过所述数据存储集
群对所述请求队列中的文件进行存储。
15.在可选的实施方式中,所述方法还包括:
16.针对所述请求队列中已存储的目标文件,生成所述目标文件对应的初始文件标识符,并将所述目标文件的文件名与所述目标文件对应的初始文件标识符存储至元数据管理集群。
17.在可选的实施方式中,所述方法还包括:
18.在通过所述缓存器对所述请求队列中的目标文件进行存储,并将所述目标文件的文件名与所述目标文件对应的初始文件标识符存储至元数据管理集群后,从所述多节点nfs服务集群中选取备份nfs服务节点,并向所述备份nfs服务节点发送目标文件备份请求,以便所述备份nfs服务节点根据所述目标文件备份请求对所述目标文件进行存储,并生成所述目标文件对应的备份文件标识符,根据所述元数据管理集群中所述目标文件对应的初始文件标识符和所述备份文件标识符,生成所述目标文件对应的文件标识符,并根据所述文件标识符对所述元数据管理集群中所述目标文件对应的所述初始文件标识符进行更新。
19.在可选的实施方式中,所述方法还包括:
20.在读取出所述缓存器存储的文件,并通过所述数据存储集群对读取出的文件进行存储后,生成所述文件的新文件标识符,并根据所述新文件标识符更新所述元数据管理集群中所述文件对应的文件标识符。
21.在可选的实施方式中,所述根据当前时间段内所述请求队列中的写入请求添加数量、所述当前时间段的前一时间段内存储至数据存储集群中的文件数量、所述请求队列在所述当前时间段的前一时间段的结束时刻对应的写入请求数量,计算所述请求队列在所述当前时间段内的增长因子,包括:
22.根据如下公式计算所述请求队列在所述当前时间段内的增长因子:
23.h=(y+z-x)/x
24.其中,h表征所述请求队列在所述当前时间段内的增长因子,y表征所述请求队列在所述当前时间段的前一时间段的结束时刻对应的写入请求数量,z表征当前时间段内所述请求队列中的写入请求添加数量,x表征所述当前时间段的前一时间段内存储至数据存储集群中的文件数量。
25.第二方面,本技术提供一种海量小文件存储装置,应用于多节点nfs服务集群中的nfs服务节点,所述装置包括:
26.计算模块,用于根据当前时间段内请求队列对应的写入请求添加数量、所述当前时间段的前一时间段内存储至数据存储集群中的文件数量、所述请求队列在所述当前时间段的前一时间段的结束时刻对应的写入请求数量,计算所述请求队列在所述当前时间段内的增长因子;所述请求队列包括文件的写入请求,所述增长因子表征所述请求队列中的写入请求的增长情况;
27.存储模块,用于根据所述增长因子确定是否启用所述nfs服务节点中的缓存器对所述请求队列中的文件进行存储。
28.第三方面,本技术提供一种nfs服务节点,包括处理器和存储器,所述存储器存储有能够被所述处理器执行的计算机程序,所述处理器可执行所述计算机程序以实现前述实施方式任一所述的方法。
29.第四方面,本技术提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如前述实施方式中任一项所述的方法。
30.本技术实施例提供的海量小文件存储方法、装置、nfs服务节点和存储介质,针对请求队列计算其在当前时间段内的增长因子,从而可以获得请求队列中的写入请求的增长情况,则可根据该增长情况确定在当前状况下是否需要启用缓存器对请求队列中的文件进行存储。由于通过计算增长因子从而确定是否启用缓存器,因此能够避免在缓存器中持续写入,从而可在满足文件存储的低时延要求的同时,延长缓存器的使用寿命。
31.为使本技术的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
32.为了更清楚地说明本技术实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本技术的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
33.图1示出了ssd/hdd分层混存架构的示意图;
34.图2示出了一天内不同时刻海量小文件存储数量的统计图;
35.图3示出了文件存储系统的系统架构图;
36.图4示出了本技术实施例提供的nfs服务节点的方框示意图;
37.图5示出了本技术实施例提供的海量小文件存储方法的一种流程示意图;
38.图6示出了本技术实施例提供的海量小文件存储方法的另一种流程示意图;
39.图7示出了本技术实施例提供的海量小文件存储方法的又一种流程示意图;
40.图8示出了本技术实施例提供的海量小文件存储方法的再一种流程示意图;
41.图9a示出了文件的聚合存储示意图;
42.图9b示出了全局大文件id格式示意图;
43.图10a示出了三节点nfs服务集群的架构图;
44.图10b示出了写入逻辑架构图;
45.图11示出了本技术实施例提供的文件存储装置的功能模块图。
46.图标:100-ssd/hdd分层混存架构;110-ssd;120-hdd;200-多节点nfs服务集群;210-数据存储集群;220-元数据管理集群;300-nfs服务节点;310-存储器;320-处理器;330-通信模块;20-高峰期分界线;21-低谷期分界线;400-三节点nfs服务集群;410-第一nfs服务节点;411-缓存器;412-存储模块;420-第二nfs服务节点;430-第三nfs服务节点;500-计算预测模块;510-缓存模块。
具体实施方式
47.下面将结合本技术实施例中附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本技术实施例的组件可以以各种不同的配置来布置和设计。
48.因此,以下对在附图中提供的本技术的实施例的详细描述并非旨在限制要求保护
的本技术的范围,而是仅仅表示本技术的选定实施例。基于本技术的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本技术保护的范围。
49.需要说明的是,术语“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
50.目前,在互联网、物联网、云计算等高速发展的环境下,各类数据呈现出爆发式增长的趋势,各种数据不仅需要的存储容量巨大,而且还具有数据种类繁多、大小变化大、流动快等特点,因此往往会产生各种文件尺寸较小的小文件,这种小文件的尺寸大小在几kb到几mb不等,且这种小文件的数量巨大,往往在百亿数量级以上,这种百亿数量级以上的小文件即为海量小文件(lots of small files,losf)。
51.海量小文件在存储时具有两大特点,其一为文件数量巨大,其二为文件尺寸较小,因此,海量小文件在存储时对时延的要求较高,通常要求单个小文件的访问时延在秒级以内,而硬盘驱动器(hard disk drive,hdd)由于其性能特性,无法满足海量小文件存储的低时延需求,因此,现有技术中往往采用全闪存架构,或混存架构对文件进行存储,从而降低小文件的访问时延。
52.针对混存架构,可对硬盘驱动器设置缓存器作为磁盘缓冲区,在存储时首先将大量的文件存储到该缓存器中,由于缓存器的硬件资源空间有限,只能实现短时间存储,因此,之后需要将该缓存器中的文件存入硬盘驱动器中,以减少落入硬盘驱动器中的文件数量,在该模式下,文件在写入缓存器之后可直接返回写入成功的状态,从而可极大降低小文件的访问时延。
53.现有技术中一般采用固态硬盘(solid state disk,ssd)作为硬盘驱动器的磁盘缓冲区,即采用ssd/hdd分层混存架构对海量小文件进行存储,请参照图1,为现有技术中采用的ssd/hdd分层混存架构100的示意图,该ssd/hdd分层混存架构100包括:ssd110和hdd120。其中,ssd可接收待写入文件的文件写入请求并将待写入文件进行存储,同时向用户端返回写入成功的响应,之后可将其中保存的文件相继存储至hdd。
54.可见,若采用缓存器作为硬盘驱动器的磁盘缓冲区,则需要持续不断地在该缓存器中进行写入和擦除,由于缓存器中的可擦除次数有限,因此,该方式会严重缩短缓存器的使用寿命。
55.此外,针对ai安防领域,可通过对小文件存储数量进行全天候统计,以获得海量小文件存储数量随时间的变化,具体的,通过从现网环境抓取的一整天的真实业务统计分布数据,可模拟得到一天之内的小文件存储数量在不同时间的波动情况,具体地,请参见图2,为一天内不同时刻海量小文件存储数量的统计图,其中,横轴表示时间,纵轴表示每秒钟的操作数量(operation per second,ops),在此基础上,图2表示不同时间下的海量小文件存储操作数量的变化情况,可以反馈出海量小文件存储的业务特性随时间的增长变化,根据图2可知,海量小文件存储的业务特性在一天内的不同时刻可以表现为早晚高峰期双波峰
形态,即在早晚上下班高峰期分别会出现小文件存储操作数量的成倍增长状况,并表现为出现小文件存储的高峰期状态,且高峰期状态下的小文件ops是白天其余时间的数倍,是夜里其余时间的数十倍,此外,高峰期持续时间不长,仅有一个小时左右。显然的,在ai安防领域的海量小文件存储场景中,小文件存储的高峰期状态持续时间较短,但在高峰期状态下小文件的ops较大。
56.在此基础上,为了实现ai安防领域的海量小文件存储,现有技术中需要根据小文件存储业务的高峰期状态下的ops确定所需的缓存器硬件资源,由于高峰期状态下小文件的ops很大,因此往往需要较多的缓存器才能满足高峰期时海量小文件存储的低时延要求。但由于小文件存储的高峰期状态持续时间较短,大多数时间内小文件ops较低,因此,一天中的多数时间(约91.67%的时间)都会存在缓存器硬件资源过剩的问题。
57.以上述ssd/hdd分层混存架构为例,若一天当中文件存储量最大的时候ops为6000,而hdd的存储容量为3000,ssd的存储容量为1000,则此时需要6个ssd才能够满足海量小文件存储的低时延要求,而根据上述分析,由于高峰期仅有一个小时左右,因此在其他时间内,小文件存储的ops较小,当ops较小时6个ssd的硬件资源无法被充分利用,从而会造成资源的浪费。
58.因此,基于以上缺陷,本技术实施例提供一种海量小文件存储方法,通过计算增长因子从而确定是否启用缓存器,因此能够避免在缓存器中持续写入并最大化利用缓存器硬件资源,从而可在满足文件存储的低时延要求的同时,延长缓存器的使用寿命。
59.下面结合附图,对本技术的一些实施方式做详细说明,在不冲突的情况下,下述的实施例以及实施例中的特征可以相互结合。请参见图3,为一种文件存储系统的系统架构图,该文件存储系统包括多节点nfs(network file system,网络文件系统)服务集群200、数据存储集群210、元数据管理集群220。
60.其中,该多节点nfs服务集群200用于nfs协议接入访问处理,将待存储文件的文件内容数据存储值数据存储集群210中,并将待存储文件的元数据存储置元数据管理集群220中;该数据存储集群210用于对存储介质空间进行分配和故障管理,通过跨节点多副本或纠删冗余策略从而提供可靠的、分布化式的数据管理能力,聚焦于可靠性、高性能和可扩展性等存储底层能力的实现,对外提供基于文件语义的存储空间访问能力;该元数据管理集群220用于管理和维护命名空间中的目录树层级关系、文件权限等基本元数据信息,以及nfs用户配额、权限和服务质量(quality of service,qos)等增值服务信息,通过多主多备方式提供可靠的、分布式化的元数据管理能力,聚焦于数据库事务正确执行的四个基本要素(atomicity、consistency、isolation、durability,acid)等数据库底层能力的实现,对外提供元数据访问能力。
61.可选地,该多节点nfs服务集群200可以为多个nfs服务节点构成的集群,该数据存储集群210可以为多个硬盘驱动器构成的集群。
62.在一种可能实现的方式中,各个nfs服务节点可分别为不同的nfs服务器,该数据存储集群210可挂载在一个数据存储服务器上,该元数据管理集群220可以挂载在一个元数据管理服务器上。
63.请参照图4,为本技术实施例提供的nfs服务节点300的方框示意图。所述nfs服务节点包括存储器310、处理器320及通信模块330。所述存储器310、处理器320以及通信模块
330各元件相互之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件相互之间可通过一条或多条通讯总线或信号线实现电性连接。
64.其中,存储器310用于存储程序或者数据。所述存储器可以是,但不限于,随机存取存储器(random access memory,ram),只读存储器(read only memory,rom),可编程只读存储器(programmable read-only memory,prom),可擦除只读存储器(erasable programmable read-only memory,eprom),电可擦除只读存储器(electric erasable programmable read-only memory,eeprom)等。
65.处理器320用于读/写存储器中存储的数据或程序,并执行相应地功能。
66.通信模块330用于通过所述网络建立所述nfs服务节点与其它通信终端之间的通信连接,并用于通过所述网络收发数据。
67.应当理解的是,图4所示的结构仅为nfs服务节点的结构示意图,所述nfs服务节点还可包括比图4中所示更多或者更少的组件,或者具有与图4所示不同的配置。图4中所示的各组件可以采用硬件、软件或其组合实现。
68.接下来以上述多节点nfs服务集群中的一个nfs服务节点为执行主体,介绍本技术实施例提供的海量小文件存储方法,具体地,请参见图5,为本技术实施例提供的海量小文件存储方法的一种流程示意图,该方法包括:
69.步骤s30,根据当前时间段内请求队列对应的写入请求添加数量、当前时间段的前一时间段内存储至数据存储集群中的文件数量、请求队列在当前时间段的前一时间段的结束时刻对应的写入请求数量,计算请求队列在当前时间段内的增长因子;
70.其中,请求队列包括文件的写入请求,增长因子表征请求队列中的写入请求的增长情况。
71.可选地,可在该nfs服务节点中设置nfs协议栈和存储模块,该nfs协议栈用于在接收到用户请求时,将待写入文件的用户请求封装转化为该文件的写入请求,并加入到请求队列,等待存储;该存储模块中用于存储多个文件的写入请求组成的请求队列。
72.可选地,当该文件的写入请求添加至请求队列后,该第一nfs服务节点可向用户返回“写入成功”的响应。
73.在一种可能的实现方式中,nfs服务节点在接收到待写入文件的用户请求后,可将该文件的内容转化为数据格式,从而得到该待写入文件的内容数据,之后将该待写入文件的内容数据和该待写入文件的属性数据封装为该文件的写入请求,将封装后得到的写入请求加入到请求队列中等待存储。
74.可以理解的,该请求队列为各个待写入文件的写入请求组成的队列,每秒钟的写入请求数量即为上述的ops,在此基础上,该请求队列中的写入请求数量在不同时刻会呈现一定的波动,因此,可通过计算该请求队列的增长因子获知该请求队列中的写入请求的增长情况。在本实施例中,可将每个增加到请求队列中的写入请求理解为一个业务,则各个时刻的请求队列中的写入请求的增长情况,可以反馈文件存储ops的增长情况,进而反馈当前时间段内的小文件存储的业务特性。
75.在本实施例中,可通过当前时间段内请求队列对应的写入请求添加数量、当前时间段的前一时间段内存储至数据存储集群中的文件数量、以及请求队列在当前时间段的前一时间段的结束时刻对应的写入请求数量,计算该请求队列在当前时间段的增长因子。
76.可选地,可按照预设时间间隔计算请求队列的增长因子,每隔预设时间间隔的时长后,则进行一次增长因子计算,若当前时刻为需要计算增长因子的时刻,则上述当前时间段即为以当前时刻为结束时刻,距当前时刻预设时间间隔的时刻为开始时刻的时间段;该当前时间段的前一时间段为,以当前时间段的开始时刻为结束时刻,距当前时间段的开始时刻预设时间间隔的时刻为开始时刻的时间段。可选地,该预设时间间隔可提前设置并进行保存。
77.在一个示例中,若预设时间间隔为1s,当前时刻为10:00,则当前时间段即为09:59~10:00;当前时间段的前一时间段为09:58~09:59。
78.可选地,该请求队列在当前时间段的前一时间段的结束时刻对应的写入请求数量,即为在当前时间段的前一时间段结束时,该请求队列中积压的写入请求数量,可以理解的,在上述示例中,该写入请求数量即为09:59的时刻下,该请求队列中的写入请求数量。
79.在本实施例中,可对请求队列中的写入请求添加数量、存储至数据存储集群中的文件数量、以及请求队列中的写入请求数量进行实时监测,从而在计算增长因子时可直接使用该数值进行计算。可选地,可根据如下公式计算请求队列在当前时间段内的增长因子:
80.h=(y+z-x)/x
81.其中,h表征请求队列在当前时间段内的增长因子,y表征请求队列在当前时间段的前一时间段的结束时刻对应的写入请求数量,z表征当前时间段内请求队列中的写入请求添加数量,x表征当前时间段的前一时间段内存储至数据存储集群中的文件数量。
82.步骤s31,根据增长因子确定是否启用nfs服务节点中的缓存器对请求队列中的文件进行存储。
83.可选地,该nfs服务节点还包括缓存器,若根据增长因子判定当前应当启用该缓存器时,该缓存器可对请求队列中的文件进行存储。可选地,可通过开启存储多个文件的写入请求的存储模块与缓存器之间的特殊通道从而启用缓存器,也可以通过向缓存器发送存储指令从而启用缓存器,本技术对此不做限制。
84.可选地,由于计算得到的增长因子为当前时间段内的增长因子,且该增长因子可以反馈当前时间段内小文件存储的业务特性,因此,在计算得到当前时间段内的增长因子后,可以根据当前时间段内的增长因子对当前时间段的下一时间段的小文件存储的业务特性进行预测,从而确定是否需要启用nfs服务节点中的缓存器对请求队列中的文件进行存储。
85.本技术实施例提供的海量小文件存储方法,通过根据当前时间段内请求队列对应的写入请求添加数量、当前时间段的前一时间段内存储至数据存储集群中的文件数量、请求队列在当前时间段的前一时间段的结束时刻对应的写入请求数量,计算请求队列在当前时间段内的增长因子,从而可根据增长因子确定是否启用nfs服务节点中的缓存器对请求队列中的文件进行存储。由于通过计算增长因子从而确定是否启用缓存器,因此能够避免在缓存器中持续写入,从而可在满足文件存储的低时延要求的同时,延长缓存器的使用寿命。
86.可选地,可通过设置阈值的方式判断是否启用缓存器,具体的,在图5的基础上,图6为本技术实施例提供的海量小文件存储方法的另一流程示意图,请参见图6,上述步骤s31还可通过如下步骤实现:
87.步骤s31-1,若增长因子不小于第一阈值,则启用nfs服务节点中的缓存器,并通过缓存器和数据存储集群对请求队列中的文件进行存储;
88.可选地,由于请求队列中的写入请求包括待写入文件的文件内容数据和文件属性数据,因此,该通过缓存器和数据存储集群对请求队列中的文件进行存储,即为将写入请求中的文件内容数据存储至缓存器和数据存储集群中。
89.可以理解的,该缓存器和数据存储集群可从请求队列中的写入请求中获取待写入文件的文件内容数据,进而对其进行存储。
90.在本实施例中,可对小文件存储的业务特性进行划分,从而针对不同的业务特性,确定如何对请求队列中的文件进行存储。具体地,可预先根据需求设置第一阈值并进行保存,在计算得到增长因子后,将该增长因子与第一阈值进行对比,若增长因子不小于第一阈值,则说明该请求队列中的写入请求的增长情况表征该请求队列此时正处于高峰期状态,即当前时间段小文件存储的业务特性体现为高峰期状态,在此基础上可预测当前时间段的下一时间段内该小文件存储的业务状态也为高峰期状态。请继续参照图2,若该增长因子不小于第一阈值,则说明小文件存储的业务特性体现为其处于图2中高峰期分界线20以上的部分,即高峰期状态,此时请求队列中的写入请求较多,因此需要启用缓存器对请求队列中的文件进行存储。
91.在本实施例中,若该增长因子不小于第一阈值,则可通过缓存器和数据存储集群二者同时对请求队列中的文件进行存储,即利用缓存器对本应该存储进数据存储集群的文件进行分流存储。
92.显然的,由于在此情况下可同时采用缓存器和数据存储集群实现对请求队列中的写入请求的存储,因此可减少缓存器的设置数量。
93.在一个示例中,若一天当中文件存储量最大的时候ops为6000,而数据存储集群的存储容量为3000,缓存器的存储容量为1000,则此时只需要3个缓存器即可能够满足海量小文件存储的低时延要求,相较于现有技术中采用6个ssd的方案,本技术实施例所提供的方案可在相同的条件下减少缓存器的需求个数。
94.在一种可能的实现方式中,该第一阈值可以取值为2,该缓存器可在启用后根据自身性能和存储容量,从请求队列中获取写入请求中的文件内容数据并对其进行存储;该数据存储集群也可根据自身性能和存储容量,从请求队列中获取写入请求中的文件内容数据并对其进行存储。
95.可选地,当缓存器或数据存储集群对写入请求中的内容数据进行存储的时候,可采用聚合存储的方式,即将各个文件以首尾相连的方式聚合为一个大文件进行存储。
96.在一种可能的实现方式中,该数据存储集群中的大文件尺寸为1gb,该缓存器中的大文件尺寸为64mb。可以理解的,若将多个文件通过聚合存储的方式以大文件的形式存储在数据存储集群中,则该大文件尺寸最大为1gb;若将多个文件通过聚合存储的方式以大文件的形式存储在缓存器中,则该大文件尺寸最大为64mb。
97.步骤s31-2,若增长因子小于第一阈值,则通过数据存储集群对请求队列中的文件进行存储。
98.可选地,由于请求队列中的写入请求包括待写入文件的文件内容数据和文件属性数据,因此,该通过数据存储集群对请求队列中的文件进行存储,即为将写入请求中的文件
内容数据存储至数据存储集群中。
99.可选地,若增长因子小于第一阈值,则说明此时请求队列属于非高峰期状态,即小文件存储的业务特性表现为非高峰期状态,因此可不启用该缓存器,直接通过数据存储集群对请求队列中的文件进行存储。
100.在本实施例中,该数据存储集群可根据自身性能和存储容量,从请求队列中获取写入请求并对其进行存储。
101.本技术实施例提供的海量小文件存储方法,通过设置第一阈值,判断增长因子是否大于该第一阈值,从而确定该请求队列中的写入请求的增长情况是否表征该请求队列处于高峰期状态,以仅在高峰期状态下启用缓存器,从而通过缓存器和数据存储集群同时对请求队列中的文件进行存储,而在请求队列不处于高峰期的情况下不启用缓存器,仅通过数据存储集群对请求队列中的文件进行存储,因此可实现仅在高峰期时利用缓存器对文件进行分流存储,实现缓存器资源的最大利用,同时也满足了文件存储的低时延要求。
102.可选地,根据图2可知,当小文件存储的业务特性表现为非高峰期状态时,在一定时间内呈现增长趋势较为平缓的状态,而在其他时间内呈现持续下降的低谷状态,在此基础上,可对小文件存储的非高峰期状态进行细化,分为平稳期状态和低谷期状态,具体地,请继续参照图2,低谷期分界线21可将小文件存储的非高峰期状态分为平稳期状态和低谷期状态。其中,高峰期分界线20与低谷期分界线21之间的部分表征小文件存储的业务状态为平稳期状态,低谷期分界线21以下的部分表征小文件存储的业务状态为低谷期状态。显然的,当小文件存储的业务特性表现为平稳期状态时,请求队列中的写入请求的增长较为平缓,不同时刻下的ops相对一致;而当该小文件存储的业务特性表现为低谷期状态时,请求队列中的写入请求持下降趋势,某些时刻的ops趋近于0。
103.在本实施例中,可以理解的,小文件存储的业务特性具体可表现为以下三种状态:高峰期状态、平稳期状态以及低谷期状态。考虑到请求队列中的写入请求的增长情况,在该请求队列分别处于平稳期状态和低谷期状态时并不相同,因此,可设置第二阈值以判断该请求队列所处的状态,从而确定如何进行文件存储,具体地,在图6的基础上,图7为本技术实施例提供的海量小文件存储方法的又一流程示意图,请参照图7,上述步骤s31-2还可以通过如下步骤实现:
104.步骤s31-2-1,若增长因子不大于第二阈值,则读取出缓存器存储的文件,并通过数据存储集群对读取出的文件进行存储;
105.可选地,可预先设置第二阈值并进行保存,若增长因子不大于第二阈值,则说明该请求队列中的写入请求的增长情况表征该请求队列此时正处于低谷期状态,即当前时间段内小文件存储的业务特性表现为低谷期状态。
106.在本实施例中,若该请求队列处于低谷期状态,则此时的文件ops均较小,因此,可将之前缓存器中存储的文件内容数据读出并保存至数据存储集群中。
107.可选地,由于在高峰期时,多个文件通过聚合以大文件的形式保存在缓存器中,因此,若要将其读出,则需要对缓存器中的大文件进行分解,从而读取出各个文件内容数据,将该文件内容数据重新封装为该文件对应的写入请求,并将其添加到请求队列中。
108.可选地,当多个缓存器中的大文件被解析完全后,可调用缓存器删除文件接口将该缓存器中的大文件进行删除。
109.由于数据存储集群可根据自身性能和存储容量,从请求队列中获取写入请求并对该写入请求中的文件内容数据进行存储,因此可将高峰期时存入到缓存器中的文件重新存储到数据存储集群中。可以理解的,将多个文件存储在缓存器中是为了减小高峰期时数据存储集群的存储压力,将多个文件在高峰期时存储在缓存器中并非终身存储,而是暂时存储,缓存器中的文件还需要重新被存储至数据存储集群中。
110.步骤s31-2-2,若增长因子大于第二阈值且小于第一阈值,则通过数据存储集群对请求队列中的文件进行存储。
111.可选地,若该增长因子大于第二阈值且小于第一阈值,则说明该请求队列中的写入请求的增长情况表征该请求队列此时正处于平稳期状态,此时,请求队列中的写入请求的增长较为平缓,且文件ops处于高峰期与低谷期之间,因此,可直接通过数据存储集群对请求队列中的文件进行存储。
112.可以理解的,该第一阈值大于第二阈值,在一种可能的实现方式中,该第二阈值可以为1。
113.本技术实施例提供的海量小文件存储方法,通过设置第二阈值,判断增长因子是否不大于第二阈值,从而确定该请求队列处于低谷期状态还是平稳期状态,因此,可在请求队列处于平稳期状态时,通过数据存储集群对所述请求队列的写入请求中的文件进行存储,并且可在请求队列处于低谷期状态时,将缓存器中的文件读取出并通过数据存储集群对读取出的文件进行存储,从而在满足文件存储的低时延需求的同时,将缓存器中的文件重新保存至数据存储集群中。此外,可通过计算预测小文件存储的业务状态,从而可实现针对小文件存储的高峰期状态、平稳期状态以及低谷期状态,智能化选择不同的存储方式进行文件存储,不仅满足了文件存储的低时延需求,也最大程度的利用了缓存器的硬件资源,同时极大化地延长了缓存器的使用寿命。可选地,缓存器和数据存储集群中所保存的均为文件的内容数据,由于针对某一待写入文件,当该文件的内容数据保存至相应的缓存器和数据存储集群中时,该文件的元数据也应当进行保存。该元数据为用于描述文件属性的数据,包括该文件的文件名、文件尺寸大小以及该文件的存储位置等。
114.可以理解的,针对某一待写入文件,其写入请求中包含有该文件的文件内容数据和文件属性数据,则可在该文件被保存后根据该文件的属性数据和存储位置生成该文件的元数据,并将该文件的元数据保存至元数据管理集群中,具体地,在图5的基础上,图8为本技术实施例提供的海量小文件存储方法的再一流程示意图,请参照图8,该方法还包括:
115.步骤s32,针对请求队列中已存储的目标文件,生成目标文件对应的初始文件标识符,并将目标文件的文件名与目标文件对应的初始文件标识符存储至元数据管理集群。
116.可选地,该目标文件为文件内容数据已保存至数据存储集群中、或保存至缓存器中,而该文件的元数据并未进行保存的文件;该文件标识符表征该文件的存储位置等属性;目标文件对应的初始文件标识符为,该目标文件第一次存储至数据存储集群时、或第一次存储至缓存器时生成的文件标识符。
117.可选地,可在目标文件存储至数据存储集群、或存储至缓存器的同时生成该目标文件的初始文件标识符,并将该目标文件的文件名与该目标文件对应的初始文件标识符存储至元数据管理集群。
118.可以理解的,在本实施例中,该目标文件的文件名与该目标文件对应的初始文件
标识符可共同构成该目标文件的元数据。
119.在一种可能实现的方式中,该目标文件的文件名和该目标文件对应的初始文件标识符可以kv方式保存至元数据管理集群中,在一个示例中,若目标文件的文件名为“/nfs/1.jpg”,目标文件对应的初始文件标识符为“1152922605193266177-0-5000”,则可将该文件名与初始文件标识符构成kv键值对“《/nfs/1.jpg,1152922605193266177-0-5000》”保存到元数据管理集群中。
120.在另一种可能实现的方式中,可分别保存该目标文件的文件名及该目标文件对应的初始文件标识符。可选地,考虑到暂时存储在nfs服务节点中的缓存器中的文件很有可能在突发情况下丢失,因此,可对存储在缓存器中的文件进行备份,从而防止该文件丢失或损坏,具体地,本技术实施例提供的海量小文件存储方法还包括:
121.在通过缓存器对请求队列中的目标文件进行存储,并将目标文件的文件名与目标文件对应的初始文件标识符存储至元数据管理集群后,从多节点nfs服务集群中选取备份nfs服务节点,并向备份nfs服务节点发送目标文件备份请求,以便备份nfs服务节点根据目标文件备份请求对目标文件进行存储,并生成目标文件对应的备份文件标识符,根据元数据管理集群中目标文件对应的初始文件标识符和备份文件标识符,生成目标文件对应的文件标识符,并根据文件标识符对元数据管理集群中目标文件对应的初始文件标识符进行更新。
122.可选地,该目标文件为文件内容数据已经存储至缓存器,元数据已经存储至元数据管理集群中,但还未进行备份的文件。
123.在本实施例中,当目标文件存储至缓存器,且将该目标文件对应的元数据存储至元数据管理集群后,该缓存器可从多节点nfs服务集群中选取备份nfs服务节点,并与之建立主备关系。
124.若将正在保存该目标文件的nfs服务节点作为保存该目标文件的主nfs服务节点,则可以理解的,该备份nfs服务节点为多节点nfs服务集群中的,除了主nfs服务节点之外的其他任一nfs服务节点。
125.在本实施例中,该缓存器可向备份nfs服务节点中发送目标文件备份请求,当备份nfs服务节点中的缓存器接收到该目标文件备份请求后,则可根据该目标文件备份请求对目标文件的文件内容数据进行存储,同时生成存储于备份nfs服务节点中的缓存器中的目标文件对应的备份文件标识符。
126.可选地,该备份nfs服务节点中的缓存器还可根据该目标文件的文件名从元数据管理集群中获取该目标文件对应的初始文件标识符,并根据该初始文件标识符和备份文件标识符,生成该目标文件对应的文件标识符,进而根据该目标文件对应的文件标识符对元数据管理集群中存储的目标文件对应的初始文件标识符进行更新,从而将该目标文件对应的文件标识符保存至元数据管理集群中。
127.可以理解的,该目标文件对应的文件标识符可以表征该目标文件在主nfs服务节点中的存储路径,以及该目标文件在备份nfs服务节点中的存储路径。
128.可选地,可通过对目标文件对应的初始文件标识符和备份文件标识符的首部8比特位进行按位或处理,获得目标文件对应的文件标识符。在一个示例中,若目标文件“/nfs/2.jpg”的初始文件标识符为“1125900981633024-0-c800”,且该目标文件的备份文件标识
符为“2199023257602-0-c800”,则将二者的首部8比特位进行按位或处理得到的目标文件对应的文件标识符即为“1128100004890626-0-c800”,此时,元数据管理集群中保存的目标文件的文件名与初始文件标识符组成的kv键值对“《/nfs/2.jpg,1125900981633024-0-c800》”,可更新为该目标文件的文件名与该目标文件对应的文件标识符组成的kv键值对“《/nfs/2.jpg,1128100004890626-0-c800》”。
129.可选地,当两个nfs服务节点建立了主备关系之后,可将主nfs服务节点中的缓存器中保存的所有文件均备份至备份nfs服务节点中的缓存器,且通过聚合存储的方式以大文件的形式在备份nfs服务节点中进行存储。
130.显然地,具有主备关系的两个nfs服务节点中的缓存器中存储有相同数据内容的大文件。因此,若主nfs服务节点中的大文件在解析完全之后进行删除,则也需要对备份节点中的对应的大文件进行删除。
131.可选地,当主nfs服务节点中的缓存器删除其中的大文件后,可向与其具有主备关系的备份nfs服务节点中的缓存器发送文件删除请求,则备份nfs服务节点中的缓存器在接收到该文件删除请求后,可删除其中保存的对应的大文件。
132.可选地,由于缓存器中的文件在请求队列处于低谷期状态时需要被读出并存储至数据存储集群中,因此,当被读出的文件重新存储到数据存储集群中后,需要更新元数据管理集群中的文件标识符,具体地,该方法还包括:
133.在读取出缓存器存储的文件,并通过数据存储集群对读取出的文件进行存储后,生成文件的新文件标识符,并根据新文件标识符更新元数据管理集群中文件对应的文件标识符。
134.可选地,该新的文件标识符为针对之前已经存储到缓存器中,并生成过初始文件标识符的文件,当其从缓存器中被读取并再次存储到数据存储集群中时生成的标识符。
135.在本实施例中,当读取出缓存器中存储的文件后,会将读取到的文件内容数据及该文件的属性数据转化为该文件的写入请求加入到请求队列中,而数据存储集群会对请求队列中的写入请求中的文件内容数据进行存储,若该数据存储集群对从缓存器中读取到的文件进行存储,则会生成该文件对应的新的文件标识符。
136.由于该文件在缓存器中存储时,元数据中已经保存了该文件对应的文件标识符,因此,在生成该文件对应的新的文件标识符后,可根据该文件对应的新的文件标识符对元数据管理集群中存储该文件对应的文件标识符进行更新。
137.可选地,在将文件存储至缓存器或数据存储集群中后,所生成的文件的文件标识符占用16字节(bytes),首部8字节表征全局大文件id,中间的4字节表征大文件内偏移,尾部4字节表征小文件尺寸。而64比特(bits)的全局大文件id中,高4比特表征大文件的存储位置,若值为0,则表征该大文件存储在缓存器中,若值为1则表征该大文件已经存储至数据存储集群中。
138.具体地,请参照图9a,为待写入文件首尾相连,以大文件形式进行存储的聚合存储示意图,以四个文件为示例,分别为第一文件“/pic/1.jpg”、第二文件“/pic/2.jpg”、第三文件“/pic/3.jpg”、第四文件“/pic/4.jpg”,则这四个文件首尾相连形成的大文件以及这四个文件分别对应的文件标识符如图9a所示;请参照图9b,为全局大文件id格式示意图。
139.下面以三节点nfs服务集群为例,分别介绍当请求队列处于不同状态下时,本技术
实施例提供的海量小文件存储方法。
140.请参照图10a,为三节点nfs服务集群400的架构图,包括第一nfs服务节点410、第二nfs服务节点420、第三nfs服务节点430、数据存储集群210、元数据管理集群220。
141.以第一nfs服务节点为例,请参照图10b,为第一nfs服务节点中的待写入文件的写入逻辑架构图,该第一nfs服务节点中包括存储模块412和缓存器411。
142.其中,该存储模块用于接收文件的写入请求,并将其添加至存储的请求队列中,同时向客户端返回“写入成功”的响应;该缓存器411用于在请求队列处于高峰期的情况下被启用,从而与数据存储集群共同进行文件存储。
143.可选地,该存储模块412可以是图4中的存储器,例如随机存取存储器(random access memory,ram),也可以是其他能够对文件的写入请求进行存储的器件,该缓存器411可以是固态硬盘(nvem ssd)。
144.可选地,该数据存储集群可通过普通通道对请求队列中的文件进行存储,当确定启用缓存器时,可将存储模块与数据存储集群之间的其中一条普通通道,升级为存储模块与缓存器之间的特殊通道,从而使缓存器通过该特殊通道对请求队列中的文件进行存储。
145.在本实施例中,该数据存储集群可以是由hdd构成的数据存储集群。
146.若用户通过用户端发起待写入文件“/nfs/1.jpg”的用户请求,则第一nfs服务节点在接收到该用户请求后,可将待写入文件“/nfs/1.jpg”的文件内容转化为数据格式,将该文件内容数据与该文件的属性数据,例如该文件的文件名和文件大小等,封装为该文件的写入请求,并将其加入到存储模块中的文件请求队列中,同时向客户端返回“写入成功”的响应。
147.nfs服务节点每隔预设的时间计算请求队列的增长因子,并计算该增长因子与第一阈值和第二阈值的大小关系。
148.在一种可能实现的方式中,该增长因子小于第一阈值且大于第二阈值(即小文件存储的业务特征表现为平稳期状态),则在此情况下,数据存储集群可通过普通通道对请求队列中的文件进行存储。
149.若此时通过数据存储集群对该待写入文件“/nfs/1.jpg”进行存储,则可在将其聚合存储到数据存储集群中的/1/1/1/1/1中时,生成该文件的初始文件标识符“1152922605193266177-0-5000”。
150.则第一nfs服务节点可将该文件的文件名“/nfs/1.jpg”,以及该文件的初始文件标识符“1152922605193266177-0-5000”形成的kv键值对“《/nfs/1.jpg,1152922605193266177-0-5000》”存储至元数据管理集群中,完成对待写入文件“/nfs/1.jpg”的存储。
151.在另一种可能实现的方式中,该增长因子不小于第一阈值,则在此情况下,可将普通通道升级为特殊通道从而启用缓存器,通过缓存器和数据存储集群对请求队列中的文件进行存储。
152.由于此时同时采用缓存器和数据存储集群对请求队列中的文件进行存储,因此,若该待写入文件“/nfs/1.jpg”此时通过数据存储集群进行存储,则其存储过程可参照上述请求队列处于平稳期状态下的存储过程。
153.若该待写入文件“/nfs/1.jpg”以聚合形式存储至缓存器中的大文件/1/1中,则生
成该文件的初始文件标识符“1125900981633024-0-c800”,该第一nfs服务节点将该文件的文件名“/nfs/1.jpg”和该文件的初始文件标识符“1125900981633024-0-c800”构成的kv键值对“《/nfs/1.jpg,1125900981633024-0-c800》”保存至元数据管理集群。
154.同时,该第一nfs服务节点中的缓存器可选择该三节点nfs服务集群中除了第一节点以外的任一nfs服务节点作为备份nfs服务节点。
155.以该第一nfs服务节点中的缓存器选择的备份nfs服务节点为第二nfs服务节点为例,该第一nfs服务节点可与该第二nfs服务节点建立主备关系,则该第一nfs服务节点中的缓存器可向该第二nfs服务节点中的缓存器发送针对文件“/nfs/1.jpg”的文件备份请求。
156.当第二nfs服务节点中的缓存器接收到该文件备份请求后,可将该文件“/nfs/1.jpg”的文件内容数据存储在该第二nfs服务节点中的缓存器中,并生成该文件的备份文件标识符“2199023257602-0-c800”,同时,该第二nfs服务节点中的缓存器根据该文件的文件名“/nfs/1.jpg”向元数据管理集群中查询该文件对应的初始文件标识符,从而将该文件的初始文件标识符和备份文件标识符的首部8比特进行按位或处理,获得该文件的文件标识符“1128100004890626-0-c800”。
157.之后,根据该文件的文件名“/nfs/1.jpg”和该文件的文件标识符“1128100004890626-0-c800”构成的kv键值对“《/nfs/1.jpg,1128100004890626-0-c800》”对元数据管理集群中存储的“《/nfs/1.jpg,1125900981633024-0-c800》”进行更新。
158.在又一种可能实现的方式中,该增长因子不大于第二阈值,则在此情况下,可将该第一nfs服务节点中的缓存器中的文件从大文件中读取出来,并重新存储到数据存储集群中。
159.对缓存器中存储的大文件进行解析,从而获取多个文件的文件内容数据,若读取出的文件为上述文件“/nfs/1.jpg”的文件内容数据,则将该文件的文件内容数据和该文件的文件名、文件尺寸等属性数据进行封装,转化为该文件“/nfs/1.jpg”的写入请求,并将该写入请求加入到存储模块中的请求队列中。
160.判断缓存器中的大文件是否全部解析完成,若该大文件已经解析完成,则调用缓存器删除接口,删除该解析完成的大文件,同时,该缓存器可向备份nfs节点的缓存器发送文件删除请求,在本实施例中,由于第二nfs服务节点为第一nfs服务节点的备份nfs服务节点,因此,该第一nfs服务节点中的缓存器可向第二nfs服务节点中的缓存器发送文件删除请求,则该第二nfs服务节点中的缓存器在接收到该文件删除请求后,可删除与第一nfs服务节点中的缓存器删除的大文件对应的备份大文件。
161.由于数据存储集群可通过与存储模块之间的普通通道将请求队列中的写入请求中的文件内容数据进行存储,因此,在该数据存储集群将文件“/nfs/1.jpg”的文件内容数据进行存储后,可生成针对该文件“/nfs/1.jpg”的新的文件标识符“1154922605193266177-0-5000”。
162.由于该文件“/nfs/1.jpg”在缓存器中存储时,在元数据管理集群中保存有该文件的文件名与文件标识符形成的kv键值对“《/nfs/1.jpg,1128100004890626-0-c800》”,因此,可根据该文件的文件名“/nfs/1.jpg”,以及该文件对应的新的文件标识符“1154922605193266177-0-5000”形成的kv键值对“《/nfs/1.jpg,1154922605193266177-0-5000》”对该元数据管理集群中存储的kv键值对进行更新,从而完成该文件“/nfs/1.jpg”的
存储。
163.为了执行上述实施例及各个可能的方式中的相应步骤,下面给出一种海量小文件存储装置的实现方式,请参阅图11,图11为本技术实施例提供的一种海量小文件存储装置的功能模块图。需要说明的是,本实施例所提供的海量小文件存储装置,其基本原理及产生的技术效果和上述实施例相同,为简要描述,本实施例部分未提及之处,可参考上述的实施例中相应内容。该海量小文件存储装置包括:计算预测模块500、缓存模块510。
164.该计算预测模块500,用于根据当前时间段内请求队列对应的写入请求添加数量、当前时间段的前一时间段内存储至数据存储集群中的文件数量、请求队列在当前时间段的前一时间段的结束时刻对应的写入请求数量,计算请求队列在当前时间段内的增长因子;请求队列包括文件的写入请求,增长因子表征请求队列中的写入请求的增长情况;
165.可以理解的,该计算预测模块500可以执行上述步骤s30。
166.该缓存模块510,用于根据增长因子确定是否启用nfs服务节点中的缓存器对请求队列中的文件进行存储。
167.可以理解的,该缓存模块510可以执行上述步骤s31。
168.可选地,该缓存模块510还用于若增长因子不小于第一阈值,则启用nfs服务节点中的缓存器,并通过缓存器和数据存储集群对请求队列中的文件进行存储;若增长因子小于第一阈值,则通过数据存储集群对请求队列中的文件进行存储。
169.可以理解的,该缓存模块510还可以执行上述步骤s31-1~步骤s31-2。
170.可选地,该缓存模块510还用于若增长因子不大于第二阈值,则读取出缓存器存储的文件,并通过数据存储集群对读取出的文件进行存储;若增长因子大于第二阈值且小于第一阈值,则通过数据存储集群对请求队列中的文件进行存储。
171.可以理解的,该缓存模块510还可以执行上述步骤s31-2-1~步骤s31-2-2。
172.可选地,该缓存模块510还用于针对请求队列中已存储的目标文件,生成目标文件对应的初始文件标识符,并将目标文件的文件名与目标文件对应的初始文件标识符存储至元数据管理集群。
173.可以理解的,该缓存模块510还可以执行上述步骤s32。
174.可选地,该缓存模块510还用于在通过缓存器对请求队列中的目标文件进行存储,并将目标文件的文件名与目标文件对应的初始文件标识符存储至元数据管理集群后,从多节点nfs服务集群中选取备份nfs服务节点,并向备份nfs服务节点发送目标文件备份请求,以便备份nfs服务节点根据目标文件备份请求对目标文件进行存储,并生成目标文件对应的备份文件标识符,根据元数据管理集群中目标文件对应的初始文件标识符和备份文件标识符,生成目标文件对应的文件标识符,并根据文件标识符对元数据管理集群中目标文件对应的初始文件标识符进行更新。
175.可选地,该缓存模块510还用于在读取出缓存器存储的文件,并通过数据存储集群对读取出的文件进行存储后,生成文件的新文件标识符,并根据新文件标识符更新元数据管理集群中文件对应的文件标识符。
176.可选地,该计算预测模块500还用于根据如下公式计算距离当前时刻的预设时间间隔内的队列增长因子:
177.h=(y+z-x)/x
178.其中,h表征请求队列在当前时间段内的增长因子,y表征请求队列在当前时间段的前一时间段的结束时刻对应的写入请求数量,z表征当前时间段内请求队列中的写入请求添加数量,x表征当前时间段的前一时间段内存储至数据存储集群中的文件数量。
179.本技术实施例提供的海量小文件存储装置,通过计算预测模块根据当前时间段内请求队列对应的写入请求添加数量、当前时间段的前一时间段内存储至数据存储集群中的文件数量、请求队列在当前时间段的前一时间段的结束时刻对应的写入请求数量,计算请求队列在当前时间段内的增长因子;请求队列包括文件的写入请求,增长因子表征请求队列中的写入请求的增长情况;通过缓存模块根据增长因子确定是否启用nfs服务节点中的缓存器对请求队列中的文件进行存储。从而通过计算增长因子从而确定是否启用缓存器,因此能够避免在缓存器中持续写入,从而可在满足海量小文件存储的低时延要求的同时,延长缓存器的使用寿命。
180.可选地,上述模块可以软件或固件(firmware)的形式存储于图4所示的存储器中或固化于该nfs服务节点的操作系统(operating system,os)中,并可由图4中的处理器执行。同时,执行上述模块所需的数据、程序的代码等可以存储在存储器中。
181.在本技术所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本技术的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
182.另外,在本技术各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
183.所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
184.以上所述仅为本技术的优选实施例而已,并不用于限制本技术,对于本领域的技术人员来说,本技术可以有各种更改和变化。凡在本技术的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本技术的保护范围之内。