小文件处理方法与装置与流程

文档序号:15588601发布日期:2018-10-02 18:40阅读:167来源:国知局
本发明属于计算机领域,尤其涉及一种能够应用在云存储中的有效处理小文件索引缓存的方法与装置。
背景技术
:云存储是一种新兴网络存储技术,通过集群应用、网络技术以及分布式文件系统等功能,将互联网海量数据分布式存储并提供高可靠性、高可用性的服务。关于小文件的存储,在文件系统中针对每一个文件会建立相应的索引,如果小文件的数量过多,将导致文件系统性能变差,以及难以维护,小文件的查找与读取速度极度降低,因此,为了解决这类问题在云存储中引入了一种小文件合并的技术,及将数量庞大的小文件合并为一个大文件(文件大小通常在几十兆,甚至几个g不等),通过应用层来控制小文件的快速查找、读取、整理,以提高小文件的处理速度、强化小文件的管理。技术实现要素:本发明针对当前小文件存取效率低,占用空间大的问题,提出了通过改变小文件数据存储结构来实现的小文件写入和读取的方法。本发明的一方面提出了一种小文件的写入方法,其包括:基于小文件的内容来确定所述小文件的哈希信息;如果数据库中并未包括所述小文件的哈希信息,则将所述小文件存储到所述数据库中指定的文件组中,并确定所述小文件与所述文件组之间的映射信息;以及将所述哈希信息和所述映射信息存储到所述数据库中。本发明的另一方面提出了一种小文件的读取方法,其包括:基于小文件的哈希信息,在缓存中确定是否已经存在所述小文件;如果所述小文件已经存在于所述缓存中,则根据所述哈希信息来确定所述小文件的映射信息,如果所述小文件并未存在于所述缓存中,则基于所述哈希信息在数据库中确定所述小文件的映射信息,基于所述映射信息来读取所述小文件。本发明还提出了一种小文件处理装置,包括:处理器;以及存储器,其用于存储指令,当所述指令在执行时使得所述处理器执行前述的小文件写入和/或读取的方法。本发明还提出了一种计算机可读存储介质,具有存储在其上的计算机可读程序指令,其特征在于,当所述指令被执行时,执行前述的小文件写入和/或读取的方法。相较于传统方法,通过本发明的技术方案,可以有效压缩索引在缓存中的数据量,大大减少缓存占用率,同时提高查找效率。另外,通过使用leveldb作为缓存索引的落地存储,可以提高可靠性。再者,使用小文件的hash值作为key存储,可以在数据读取时选择性校验数据是否被篡改,提高数据安全性,并且防止重复数据上传。附图说明参考附图示出并阐明实施例。这些附图用于阐明基本原理,从而仅仅示出了对于理解基本原理必要的方面。这些附图不是按比例的。在附图中,相同的附图标记表示相似的特征。图1为传统技术中的字典树结构图;图2为依据本发明实施例的数据存储结构示意图;图3a为依据本发明实施例的小文件写入方法流程图;图3b为依据本发明实施例的小文件的前缀树示意图;图3c为依据本发明实施例的小文件的存储示意图;图4为依据本发明实施例的小文件读取方法的流程图。具体实施方式在以下优选的实施例的具体描述中,将参考构成本发明一部分的所附的附图。所附的附图通过示例的方式示出了能够实现本发明的特定的实施例。示例的实施例并不旨在穷尽根据本发明的所有实施例。可以理解,在不偏离本发明的范围的前提下,可以利用其他实施例,也可以进行结构性或者逻辑性的修改。因此,以下的具体描述并非限制性的,且本发明的范围由所附的权利要求所限定。对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为说明书的一部分。首先对本发明所涉及的术语进行阐述。哈希(hash)用于把任意长度的输入变换成指定长度的输出,该输出就是哈希值。通过不同的哈希算法(譬如但不限于md5、sha、ripemd、国密sm3等)来确定的哈希值皆可用于本发明。小文件是指文件大小低于指定阈值的文件,譬如,小于等于1mb。可以理解的,在一些实施方式中,小文件大小可以根据应用进行调整,而并非限制为小于等于1mb。发明人通过大量的实践发现,当前针对小文件的存储管理索引存在以下问题:由于建立索引通常在缓存中缓存,随着小文件数量增加,在索引数据量急剧增加的情况下,缓存占用率将急剧升高;在小文件索引过多的情况下,没有有效快速的数据查找方法,使得查找性能极其低下;无法有效检验数据是否被篡改。图1为传统技术中的字典树结构图。在字典树中,拥有共同字符的字符串能共用一个节点,进而降低了字符重复率比较高的字符串占用的空间。然而,如果字符串重复率并不高,字典树并不能有效降低文件占用的存储空间。以字符串caner、comer和understand为例,该三个字符串包含公共字符“er”,因此,在字典树中,子节点n21对应于can、com的公共字符“c”,字节点n22对应于undstand中的字符“u”。由于该三个词的公共字符较少,当对该三个字符串进行处理时,字典树的深度明显增加,并且没有其他字符串共同分享这段空间,从而导致占用大量的存储空间。图2为依据本发明实施例的数据存储结构示意图。相较于图1中的树结构,图2中的树结构中每一个节点对应于至少一个字符,即每个节点对应于字符串,该字符串包括通过对字符串进行抽取、合并而得到的共同词汇,如此,将极大地节省了存储空间。在图2中的数据结构中,可以将字符串undstand合并入一个节点中,如果还存在字符串understood,则节点n22对应于字符串undst,然后增加两个子节点n33和n34,分别对应于字符串and和ood,如此可以极大地降低整棵树的深度。基于上述数据存储结构,本发明提出了一种小文件的写入方法,该方法包括:基于小文件的内容来确定小文件的哈希信息(譬如,根据指定算法所确定的hash值);如果数据库中并未包括小文件的哈希信息,则将小文件存储到数据库中指定的文件组中,进而确定小文件与文件组之间的映射信息(譬如,该小文件所在的文件组的名称(filename)、小文件在文件组中的位置(offet)以及小文件的大小(size));以及将哈希信息和映射信息成对地存储到数据库中。可以理解的,这里的文件组可以包括多个大小相同或不同的小文件,并且映射信息对应于图3a为依据本发明实施例的小文件写入方法流程图,图3b为依据本发明实施例的小文件的前缀树示意图,图3c为依据本发明实施例的小文件的存储示意图。步骤s301:获得小文件数据。在该步骤中,经由用户端/界面发起小文件写入请求,服务器端可以获得相应的小文件数据。步骤s302:确定所获得的小文件的hash值。在该步骤中,服务端将基于小文件的数据来确定相应的哈希信息,即基于小文件的数据来根据指定的哈希算法而确定的hash值(譬如,6c0a5c71ec20f1)。可以理解的,根据选取的hash算法不同,可以得到长度不同的hash值。步骤s303:判断hash值是否已经存在于数据库中?在该步骤中,将在数据库(譬如,leveldb数据库)中对上一个步骤中所获得的小文件的hash值进行查找,以判断数据库中是否存在该hash值。如果存在,说明数据库中已经有该小文件,则结束小文件写入的过程(步骤s305),从而防止文件重复上传;如果不存在,则执行步骤s304。步骤s304:将小文件存储到指定的文件组中。在该步骤中,将把小文件存储到指定的文件组中,如果写入成功,则记录下该小文件与文件组的映射信息,即小文件所在的文件组的名称(filename)、小文件在文件组中的位置(offet)以及小文件的大小(size)。可以理解的,在其它实施方式中,映射信息可以包括上述三项中的至少一项。步骤s306:基于hash值在数据库中实现索引持久化。将数据写入产生的信息,按照k:v格式(譬如,6c0a5c71ec20f1:f1+0+1024),添加到leveldb数据库中实现索引持久化,直到索引在数据库中存储成功,则表示文件存储成功,返回k值给用户。可以理解的,k为基于小文件数据所产生的hash值,f1为小文件所在的文件组的组名,0为小文件数据在文件组中的位置,1024则表示该小文件的大小。结合图3b、图3c和表1来进行阐述。如图3b所示,表1中的小文件的hash值具有公共的部分6c0a,因此根节点n1对应于6c0a。小文件f1-f4具有公共部分5c71,f5-f8具有公共部分8f74,因此,节点n21、n22分别对应于5c71、8f74。类似地,可以确定小文件f1-f8在前缀树中的位置。如图3c所示,文件组f1中包括多个大小均为1024(size=1024)的小文件。例如,小文件f1通过offset=0来表示其在文件组f1中的位置。在本实施例中,小文件将依次顺序地存储到文件组中。可以理解的,在其它实施例中,小文件还能够以其它顺序来存储到文件组中。表1小文件k:v对应表keyvalue6c0a5c71ec20f1f1+0+10246c0a5c71ec20f2f1+1024+10246c0a5c71ec20f3f1+2048+10246c0a5c71ec20f3f1+3072+10246c0a8f743b95f5f2+0+10246c0a8f743b95f6f2+1024+10246c0a8f743b95f7f2+2048+10246c0a8f743b95f8f2+3072+1024本发明还提出了一种小文件的读取方法,图4为依据本发明实施例的小文件读取方法的流程图。步骤s401:基于请求读取的小文件的hash值在缓存中查找。在该步骤中,用户可以通过用户端/界面来利用hash值来发起文件读取请求。在获取到该hash值后,服务端将基于该hash值在缓存中检索。换而言之,以该hash值作为k值在前缀树中查找,并在步骤s402中判断该小文件是否存在于缓存中。若该小文件不存在于缓存中,则执行步骤s403,在数据库中基于hash值进行查找。步骤s405:确定小文件的v值,并读取小文件。在该步骤中,通过在数据库中查找的结果,确定与小文件的hash值(k)相对应的value值(v),然后基于小文件的v值读取小文件。步骤s407:针对小文件调整前缀树。在该步骤中,将小文件的kv值存放到前缀树中(即,存放到缓存中),从而针对从数据库中读取的小文件来在前缀树中增加相应的节点。如果在步骤s402中判断该小文件存在于缓存中,则执行步骤s404:根据v值读取小文件。由前述可知,v值包括了该小文件所在的文件组的名称(filename)、小文件在文件组中的位置(offet)以及小文件的大小(size)。步骤s406:增加小文件对应的节点在前缀树中的读取次数。由于在上一步骤中,根据前缀树的结构来读取小文件,因此,将增加对与被读取的小文件相对应的节点的读取次数。可以理解的,前缀树中的每个节点所对应的哈希信息包括至少一个字符。为了能够节省缓存空间,在本实施例中,还可以周期性地基于读取次数来调整前缀树中的节点。具体而言,定期地根据前缀树中各个节点的读取次数来确定是否移除该文件索引缓存节点,进而释放缓存空间。另外,通过使用小文件的hash值来构建前缀树,可以在数据读取时校验数据是否被篡改,进而提高数据安全性。本发明还提出了一种小文件处理装置,包括:处理器;以及存储器,其用于存储指令,当指令在执行时使得处理器执行前述的小文件写入方法或是小文件读取方法。通过采用本发明的技术方案,可以有效压缩索引在缓存中的数据量,大大减少缓存占用率,同时提高查找效率。另外,通过使用leveldb作为缓存索引的落地存储,可以提高可靠性。再者,使用小文件的hash值作为k值存储,可以在数据读取时选择性校验数据是否被篡改,提高数据安全性,并且防止重复数据上传。上述的小文件写入/读取方法的流程还代表机器可读指令,该机器可读指令包括由处理器执行的程序。该编程指令存储于有形计算机可读介质上,如硬盘、闪存、只读存储器(rom)、光盘(cd)、数字通用光盘(dvd)、高速缓存器、随机访问存储器(ram)和/或任何其他存储介质,在该存储介质上信息可以存储任意时间(例如,长时间,永久地,短暂的情况,临时缓冲,和/或信息的缓存)。如在此所用的,该术语有形计算机可读介质被明确定义为包括任意类型的计算机可读存储的信息。附加地或替代地,可利用编码指令(如计算机可读指令)实现图3a、图4的示例过程,该编码指令存储于非暂时性计算机可读介质,如硬盘,闪存,只读存储器,光盘,数字通用光盘,高速缓存器,随机访问存储器和/或任何其他存储介质,在该存储介质信息可以存储任意时间(例如,长时间,永久地,短暂的情况,临时缓冲,和/或信息的缓存)。可以理解的,该计算机可读指令还可以存储在网络服务器中、云端平台上,以便于用户使用。另外,尽管操作以特定顺序被描绘,但这并不应该理解为要求此类操作以示出的特定顺序或以相继顺序完成,或者执行所有图示的操作以获取期望结果。在某些情况下,多任务或并行处理会是有益的。同样地,尽管上述讨论包含了某些特定的实施细节,但这并不应解释为限制任何发明或权利要求的范围,而应解释为对可以针对特定发明的特定实施例的描述。本说明书中在分开的实施例的上下文中描述的某些特征也可以整合实施在单个实施例中。反之,在单个实施例的上下文中描述的各种特征也可以分离地在多个实施例或在任意合适的子组合中实施。因此,虽然参照特定的示例来描述了本发明,其中这些特定的示例仅仅旨在是示例性的,而不是对本发明进行限制,但对于本领域普通技术人员来说显而易见的是,在不脱离本发明的精神和保护范围的基础上,可以对所公开的实施例进行改变、增加或者删除。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1