一种基于磁盘的对象缓存方法技术

技术编号:9865945 阅读:195 留言:0更新日期:2014-04-03 01:31
本发明专利技术涉及磁盘缓存技术领域,具体涉及一种基于磁盘的对象缓存方法。本发明专利技术的一种,包括:划分文件存储空间,构建二级索引的文件存储结构,并依据二级索引的文件存储结构实现该往磁盘缓存中添加对象过程、从磁盘缓存中获取缓存对象过程、从磁盘缓存中删除缓存对象过程、缓存失效机制和缓存优化整理过程,本发明专利技术通过本发明专利技术通过固定大小的文件块来存储对象的数据,将多个小对象合并存储在一个文件块中,将大对象分拆成多个对象分块(ObjectBlock)分别存储在多个文件块(Chunk)中,能够实现任意大小和任意类型的对象的缓存,缓存效率更高。

【技术实现步骤摘要】

本专利技术涉及磁盘缓存
,具体涉及。
技术介绍
在现代软件开发的过程中,缓存的使用对系统性能的提升起到相当关键的作用。在通常情况下,使用的最多的是内存缓存,即将缓存对象存储到内存中,便于快速的读取。但是,内存缓存的存储空间有限,即使是分布式内存缓存,能够提供的内存存储空间也是有限的,当需要缓存大量的大对象(如图片、音频、视频以及其他大对象等)时,内存缓存就显得不太合适,而基于磁盘的缓存能够很好的满足大对象的存储需求。在基于磁盘的缓存实现中,如果是直接将每个待缓存的对象作为单独文件存储在磁盘中,如果缓存对象数量众多,就会在磁盘中产生大量的问题,这样会大大降低磁盘的读写效率。而缓存对象通常都有一定的生命周期,会根据不同的策略失效,此时,磁盘文件就会频繁的增加和删除,导致大量磁盘碎片产生,从而进一步降低磁盘读写效率。
技术实现思路
解决上述技术问题,本专利技术提供了本专利技术提供了,能够实现任意大小的对象缓存(如图片、音频、视频以及其他任意对象),通过优化的数据存储结构来实现对象的快速写入和存取,同时,还能够解决大量文件的频繁存取所导致的磁盘碎片问题,从而实现磁盘的空间的高效利用。为了达到上述目的,本专利技术所采用的技术方案是,,包括:划分文件存储空间,构建二级索引的文件存储结构,该文件存储结构由一个一级索引文件1.1dx、一个二级索引文件2.1dx、以及一至多个文件块N1.dat (i=l, 2,3,......η, η为正整数)组成,每一文件块N1.dat划分为一至多个数据槽Si (i=l,2,3,……n,n为正整数),该每一数据槽Si的大小为2n KB,其中η为正整数,且该数据槽Si大小<文件块N1.dat大小,所述一级索引文件1.1dx用于存放一级索引项,一个二级索引文件2.1dx用于存放二级索引项;每一个数据槽在二级索引文件中存在一个二级索引项与之对应,该二级索引项记录该数据槽在哪一个文件块中,以及在文件块中的位置、大小、使用情况等信息。往磁盘缓存中添加对象过程:根据对象的主键K设置一级索引项的对象主键ObjKey,根据文件块的设定容量将对象进行分割,形成一个或多个对象分块,每一对象分块大小<文件块大小,将一个或多个对象分块存储到一至多个文件块的数据槽Si中,所述一级索引项记录第一个对象分块所在的数据槽SI的二级索引项在二级索引文件的位置,该数据槽SI对应的二级索引项又记录下一个对象分块所在的数据槽S2的二级索引项在二级索引文件的位置,依次类推,数据槽Si对应的二级索引项又记录下一个对象分块所在的数据槽Si+Ι的二级索引项在二级索引文件2.1dx的位置;从磁盘缓存中获取缓存对象过程:扫描一级索引文件1.1dx,查找到对象主键ObjKey与对象主键K 一致的一级索引项,该一级索引项记录了该对象的第一个对象分块所在的数据槽SI的二级索引项在二级索引文件2.1dx的位置,从二级索引文件中获取第一个对象分块所在的数据槽SI的二级索引项,通过该二级索引项定位到数据槽SI所在的文件块中获取第一个对象分块的数据,然后依据数据槽SI的二级索引项中记录的第二个对象分块所在的数据槽S2的二级索引项的位置,从二级索引文件2.1dx中获取第二个对象分块所在的数据槽S2的二级索引项,再通过该二级索引项定位到数据槽S2所在的文件块中获取第二个对象分块的数据,依次类推,得到所有对象分块数据,将所有对象分块数据依序排列拼接,得到完整的对象数据; 从磁盘缓存中删除缓存对象过程:扫描一级索引文件1.1dx,查找到对象主键ObjKey与对象主键K 一致的一级索引项,从二级索引文件2.1dx中获取到该对象的第一个对象分块所在的数据槽SI的二级索引项,在该二级索引项中将数据槽SI标记为未使用,再通过该二级索引项获取第二个对象分块所在的数据槽S2的二级索引项,在该二级索引项中将数据槽S2标记为未使用,依次类推,在二级索引文件中标记删除所有对象分块。最后,在将该该对象对应的一级索引项标记为无效,实现该对象在缓存的删除。进一步的,每一文件块N1.dat (i=l, 2, 3,......η, η为正整数)的大小相同。更进一步的,每一文件块N1.dat (i=l, 2,3,......η, η为正整数)的大小可以为任意值,推荐为64ΜΒ。进一步的,所述一级索引项的长度是34字节,所述一级索引项记录一个缓存对象信息,一级索引项的字段包括: 1)对象主键(ObjKey,20字节):该字段用于存储缓存对象的主键K,每个缓存对象都是通过主键来进行唯一标识; 2)对象创建时间(CreateTime,4字节):该字段用于记录对象添加到缓存中的时间,该字段主要用于对象缓存失效的判断; 3)对象最后访问时间(LastAccessTime,4字节):该字段用于记录对象最后一次被访问的时间,该字段主要用于对象缓存失效的判断; 4)有效性标识(ValidFlag,I字节):该字段用于标记对象在缓存中是否已经失效,O表不失效,I表不有效;当对象被缓存失效机制判定为无效而从缓存中剔除时,缓存系统并不是将该对象对应的一级索引项删除,而是将该对象对应的一级索引项中的ValidFlag字段标记为0,从而实现对象的标记删除; 5)检验和(Checksum,I字节):该字段用于记录对象数据通过特定校验算法(如采用CRC循环校验算法)计算得到的校验和;当从缓存中读取对象数据时,利用该字段来校验对象数据是否完备,从而判断读取到的对象数据是否与与存储时的对象数据一致; 6)第一个数据槽索引(FirstSlotIndex,4字节):该字段用于记录存储对象的第一个分包的数据槽的二级索引项编号,对于小对象,通常只有一个分包;而对于大对象,可以有一至多个分块; 所述二级索引项的长度是21字节,每个二级索引项存储一个数据槽Si的元信息,二级索引项中的字段组成如下: I)文件块ID (ChunkID,4字节):该字段表示数据槽所在的文件块ID,用整数表示;每个文件块在文件系统中的名称为“〈ChunkID〉.dat” ;2)数据槽偏移量(Slot0ffset,4字节):该字段表示数据槽起始位置在文件块中的偏移量(字节数); 3)数据槽大小(SlotSize,4字节):该字段表示数据槽的字节数,即数据槽所能容纳的最大数据长度; 4)使用标志(UseFlag,I字节):该字段表示数据槽是否被用于存储对象数据:0表示未被使用;1表示被使用;当缓存对象被删除时,存储该对象数据所占用的数据槽并没有被删除,而是将二级索引中该数据槽对应的二级索引项中的UseFlag标记为O,即将数据槽标记删除实现回收,该数据槽可利用于存储其他的对象数据; 5)数据大小(DataSize,4字节):该字段表示被使用的数据槽中,实际存储的数据的大小;因为数据槽在分配时,其大小为2n KB,将数据槽用于存储对象数据时,通常对象数据不会把数据槽的整个空间都占用,会留有小部分的剩余空间,该剩余空间不能被使用,即所谓的空洞;随着大量文件块中的数据槽不断地回收利用,其中的空洞就会越来越多,必须对缓存优化整理,将其中的空洞减少到最小; 6)下一个数据槽索引(NextSlotIndex,4字本文档来自技高网...

【技术保护点】
一种基于磁盘的对象缓存方法,其特征在于,包括:划分文件存储空间,构建二级索引的文件存储结构,该文件存储结构由一个一级索引文件1.idx、一个二级索引文件2.idx、以及一至多个文件块Ni.dat(i=1,2,3,……n,n为正整数)组成,每一文件块Ni.dat划分为一至多个数据槽Si(i=1,2,3,……n,n为正整数),该每一数据槽Si的大小为2n?KB,其中n为正整数,且该数据槽Si大小≤文件块Ni.dat大小,所述一级索引文件1.idx用于存放一级索引项,一个二级索引文件2.idx用于存放二级索引项;每一个数据槽Si在二级索引文件2.idx中存在一个二级索引项与之对应,该二级索引项记录该数据槽Si在哪一个文件块中,以及数据槽Si在文件块中的位置、大小、使用情况等信息,往磁盘缓存中添加对象过程:根据对象的主键K设置一级索引项的对象主键ObjKey,根据文件块的设定容量将对象进行分割,形成一个或多个对象分块,每一对象分块大小≤文件块大小,将一个或多个对象分块存储到一至多个文件块的数据槽Si中,所述一级索引项记录第一个对象分块所在的数据槽S1的二级索引项在二级索引文件2.idx的位置,该数据槽S1对应的二级索引项又记录下一个对象分块所在的数据槽S2的二级索引项在二级索引文件2.idx2.idx的位置,依次类推,?数据槽Si对应的二级索引项又记录第i+1个对象分块所在的数据槽Si+1的二级索引项在二级索引文件2.idx的位置;?从磁盘缓存中获取缓存对象过程:扫描一级索引文件1.idx,查找到对象主键ObjKey与对象主键K一致的一级索引项,该一级索引项记录了该对象的第一个对象分块所在的数据槽S1的二级索引项在二级索引文件2.idx的位置,从二级索引文件2.idx中获取第一个对象分块所在的数据槽S1的二级索引项,通过该二级索引项定位到数据槽S1所在的文件块中获取第一个对象分块的数据,然后依据数据槽S1的二级索引项中记录的第二个对象分块所在的数据槽S2的二级索引项的位置,从二级索引文件2.idx中获取第二个对象分块所在的数据槽S2的二级索引项,再通过该二级索引项定位到数据槽S2所在的文件块中获取第二个对象分块的数据,依次类推,得到所有对象分块数据,将所有对象分块数据依序排列拼接,得到完整的对象数据;从磁盘缓存中删除缓存对象过程:扫描一级索引文件1.idx,查找到对象主键ObjKey与对象主键K一致的一级索引项,从二级索引文件2.idx中获取到该对象的第一个对象分块所在的数据槽S1的二级索引项,在该二级索引项中将数据槽S1标记为未使用,再通过该二级索引项获取第二个对象分块所在的数据槽S2的二级索引项,在该二级索引项中将数据槽S2标记为未使用,依次类推,在二级索引文件2.idx中标记删除所有对象分块,最后,在将该该对象对应的一级索引项标记为无效,实现该对象在缓存的删除。...

【技术特征摘要】
1.一种基于磁盘的对象缓存方法,其特征在于,包括: 划分文件存储空间,构建二级索引的文件存储结构,该文件存储结构由一个一级索引文件1.1dx、一个二级索引文件2.1dx、以及一至多个文件块N1.dat (i=l, 2,3,......η, η为正整数)组成,每一文件块N1.dat划分为一至多个数据槽Si (i=l,2,3,……n,n为正整数),该每一数据槽Si的大小为2n KB,其中η为正整数,且该数据槽Si大小<文件块N1.dat大小,所述一级索引文件1.1dx用于存放一级索引项,一个二级索引文件2.1dx用于存放二级索引项;每一个数据槽Si在二级索引文件2.1dx中存在一个二级索引项与之对应,该二级索引项记录该数据槽Si在哪一个文件块中,以及数据槽Si在文件块中的位置、大小、使用情况等信息, 往磁盘缓存中添加对象过程:根据对象的主键K设置一级索引项的对象主键ObjKey,根据文件块的设定容量将对象进行分割,形成一个或多个对象分块,每一对象分块大小<文件块大小,将一个或多个对象分块存储到一至多个文件块的数据槽Si中,所述一级索引项记录第一个对象分块所在的数据槽SI的二级索引项在二级索引文件2.1dx的位置,该数据槽SI对应的二级索引项又记录下一个对象分块所在的数据槽S2的二级索引项在二级索引文件2.1dx2.1dx的位置,依次类推,数据槽Si对应的二级索引项又记录第i+Ι个对象分块所在的数据槽Si+Ι的二级索引项在二级索引文件2.1dx的位置; 从磁盘缓存中获取缓存对象过程:扫描一级索引文件1.1dx,查找到对象主键ObjKey与对象主键K 一致的一级索引项,该一级索引项记录了该对象的第一个对象分块所在的数据槽SI的二级索引项在二级索引文件2.1dx的位置,从二级索引文件2.1dx中获取第一个对象分块所在的数据槽SI的二级索引项,通过该二级索引项定位到数据槽SI所在的文件块中获取第一个对象分块的数据,然后依据数据槽SI的二级索引项中记录的第二个对象分块所在的数据槽S`2的二级索引项的位置,从二级索引文件2.1dx中获取第二个对象分块所在的数据槽S2的二级索引项,再通过该二级索引项定位到数据槽S2所在的文件块中获取第二个对象分块的数据,依次类推,得到所有对象分块数据,将所有对象分块数据依序排列拼接,得到完整的对象数据; 从磁盘缓存中删除缓存对象过程:扫描一级索引文件1.1dx,查找到对象主键ObjKey与对象主键K 一致的一级索引项,从二级索引文件2.1dx中获取到该对象的第一个对象分块所在的数据槽SI的二级索引项,在该二级索引项中将数据槽SI标记为未使用,再通过该二级索引项获取第二个对象分块所在的数据槽S2的二级索引项,在该二级索引项中将数据槽S2标记为未使用,依次类推,在二级索引文件2.1dx中标记删除所有对象分块,最后,在将该该对象对应的一级索引项标记为无效,实现该对象在缓存的删除。2.根据权利要求1所述的一种基于磁盘的对象缓存方法,其特征在于:每一文件块N1.dat (i=l,2,3,……η,η为正整数)的大小相同。3.根据权利要求1所述的一种基于磁盘的对象缓存方法,其特征在于:所述一级索引项的长度是34字节,所述一级索引项记录一个缓存对象信息,一级索引项的字段包括: 1)对象主键(ObjKey,20字节):该字段用于存储缓存对象的主键K,每个缓存对象都是通过主键来进行唯一标识; 2)对象创建时间(CreateTime,4字节):该字段用于记录对象添加到缓存中的时间,该字段主要用于对象缓存失效的判断;3)对象最后访问时间(LastAccessTime,4字节):该字段用于记录对象最后一次被访问的时间,该字段主要用于对象缓存失效的判断; 4)有效性标识(ValidFlag,I字节):该字段用于标记对象在缓存中是否已经失效,O表示失效,I表示有效; 5)检验和(Checksum,I字节):该字段用于记录对象数据通过特定校验算法(如采用CRC循环校验算法)计算得到的校验和; 6)第一个数据槽索引(FirstSlotIndex,4字节):该字段用于记录存储对象的第一个分包的数据槽的二级索引项编号; 所述二级索引项的长度是21字节,每个二级索引项存储一个数据槽Si的元信息,二级索引项中的字段组成如下: O文件块ID (ChunkID,4字节):该字段表示数据槽所在的文件块ID,用整数表示;每个文件块在文件系统中的名称为“〈ChunkID〉.dat” ; 2)数据槽偏移量(Slot0ffset,4字节):该字段表示数据槽起始位置在文件块中的偏移量(字节数); 3)数据槽大小(SlotSize,4字节):该字段表示数据槽的字节数,即数据槽所能容纳的最大数据长度; 4)使用标志(UseFlag,I字节):该字段表示数据槽是否被用于存储对象数据:0表示未被使用;I表示被使用; 5)数据大小(DataSize,4字节):该字段表示被使用的数据槽中,实际存储的数据的大小; 6)下一个数据槽索引(NextSlotIndex,4字节):用于存储下一个对象分块的数据槽的二级索引项编号,如果NextSlotIndex为-1,表示该数据槽存储着对象的最后一个对象分块。4.根据权利要求3所述的一种基于磁盘的对象缓存方法,其特征在于: 所述对象包括对象主键K和对象数据V,往磁盘缓存中添加对象具体过程为: Al:扫描一级索引文件1.1dx,判断是否存在一个一级索引项,该一级索引项中的ObjKey与待添加的对象主键K 一致,且ValidFlag为1,如果存在满足条件的一级索引项,则表明缓存中已经存在一个主键为K的对象,转至步骤A2执行;否则,转至步骤A3执行; A2:返回失败信息,并告知缓存中已经存在主键为K的对象; A3:计算待缓存的对象大小,若该对象大小>文件块大小,将该对象拆分成若干个对象分块,每个对象分块大小<文件块大小;若对象大小<文件块大小,则将该对象整个作为一个对象分块,转至步骤A4执行; A4:扫描二级索引文件2.1dx,判断是否存在一个满足“SlotSize值的3/4≤对象分块大小< SlotSize值”条件的空闲数据槽Si,若是,则将该对象分块存储在该空闲数据槽Si中,并在二级索引文件2.1dx中修改该数据槽Si对应的二级索引项JfUseFlag#记为I ;DataSize设置为对象分块的大小;如果该对象分块是对象的最后一个分块,则将NextSlotIndex设置为_1,如果该对象分块不是对...

【专利技术属性】
技术研发人员:程行荣刘志芳吴超民孙震黄文淮
申请(专利权)人:厦门雅迅网络股份有限公司
类型:发明
国别省市:

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

1