【技术实现步骤摘要】
本专利技术涉及磁盘缓存
,具体涉及。
技术介绍
在现代软件开发的过程中,缓存的使用对系统性能的提升起到相当关键的作用。在通常情况下,使用的最多的是内存缓存,即将缓存对象存储到内存中,便于快速的读取。但是,内存缓存的存储空间有限,即使是分布式内存缓存,能够提供的内存存储空间也是有限的,当需要缓存大量的大对象(如图片、音频、视频以及其他大对象等)时,内存缓存就显得不太合适,而基于磁盘的缓存能够很好的满足大对象的存储需求。在基于磁盘的缓存实现中,如果是直接将每个待缓存的对象作为单独文件存储在磁盘中,如果缓存对象数量众多,就会在磁盘中产生大量的问题,这样会大大降低磁盘的读写效率。而缓存对象通常都有一定的生命周期,会根据不同的策略失效,此时,磁盘文件就会频繁的增加和删除,导致大量磁盘碎片产生,从而进一步降低磁盘读写效率。
技术实现思路
解决上述技术问题,本专利技术提供了本专利技术提供了,能够实现任意大小的对象缓存(如图片、音频、视频以及其他任意对象),通过优化的数据存储结构来实现对象的快速写入和存取,同时,还能够解决大量文件的频繁存取所导致的磁盘碎片问题,从而实现磁盘的空间的高效利用。为了达到上述目的,本专利技术所采用的技术方案是,,包括:划分文件存储空间,构建二级索引的文件存储结构,该文件存储结构由一个一级索引文件1.1dx、一个二级索引文件2.1dx、以及一至多个文件块N1.dat (i=l, 2,3,......η, η为正整数)组成,每一文件块N1.dat划分为一至多个数据槽Si (i=l,2,3,……n,n为正整数),该每一数据槽Si的 ...
【技术保护点】
一种基于磁盘的对象缓存方法,其特征在于,包括:划分文件存储空间,构建二级索引的文件存储结构,该文件存储结构由一个一级索引文件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的位置, ...
【技术特征摘要】
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,如果该对象分块不是对...
【专利技术属性】
技术研发人员:程行荣,刘志芳,吴超民,孙震,黄文淮,
申请(专利权)人:厦门雅迅网络股份有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。