一种小文件存储方法、查询方法和装置的制造方法
【技术领域】
[0001]本发明涉及计算机领域,具体而言,涉及一种小文件存储方法、查询方法和装置。
【背景技术】
[0002]小文件一般指大小在几千字节(KB)到几兆字节(MB)的单个文件,现有的网络上存在有大量的图片、文档等小文件,目前,用户在想要对网络上的小文件进行处理(比如:对从网络上的图片进行编辑或者修改等操作)时,需要将网络上的小文件下载到用户本地的文件系统中进行存储,然后才可以对存储的小文件进行处理。
[0003]文件系统在存储小文件时,一般在文件系统将小文件的内容和小文件属性信息存储到打包文件后,将小文件的文件名和小文件存储打包文件之后形成的小文件元数据存储在文件系统的索引子系统中,作为小文件的索引文件。小文件属性信息包括:小文件的文件名、数据长度和创建时间等;小文件的元数据包括小文件所在打包文件标识、小文件在打包文件中的位置和小文件的数据长度。
[0004]现有的文件系统中,通常小文件的索引文件存储的是小文件的文件名,在进行文件查找时,系统需要使用该索引文件中的文件名与用户提供的文件名进行对比,才可以定位用户查找的小文件的位置,但是文件名一般是英文、中文和数字混合的字符串,比较复杂,也比较长,所以比对的速度较慢,导致返回给用户待处理小文件的时间较长。
【发明内容】
[0005]本发明的目的在于提供一种小文件存储方法、查询方法和装置,以使索引文件存储的内容更简洁、更合理,而且在查询小文件的过程中通过哈希值比对,提升查询效率。
[0006]第一方面,本发明实施例提供了一种小文件存储方法,所述方法包括:
[0007]获取待存储的小文件;其中,所述小文件包括文件大小小于预设阈值的文件;
[0008]将获取到的所述小文件存储到当前的打包文件中,并生成所述小文件的元数据;所述小文件的元数据包括小文件所在打包文件标识、小文件在打包文件中的位置信息和小文件的数据长度;
[0009]根据所述小文件的文件名计算所述小文件的属性值,其中,所述属性值包括:文件名哈希值;
[0010]将计算得到的所述属性值和所述小文件的元数据作为所述小文件的索引文件存储到索引子系统。
[0011]结合第一方面,本发明实施例提供了第一方面的第一种可能的实施方式,其中,所述方法还包括:
[0012]获取所述小文件的索引文件在所述索引子系统中的位置信息;
[0013]从所述小文件的文件名哈希值中取出预设位数的数字串,作为所述小文件的快速查询信息;
[0014]将所述位置信息和所述快速查询信息在预设的快速查找表中进行关联存储。
[0015]结合第一方面,本发明实施例提供了第一方面的第二种可能的实施方式,其中,将计算得到的所述属性值和所述小文件的元数据作为所述小文件的索引文件存储到索引子系统包括:
[0016]当索引子系统中存在文件名哈希值相同的多个小文件时,为所述多个小文件建立索引链表;
[0017]存储所述多个小文件对应的所述索引链表。
[0018]结合第一方面,本发明实施例提供了第一方面的第三种可能的实施方式,其中,将获取到的所述小文件存储到当前的打包文件中包括:
[0019]确定获取到的所述小文件的占用量;
[0020]判断当前的打包文件的剩余存储容量是否大于所述小文件的占用量;
[0021]如果是,将所述小文件存储在所述当前的打包文件中;
[0022]如果否,生成新的打包文件存储所述小文件。
[0023]结合第一方面,本发明实施例提供了第一方面的第四种可能的实施方式,其中,在将获取到的所述小文件存储到当前的打包文件中,并形成小文件的元数据之前,所述方法还包括:
[0024]获取多个缓存空间对应的指针,其中,所述缓存空间用于缓存待存储的所述小文件;
[0025]根据多个缓存空间对应的指针生成所述小文件的缓存空间链表;
[0026]将获取的所述小文件缓存至所述缓存空间链表对应的多个缓存空间中。
[0027]结合第一方面的第四种可能的实施方式,本发明实施例提供了第一方面的第五种可能的实施方式,其中,将获取到的所述小文件存储到当前的打包文件中包括:
[0028]判断所述多个缓存空间是否均写满;
[0029]如果是,将所述多个缓存空间中缓存的所述小文件写入所述打包文件中;
[0030]如果否,判断未写满的缓存空间等待缓存其他小文件的等待时间是否达到预设时间;
[0031]当所述等待时间达到所述预设时间时,将所述多个缓存空间中缓存的小文件写入所述打包文件中。
[0032]结合第一方面,本发明实施例提供了第一方面的第六种可能的实施方式,其中,所述文件名哈希值包括:文件名的第一哈希值和第二哈希值;所述第一哈希值的长度小于所述第二哈希值的长度。
[0033]第二方面,本发明实施例提供了一种小文件查询方法,所述方法包括:
[0034]接收用户的小文件查询请求,所述小文件查询请求包括所述用户欲查询的小文件的文件名;其中,所述小文件包括文件大小小于预设阈值的文件;
[0035]根据接收到的所述小文件的文件名,计算所述小文件的文件名哈希值;
[0036]通过计算得到的所述文件名哈希值查询索引子系统中的索引文件,根据查询结果定位所述小文件的位置;其中,所述索引文件包括小文件的文件名对应的属性值和所述小文件的元数据,所述属性值包括:文件名哈希值;所述元数据包括小文件所在打包文件标识、小文件在打包文件中的位置信息和小文件的数据长度;
[0037]从定位的所述位置获取所述小文件;
[0038]将获取到的所述小文件返回给所述用户。
[0039]结合第二方面,本发明实施例提供了第二方面的第一种可能的实施方式,其中,通过计算得到的所述文件名哈希值查询索引子系统中的索引文件,根据查询结果定位所述小文件的位置包括:
[0040]从计算得到的所述文件名哈希值中,取出预设位数的数字串,作为快速查询信息;
[0041]根据所述快速查询信息,在所述索引子系统的快速查找表中,查询出所述文件名哈希值对应的小文件的索引文件在所述索引子系统中的位置信息;
[0042]根据得到的所述位置信息,在所述索引子系统中查询出所述索引文件;
[0043]根据查询出的所述索引文件中存储的所述小文件的元数据,定位所述小文件的位置。
[0044]结合第二方面,本发明实施例提供了第二方面的第二种可能的实施方式,其中,通过计算得到的所述文件名哈希值查询索引子系统中的索引文件,根据查询结果定位所述小文件的位置还包括:
[0045]当所述文件名哈希值包括所述小文件的文件名对应的第一哈希值和第二哈希值时,通过第一哈希值查询索引子系统中的索引文件;其中,所述第一哈希值的长度小于所述第二哈希值的长度;
[0046]当通过所述第一哈希值查询出多个小文件的索引文件时,根据所述第二哈希值,在所述索引子系统存储的所述多个小文件对应的索引链表中,查询出所述第二哈希值对应的小文件的索引文件;
[0047]根据查询出的所述小文件的索引文件中存储的所述小文件的元数据,定位所述小文件的位置。
[0048]第三方面,本发明实施例提供了一种小文件存储装置,所述装置包括:
[0049]小文件获取模块,用于获取待存储的小文件;其中,所述小文件包括文件大小小于预设阈值的文件;
[0050]小文件存储模块,用于将获取到的所述小文件存储到当前的打包文件中,并生成所述小文件的元数据;所述小文件的元数据包括小文件所在打包文件标识、小文件在打包文件中的位置信息和小文件的数据长度;
[0051]计算模块,用于根据所述小文件的文件名计算所述小文件的属性值,其中,所述属性值包括:文件名哈希值;
[0052]索引文件存储模块,用于将计算得到的所述属性值和所述小文件的元数据作为所述小文件的索引文件存储到索引子系统。
[0053]结合第三方面,本发明实施例提供了第三方面的第一种可能的实施方式,其中,所述装置还包括:
[0054]位置信息获取单元,用于获取所述小文件的索引文件在所述索引子系统中的位置信息;
[0055]快速查询信息获取模块,用于从所述小文件的文件名哈希值中取出预设位数的数字串,作为所述小文件的快速查询信息;
[0056]关联存储模块,用于将所述位置信息和所述快速查询信息在预设的快速查找表中进行关联存储。
[0057]结合第三方面,本发明实施例提供了第三方面的第二种可能的实施方式,其中,索引文件存储模块包括:
[0058]索引链表建立单元,用于当索引子系统中存在文件名哈希值相同的多个小文件时,为所述多个小文件建立索引链表;
[0059]索引链表存储单元,用于存储所述多个小文件对应的所述索引链表。
[0060]结合第三方面,本发明实施例提供了第三方面的第三种可能的实施方式,其中,小文件存储模块,包括:
[0061]小文件占用量确定单元,用于确定获取到的所述小文件的占用量;
[0062]小文件占用量判断单元,用于判断当前的打包文件的剩余存储容量是否大于所述小文件的占用量;
[0063]小文件存储单元,用于所述小文件占用量判断单元的判断结果为是时,将所述小文件存储在所述当前的打包文件中;
[0064]打包文件生成单元,用于所述小文件占用量判断单元的判断结果为否时,生成新的打包文件存储所述小文件。
[0065]结合第三方面,本发明实施例提供了第三方面的第四种可能的实施方式,其中,所述装置还包括:
[0066]缓存空间指针获取模块,用于获取多个缓存空间对应的指针,其中,所述缓存空间用于缓存待存储的所述小文件;
[0067]缓存空间链表生成模块,用于根据多个缓存空间对应的指针生成所述小文件的缓存空间链表;
[0068]小文件缓存模块,用于将所述小文件获取模块获取的所述小文件缓存至所述缓存空间链表对应的多个缓存空间中。
[0069]结合第三方面的第四种可能的实施方式,本发明实施例提供了第三方面的第五种可能的实施方式,其中,所述小文件存储模块包括:
[0070]缓存空间写满判断单元,用于判断所述多个缓存空间是否均写满;
[0071]第一小文件写入单元,用于所述缓存空间写满判断单元的判断结果为是时,将所述多个缓存空间中缓存的所述小文件写入所述打包文件中;
[0072]预设时间判断单元,用于所述缓存空间写满判断单元的判断结果为否时,判断未写满的缓存空间等待缓存其他小文件的等待时间是否达到预设时间;
[0073]第二小文件写入单元,用于当所述预设时间判断单元的判断结果为所述等待时间达到所述预设时间时,将所述多个缓存空间中缓存的小文件写入所述打包文件中。
[0074]第四方面,本发明实施例提供了一种小文件查询装置,所述装置包括:
[0075]查询请求接收模块,用于接收用户的小文件查询请求,所述小文件查询请求包括所述用户欲查询的小文件的文件名;其中,所述小文件包括文件大小小于预设阈值的文件;
[0076]文件名哈希值计算模块,用于根据接收到的所述小文件的文件名,计算所述小文件的文件名哈希值;
[0077]小文件定位模块,用于通过计算得到的所述文件名哈希值查询索引子系统中的索引文件,根据查询结果定位所述小文件的位置;其中,所述索引文件包括小文件的文件名对应的属性值和所述小文件的元数据,所述属性值包括:文件名哈希值;所述元数据包括小文件所在打包文件标识、小文件在打包文件中的位置信息和小文件的数据长度;
[0078]小文件获取模块,用于从定位的所述位置获取所述小文件;
[0079]小文件返回模块,用于将获取到的所述小文件返回给所述用户。
[0080]结合第四方面,本发明实施例提供了第四方面的第一种可能的实施方式,其中,所述小文件定位模块包括:
[0081]快速查询信息确定单元,用于从计算得到的所述文件名哈希值中,取出预设位数的数字串,作为快速查询信息;
[0082]位置信息查询单元,用于根据所述快速查询信息,在所述索引子系统的快速查找表中,查询出所述文件名哈希值对应的小文件的索引文件在所述索引子系统中的位置信息;
[0083]索引文件查询单元,用于根据得到的所述位置信息,在所述索引子系统中查询出所述索引文件;
[0084]小文件定位单元,用于根据查询出