文件存储和索引方法、装置及读取文件的方法制造方法及图纸

技术编号:15690941 阅读:96 留言:0更新日期:2017-06-24 03:44
本发明专利技术提供了一种文件存储和索引方法、装置及读取文件的方法,其中,该文件存储和索引方法包括:按照文件的实际key值的字母顺序存储各文件,得到数据文件;生成用于索引数据文件中各文件的索引文件,其中,索引文件中的索引使用各文件的实际key值的前N字节作为key值,每个索引指向数据文件中的一个或者多个文件,key值对应的offset值为key值指向的一个或者多个文件中首个文件的offset值,key值对应的size值为key值指向的一个或者多个文件中首个文件的size值。通过本发明专利技术,解决了Haystack系统采用的索引方案对内存资源消耗大的问题,降低了索引系统对内存资源的消耗。

File storage and indexing method, device and method for reading file

The invention provides a file storage and indexing method, device and file method, which includes the file storage and indexing method: according to the actual key file storage in alphabetical order of the values of each file, data file; generate index files, each file index data file which N bytes the actual key index file index using each file value as the key value, each index point to one or more files in the data file, the key value of the corresponding offset value offset the first document one or more files to the key value, key value corresponding to size value the first file one or more files to the size value of key. The invention solves the problem that the indexing scheme adopted by the Haystack system consumes large memory resources, and reduces the consumption of memory resources by the indexing system.

【技术实现步骤摘要】
文件存储和索引方法、装置及读取文件的方法
本专利技术涉及文件存储及索引领域,具体而言,涉及一种文件存储和索引方法、装置及读取文件的方法。
技术介绍
当今互联网,数据呈现爆炸式增长,社交网络、移动通信、网络视频、电子商务等各种应用往往能产生亿级甚至十亿、百亿级的海量小文件。由于在元数据管理、访问性能、存储效率等方面面临巨大的挑战,海量小文件问题成为了业界公认的难题。业界的一些知名互联网公司,也对海量小文件提出了解决方案,例如:著名的社交网站Facebook,存储了超过600亿张图片,专门推出了Haystack系统,针对海量小图片进行定制优化的存储。其他的小文件处理方案还有淘宝的TFS等,这些系统的核心思想都是将小文件追加到一个数据文件中,同时生成索引文件,通过索引文件来定位小文件的位置。下面介绍Facebook采用的Haystack的解决方案:Facebook的Haystack对小文件的解决办法是,把小文件合起来。将一些小文件的数据依次追加到数据文件中,并且生成索引文件,通过索引来查找小文件在数据文件中的offset和size,对文件进行读取。(1)Haystack的数据文件部分:Haystack的数据文件,将每个小文件封装成一个needle,包含文件的key、size、data等数据信息。所有小文件按写入的先后顺序追加到数据文件中。(2)Haystack的索引文件部分:Haystack的索引文件保存每个needle的key,以及该needle在数据文件中的offset、size等信息。程序启动时会将索引加载到内存中,在内存中通过查找索引,来定位在数据文件中的偏移量和大小。(3)读请求使用索引:将索引文件载入内存,通过查找索引,来定位要读取文件的offset、size,将数据读取出来。(4)写请求使用索引:写文件每次添加一个文件,将文件的数据添加到末尾的Needlen。生成索引添加到Needlenindexrecord。由上述的描述可以看出,Facebook的Haystack特点是将文件的完整key都加载到内存中,进行文件定位。机器内存足够大的情况下,Facebook完整的8字节key可以全部加载到内存中。但是现实环境下存在两个问题:(1)存储服务器内存不会太大,一般为32G至64G;(2)小文件对应的key大小难控制,一般选择文件内容的MD5或SHA1作为该文件的key。假设一台存储服务器有12块4T磁盘,内存为32GB左右。服务器上现需存储大小约为4K的头像、缩略图等文件,约为10亿个。文件的key使用MD5,加上offset和size字段,平均一个小文件对应的索引信息占用28字节。在这种情况下,索引占用内存接近30GB,磁盘仅占用4TB。内存消耗近100%,磁盘消耗只有8%。由此可见,Haystack系统采用的索引方案对内存资源消耗巨大,并且内存资源限制了磁盘资源的利用率,因此,想要获得更大的磁盘资源的利用率需要额外增加内存资源的大量投入。
技术实现思路
本专利技术提供了一种文件存储和索引方法、装置及读取文件的方法,以至少解决Haystack系统采用的索引方案对内存资源消耗大的问题。根据本专利技术的一个方面,提供了一种文件存储和索引方法,包括:按照文件的实际key值的字母顺序存储各文件,得到数据文件;生成用于索引所述数据文件中各文件的索引文件,其中,所述索引文件中的索引使用各文件的实际key值的前N字节作为key值,每个索引指向所述数据文件中的一个或者多个文件,所述key值对应的offset值为所述key值指向的一个或者多个文件中首个文件的offset值,所述key值对应的size值为所述key值指向的一个或者多个文件中首个文件的size值,N为正整数。可选地,所述索引文件中的offset字段和size字段是通过512字节对齐的。可选地,生成用于索引所述数据文件中各文件的索引文件还包括:按照key值前缀分层存储所述索引文件的索引,其中,所述key值前缀对应的分层中存储的索引的key值为截去所述key值前缀的简短key值,其中,所述key值前缀的字节长度小于N。可选地,所述索引文件的索引的offset值是以所述索引所在分层为偏移范围的层内offset值,所述层内offset值的字节数是根据分层的最大层地址空间确定的。可选地,所述方法还包括:将所述数据文件中的所有文件映射到bloomfilter中,以使读取所述数据文件中的文件时通过快速搜索所述bloomfilter来判断将要读取的文件是否可能存在。根据本专利技术的另一个方面,还提供了一种文件存储和索引装置,包括:数据文件存储模块,用于存储数据文件,其中,所述数据文件是按照文件的实际key值的字母顺序存储各文件所得到的;索引文件生成模块,用于生成用于索引所述数据文件中各文件的索引文件,其中,所述索引文件中的索引使用各文件的实际key值的前N字节作为key值,每个索引指向所述数据文件中的一个或者多个文件,所述key值对应的offset值为所述key值指向的一个或者多个文件中首个文件的offset值,所述key值对应的size值为所述key值指向的一个或者多个文件中首个文件的size值,N为正整数。可选地,所述索引文件生成模块,还用于按照key值前缀分层存储所述索引文件的索引,其中,所述key值前缀对应的分层中存储的索引的key值为截去所述key值前缀的简短key值,其中,所述key值前缀的字节长度小于N。可选地,所述索引文件的索引的offset值是以所述索引所在分层为偏移范围的层内offset值,所述层内offset值的字节数是根据分层的最大层地址空间确定的。可选地,所述装置还包括:映射模块,用于将所述数据文件中的所有文件映射到bloomfilter中,以使读取所述数据文件中的文件时通过搜索所述bloomfilter来判断将要读取的文件是否可能存在。根据本专利技术的另一个方面,还提供了一种在上述的文件存储和索引装置中读取文件的方法,包括:根据将要读取的文件的实际key值的前N字节查询所述索引文件中所述实际key值的前N字节对应的索引;根据所述实际key值,在所述实际key值的前N字节对应的索引指向的一个或者多个文件中匹配文件;在匹配到key值与所述实际key值一致的文件时,读取该文件。可选地,根据将要读取的文件的实际key值的前N字节查询所述索引文件中所述实际key值的前N字节对应的索引包括:根据所述bloomfilter判断将要读取的文件是否可能存在;在判断结果为可能存在的情况下,根据将要读取的文件的实际key值的前N字节查询所述索引文件中所述实际key值的前N字节对应的索引,否则终止读取文件。通过本专利技术,采用按照文件的实际key值的字母顺序存储各文件,得到数据文件;生成用于索引数据文件中各文件的索引文件,其中,索引文件中的索引使用各文件的实际key值的前N字节作为key值,每个索引指向数据文件中的一个或者多个文件,key值对应的offset值为key值指向的一个或者多个文件中首个文件的offset值,key值对应的size值为key值指向的一个或者多个文件中首个文件的size值的方式,解决了Haystack系统采用的索引方案对内存资源消耗大的问题,降低了索引系本文档来自技高网
...
文件存储和索引方法、装置及读取文件的方法

【技术保护点】
一种文件存储和索引方法,其特征在于包括:按照文件的实际key值的字母顺序存储各文件,得到数据文件;生成用于索引所述数据文件中各文件的索引文件,其中,所述索引文件中的索引使用各文件的实际key值的前N字节作为key值,每个索引指向所述数据文件中的一个或者多个文件,所述key值对应的offset值为所述key值指向的一个或者多个文件中首个文件的offset值,所述key值对应的size值为所述key值指向的一个或者多个文件中首个文件的size值,N为正整数。

【技术特征摘要】
1.一种文件存储和索引方法,其特征在于包括:按照文件的实际key值的字母顺序存储各文件,得到数据文件;生成用于索引所述数据文件中各文件的索引文件,其中,所述索引文件中的索引使用各文件的实际key值的前N字节作为key值,每个索引指向所述数据文件中的一个或者多个文件,所述key值对应的offset值为所述key值指向的一个或者多个文件中首个文件的offset值,所述key值对应的size值为所述key值指向的一个或者多个文件中首个文件的size值,N为正整数。2.根据权利要求1所述的方法,其特征在于,所述索引文件中的offset字段和size字段是通过512字节对齐的。3.根据权利要求1所述的方法,其特征在于,生成用于索引所述数据文件中各文件的索引文件还包括:按照key值前缀分层存储所述索引文件的索引,其中,所述key值前缀对应的分层中存储的索引的key值为截去所述key值前缀的简短key值,其中,所述key值前缀的字节长度小于N。4.根据权利要求3所述的方法,其特征在于,所述索引文件的索引的offset值是以所述索引所在分层为偏移范围的层内offset值,所述层内offset值的字节数是根据分层的最大层地址空间确定的。5.根据权利要求1至4中任一项所述的方法,其特征在于,所述方法还包括:将所述数据文件中的所有文件映射到bloomfilter中,以使读取所述数据文件中的文件时通过快速搜索所述bloomfilter来判断将要读取的文件是否可能存在。6.一种文件存储和索引装置,其特征在于包括:数据文件存储模块,用于存储数据文件,其中,所述数据文件是按照文件的实际key值的字母顺序存储各文件所得到的;索引文件生成模块,用于生成用于索引所述数据文件中各文件的索引文件,其中,所述索引文件中的索引使用各文件的实际key值的前N字节作为key值,每个索引指向所述数据文件中的一个...

【专利技术属性】
技术研发人员:陈闯张炎泼
申请(专利权)人:贵州白山云科技有限公司
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1