CN103678638A - 一种基于磁盘的对象缓存方法 - Google Patents
一种基于磁盘的对象缓存方法 Download PDFInfo
- Publication number
- CN103678638A CN103678638A CN201310710511.8A CN201310710511A CN103678638A CN 103678638 A CN103678638 A CN 103678638A CN 201310710511 A CN201310710511 A CN 201310710511A CN 103678638 A CN103678638 A CN 103678638A
- Authority
- CN
- China
- Prior art keywords
- data
- secondary index
- slot data
- index item
- files
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/172—Caching, prefetching or hoarding of files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/0643—Management of files
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Human Computer Interaction (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明涉及磁盘缓存技术领域,具体涉及一种基于磁盘的对象缓存方法。本发明的一种,包括:划分文件存储空间,构建二级索引的文件存储结构,并依据二级索引的文件存储结构实现该往磁盘缓存中添加对象过程、从磁盘缓存中获取缓存对象过程、从磁盘缓存中删除缓存对象过程、缓存失效机制和缓存优化整理过程,本发明通过本发明通过固定大小的文件块来存储对象的数据,将多个小对象合并存储在一个文件块中,将大对象分拆成多个对象分块(ObjectBlock)分别存储在多个文件块(Chunk)中,能够实现任意大小和任意类型的对象的缓存,缓存效率更高。
Description
技术领域
本发明涉及磁盘缓存技术领域,具体涉及一种基于磁盘的对象缓存方法。
背景技术
在现代软件开发的过程中,缓存的使用对系统性能的提升起到相当关键的作用。在通常情况下,使用的最多的是内存缓存,即将缓存对象存储到内存中,便于快速的读取。但是,内存缓存的存储空间有限,即使是分布式内存缓存,能够提供的内存存储空间也是有限的,当需要缓存大量的大对象(如图片、音频、视频以及其他大对象等)时,内存缓存就显得不太合适,而基于磁盘的缓存能够很好的满足大对象的存储需求。在基于磁盘的缓存实现中,如果是直接将每个待缓存的对象作为单独文件存储在磁盘中,如果缓存对象数量众多,就会在磁盘中产生大量的问题,这样会大大降低磁盘的读写效率。而缓存对象通常都有一定的生命周期,会根据不同的策略失效,此时,磁盘文件就会频繁的增加和删除,导致大量磁盘碎片产生,从而进一步降低磁盘读写效率。
发明内容
解决上述技术问题,本发明提供了本发明提供了一种基于磁盘的对象缓存方法,能够实现任意大小的对象缓存(如图片、音频、视频以及其他任意对象),通过优化的数据存储结构来实现对象的快速写入和存取,同时,还能够解决大量文件的频繁存取所导致的磁盘碎片问题,从而实现磁盘的空间的高效利用。
为了达到上述目的,本发明所采用的技术方案是,一种基于磁盘的对象缓存方法,包括:
划分文件存储空间,构建二级索引的文件存储结构,该文件存储结构由一个一级索引文件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用于存放二级索引项;每一个数据槽在二级索引文件中存在一个二级索引项与之对应,该二级索引项记录该数据槽在哪一个文件块中,以及在文件块中的位置、大小、使用情况等信息。
往磁盘缓存中添加对象过程:根据对象的主键K设置一级索引项的对象主键ObjKey,根据文件块的设定容量将对象进行分割,形成一个或多个对象分块,每一对象分块大小≤文件块大小,将一个或多个对象分块存储到一至多个文件块的数据槽Si中,所述一级索引项记录第一个对象分块所在的数据槽S1的二级索引项在二级索引文件的位置,该数据槽S1对应的二级索引项又记录下一个对象分块所在的数据槽S2的二级索引项在二级索引文件的位置,依次类推,数据槽Si对应的二级索引项又记录下一个对象分块所在的数据槽Si+1的二级索引项在二级索引文件2.idx的位置;
从磁盘缓存中获取缓存对象过程:扫描一级索引文件1.idx,查找到对象主键ObjKey与对象主键K一致的一级索引项,该一级索引项记录了该对象的第一个对象分块所在的数据槽S1的二级索引项在二级索引文件2.idx的位置,从二级索引文件中获取第一个对象分块所在的数据槽S1的二级索引项,通过该二级索引项定位到数据槽S1所在的文件块中获取第一个对象分块的数据,然后依据数据槽S1的二级索引项中记录的第二个对象分块所在的数据槽S2的二级索引项的位置,从二级索引文件2.idx中获取第二个对象分块所在的数据槽S2的二级索引项,再通过该二级索引项定位到数据槽S2所在的文件块中获取第二个对象分块的数据,依次类推,得到所有对象分块数据,将所有对象分块数据依序排列拼接,得到完整的对象数据;
从磁盘缓存中删除缓存对象过程:扫描一级索引文件1.idx,查找到对象主键ObjKey与对象主键K一致的一级索引项,从二级索引文件2.idx中获取到该对象的第一个对象分块所在的数据槽S1的二级索引项,在该二级索引项中将数据槽S1标记为未使用,再通过该二级索引项获取第二个对象分块所在的数据槽S2的二级索引项,在该二级索引项中将数据槽S2标记为未使用,依次类推,在二级索引文件中标记删除所有对象分块。最后,在将该该对象对应的一级索引项标记为无效,实现该对象在缓存的删除。
进一步的,每一文件块Ni.dat(i=1,2,3,……n,n为正整数)的大小相同。
更进一步的,每一文件块Ni.dat(i=1,2,3,……n,n为正整数)的大小可以为任意值,推荐为64MB。
进一步的,所述一级索引项的长度是34字节,所述一级索引项记录一个缓存对象信息,一级索引项的字段包括:
1)对象主键(ObjKey,20字节):该字段用于存储缓存对象的主键K,每个缓存对象都是通过主键来进行唯一标识;
2)对象创建时间(CreateTime,4字节):该字段用于记录对象添加到缓存中的时间,该字段主要用于对象缓存失效的判断;
3)对象最后访问时间(LastAccessTime,4字节):该字段用于记录对象最后一次被访问的时间,该字段主要用于对象缓存失效的判断;
4)有效性标识(ValidFlag,1字节):该字段用于标记对象在缓存中是否已经失效,0表示失效,1表示有效;当对象被缓存失效机制判定为无效而从缓存中剔除时,缓存系统并不是将该对象对应的一级索引项删除,而是将该对象对应的一级索引项中的ValidFlag字段标记为0,从而实现对象的标记删除;
5)检验和(CheckSum,1字节):该字段用于记录对象数据通过特定校验算法(如采用CRC循环校验算法)计算得到的校验和;当从缓存中读取对象数据时,利用该字段来校验对象数据是否完备,从而判断读取到的对象数据是否与与存储时的对象数据一致;
6)第一个数据槽索引(FirstSlotIndex,4字节):该字段用于记录存储对象的第一个分包的数据槽的二级索引项编号,对于小对象,通常只有一个分包;而对于大对象,可以有一至多个分块;
所述二级索引项的长度是21字节,每个二级索引项存储一个数据槽Si的元信息,二级索引项中的字段组成如下:
1)文件块ID(ChunkID,4字节):该字段表示数据槽所在的文件块ID,用整数表示;每个文件块在文件系统中的名称为“<ChunkID>.dat”;
2)数据槽偏移量(SlotOffset,4字节):该字段表示数据槽起始位置在文件块中的偏移量(字节数);
3)数据槽大小(SlotSize,4字节):该字段表示数据槽的字节数,即数据槽所能容纳的最大数据长度;
4)使用标志(UseFlag,1字节):该字段表示数据槽是否被用于存储对象数据:0表示未被使用;1表示被使用;当缓存对象被删除时,存储该对象数据所占用的数据槽并没有被删除,而是将二级索引中该数据槽对应的二级索引项中的UseFlag标记为0,即将数据槽标记删除实现回收,该数据槽可利用于存储其他的对象数据;
5)数据大小(DataSize,4字节):该字段表示被使用的数据槽中,实际存储的数据的大小;因为数据槽在分配时,其大小为2n KB,将数据槽用于存储对象数据时,通常对象数据不会把数据槽的整个空间都占用,会留有小部分的剩余空间,该剩余空间不能被使用,即所谓的空洞;随着大量文件块中的数据槽不断地回收利用,其中的空洞就会越来越多,必须对缓存优化整理,将其中的空洞减少到最小;
6)下一个数据槽索引(NextSlotIndex,4字节):表示存储下一个对象分块的数据槽的二级索引项编号,如果NextSlotIndex为-1,表示该数据槽存储着对象的最后一个对象分块。
更进一步的,所述对象包括对象主键K和对象数据V,往磁盘缓存中添加对象具体过程为:
A1:扫描一级索引文件1.idx,判断是否存在一个一级索引项,该一级索引项中的ObjKey与待添加的对象主键K一致,且ValidFlag为1,如果存在满足条件的一级索引项,则表明缓存中已经存在一个主键为K的对象,转至步骤A2执行;否则,转至步骤A3执行;
A2:返回失败信息,并告知缓存中已经存在主键为K的对象;
A3:计算待缓存的对象大小,若该对象大小>文件块大小,将该对象拆分成若干个对象分块,每个对象分块大小≤文件块大小;若对象大小≤文件块大小,则将该对象整个作为一个对象分块,转至步骤A4执行;
A4:扫描二级索引文件2.idx,判断是否存在一个满足“SlotSize值的3/4≤对象分块大小≤SlotSize值”条件的空闲数据槽Si,若是,则将该对象分块存储在该空闲数据槽Si中,并在二级索引文件中修改该数据槽Si对应的二级索引项:将UseFlag标记为1;DataSize设置为对象分块的大小;如果该对象分块是对象的最后一个分块,则将NextSlotIndex设置为-1,如果该对象分块不是对象的第一个分块,则将存储前一个对象分块的数据槽Si-1的二级索引项的NextSlotIndex修改为当前数据槽Si的二级索引项,转至步骤A7执行;否则,若不存在满足“SlotSize值的3/4≤对象分块大小≤SlotSize值”条件的空闲数据槽Si,转至步骤A5执行;
A5:遍历文件块Ni.dat,判断是否存在一个文件块,该文件块存在空闲空间,且该空闲空间大小必须大于容得下该对象分块的数据槽Si大小,该数据槽Si大小为2n KB,且该数据槽Si大小≥该对象分块大小,n计算公式为:[log2(对象分块大小)]值向上取整数,否则,则新增一个文件块(Ni+1).dat,在文件块(Ni+1).dat中创建新数据槽Si,该数据槽Si大小为2n KB,且该数据槽Si+1大小≥该对象分块大小,n计算公式为:[log2(对象分块大小)]值向上取整数;
A6:将该对象分块存储到该数据槽Si中,并在二级索引文件2.idx末尾添加该数据槽Si对应的二级索引项:设置ChunkID、SlotOffset和SlotSize为新数据槽在文件块中的位置和大小;将UseFlag标记为1;DataSize设置为数据槽中存储的对象分块的大小;如果该对象分块是最后对象的一个分块,则将NextSlotIndex设置为-1,转至步骤A7执行。
A7:对象的所有对象分块都存储到数据槽后,在一级索引文件1.idx末尾添加一个一级索引项:将ObjKey设置为该对象主键;将CreateTime和LastAccessTime设置为当前时间;将ValidFlag设置为1;将CheckSum设置为从该对象数据计算得到的校验和;将FirstSlotIndex设置为存储第一个对象分包的数据槽S1的二级索引项,返回对象添加成功应答。
进一步的,从磁盘缓存中获取缓存对象具体方法如下:
B1:利用一级索引扫描一级索引文件1.idx,查询到一级索引的ObjKey字段等于对象主键K,且ValidFlag字段等于1时,则读取FirstSlotIndex字段,得到存储第一个对象分块的数据槽S1的二级索引项,转至B2执行,否则返回失败应答,
B2:将该二级索引项的编号乘以二级索引项数据长度得到该二级索引项在二级索引文件2.idx中的偏移位置,通过该偏移位置从二级索引文件2.idx中读取相应的二级索引项,再根据该二级索引项中的ChunkID、SlotOffset和DataSize字段,从文件块中将对象分块数据读取出来,判断该二级索引项中的NextSlotIndex是否为-1,若是,则表示是最后一个对象分块,转至B3执行;否则,读取NextSlotIndex字段,得到存储下一个对象分块的数据槽的二级索引项的编号,转至B2继续执行;
B3:获取到所有对象分块后,将所有对象分块按照先后顺序拼接起来,得到完整的对象数据,计算读取到的对象数据的校验和,如果该对象数据的校验和等于对应的一级索引项中的CheckSum值,则表明该对象数据完备,修改该一级索引项的LastAccessTime为当前时间,然后成功返回该对象数据;如果对象数据校验失败,则在缓存中删除该对象,并返回获取缓存对象失败应答。
进一步的,从磁盘缓存中删除缓存对象具体方法如下,输入待删除的对象主键K:
C1:利用一级索引扫描一级索引文件1.idx,查询到一级索引的ObjKey字段等于对象主键K,且ValidFlag字段等于1时,则读取FirstSlotIndex字段,得到存储第一个对象分块的数据槽的二级索引项编号,转至C2执行,否则返回失败应答,
C2:将该二级索引项的编号乘以二级索引项数据长度得到该二级索引项在二级索引文件中的偏移位置,通过该偏移位置从二级索引文件中读取相应的二级索引项,将该二级索引项的UseFlag设置为0,标记删除对应的数据槽,回收再利用,判断该二级索引项中的NextSlotIndex是否为-1,若是,则表示是最后一个对象分块,转至C3执行;否则,读取NextSlotIndex字段,得到存储下一个对象分块的数据槽对应的二级索引项的编号,转至C2继续执行;
C3:将对象主键K对应的一级索引项的ValidFlag标记为0,最后返回缓存对象删除成功应答。
进一步的,本发明还包括过程D:磁盘缓存中缓存的对象通过缓存失效机制来剔除过期的对象,释放磁盘空间,所述缓存失效机制包括两种:LRU(Least Recently Used,最近最少使用)机制和FIFO(First In First Out,先入先出)机制。
更进一步的,通过事先设置的最大缓存时间(MaxCacheTime)参数,两种缓存失效机制工作过程如下:
D1:LRU机制。定时扫描一级索引文件,对于每一个一级索引项,如果当前时间减去LastAccessTime的值超过MaxCacheTime参数值,则认为该一级索引项对应的缓存对象已经过期,则从缓存中删除该对象(参考过程C中描述的步骤进行)。
D2:FIFO机制。定时扫描一级索引文件,对于每一个一级索引项,如果当前时间减去CreateTime的值超过MaxCacheTime参数值,则认为该一级索引项对应的缓存对象已经过期,则从缓存中删除该对象(参考过程C中描述的步骤进行)。
进一步的,本发明还包括过程E:缓存优化整理过程,包括以下步骤:
E1:扫描二级索引文件,得到一个二级索引项列表,该列表中二级索引项按照DataSize值从小到大排列。
E2:逐个遍历二级索引项列表中的每个二级索引项,从旧文件块中读取二级索引项中指定的旧的数据槽中的数据;
步骤E3,将旧数据槽中的数据拷贝到新文件块中,然后,修改该二级索引项中的ChunkID、SlotOffset和SlotSize字段指向新文件块的数据槽,如果旧文件块中的数据槽数据都已经搬移到新文件块中,则可以将旧文件块删除。
进一步的,上述步骤E3:将旧数据槽中的数据拷贝到新文件块中,具体包括如下步骤:
E31:首先根据待搬移的数据大小,计算新数据槽大小,新数据槽大小为2n KB且刚好能够容纳待搬移的数据;
E32:然后在新文件块中创建新的数据槽,然后将数据从旧数据槽中复制到新数据槽中。
本发明通过本发明通过固定大小的文件块来存储对象的数据,将多个小对象合并存储在一个文件块中,将大对象分拆成多个对象分块(Object Block)分别存储在多个文件块(Chunk)中,每个文件块大小可以设置为任意值,但是经过经验测试,每个文件块大小设置为64MB时磁盘能够更加充分利用,读写效率更高。本发明采用上述技术方案,与现有技术相比,具有如下优点:
1)能够实现任意大小和任意类型的对象的缓存,在实际应用中,可用于图片、音频、视频、其它静态文件以及运行时对象的缓存;
2)将大量小对象合并存储在固定大小的文件块中,能够避免缓存小对象时产生的大量磁盘碎片,导致访问效率低下的问题。
3)通过设计独特的二级索引方法,能够有效提高缓存对象的存取效率。
4)通过缓存失效机制和缓存优化整理机制,将文件块中的空洞消除,能够实现高效的空间回收利用。
附图说明
图1是本发明的实施例的数据存储结构;
图2是本发明的实施例的二级索引字段定义;
图3是本发明的实施例的一级索引字段定义。
具体实施方式
现结合附图和具体实施方式对本发明进一步说明。
作为一个具体的实施例,本发明采用基于二级索引的文件存储结构,如图1至图3所示,一种基于磁盘的对象缓存方法,包括:
划分文件存储空间,构建二级索引的文件存储结构,该文件存储结构由一个一级索引文件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用于存放二级索引项;每一个数据槽在二级索引文件中存在一个二级索引项与之对应,该二级索引项记录该数据槽在哪一个文件块中,以及数据槽在文件块中的位置、大小、使用情况等信息。
每一文件块Ni.dat(i=1,2,3,……n,n为正整数)的大小相同且可以设置为任意值。但是经过经验测试,每一文件块Ni.dat(i=1,2,3,……n,n为正整数)的大小设置为为64MB时,磁盘能够更加充分利用,读写效率更高。
参考图3所示,所述一级索引项的长度是34字节,所述一级索引项记录一个缓存对象信息,一级索引项的字段包括:
1)对象主键(ObjKey,20字节):该字段用于存储缓存对象的主键K,每个缓存对象都是通过主键来进行唯一标识;
2)对象创建时间(CreateTime,4字节):该字段用于记录对象添加到缓存中的时间,该字段主要用于对象缓存失效的判断;
3)对象最后访问时间(LastAccessTime,4字节):该字段用于记录对象最后一次被访问的时间,该字段主要用于对象缓存失效的判断;
4)有效性标识(ValidFlag,1字节):该字段用于标记对象在缓存中是否已经失效,0表示失效,1表示有效;当对象被缓存失效机制判定为无效而从缓存中剔除时,缓存系统并不是将该对象对应的一级索引项删除,而是将该对象对应的一级索引项中的ValidFlag字段标记为0,从而实现对象的标记删除;
5)检验和(CheckSum,1字节):该字段用于记录对象数据通过特定校验算法(如采用CRC循环校验算法)计算得到的校验和;当从缓存中读取对象数据时,利用该字段来校验对象数据是否完备,从而判断读取到的对象数据是否与与存储时的对象数据一致;
6)第一个数据槽索引(FirstSlotIndex,4字节):该字段用于记录存储对象的第一个分包的数据槽的二级索引项编号,对于小对象,通常只有一个分包;而对于大对象,可以有一至多个分块;
参考图2所示,所述二级索引项的长度是21字节,每个二级索引项存储一个数据槽Si的元信息,二级索引项中的字段组成如下:
1)文件块ID(ChunkID,4字节):该字段表示数据槽所在的文件块ID,用整数表示;每个文件块在文件系统中的名称为“<ChunkID>.dat”;
2)数据槽偏移量(SlotOffset,4字节):该字段表示数据槽起始位置在文件块中的偏移量(字节数);
3)数据槽大小(SlotSize,4字节):该字段表示数据槽的字节数,即数据槽所能容纳的最大数据长度;
4)使用标志(UseFlag,1字节):该字段表示数据槽是否被用于存储对象数据:0表示未被使用;1表示被使用;当缓存对象被删除时,存储该对象数据所占用的数据槽并没有被删除,而是将二级索引中该数据槽对应的二级索引项中的UseFlag标记为0,即将数据槽标记删除实现回收,该数据槽可利用于存储其他的对象数据;
5)数据大小(DataSize,4字节):该字段表示被使用的数据槽中,实际存储的数据的大小;因为数据槽在分配时,其大小为2n KB,将数据槽用于存储对象数据时,通常对象数据不会把数据槽的整个空间都占用,会留有小部分的剩余空间,该剩余空间不能被使用,即所谓的空洞;随着大量文件块中的数据槽不断地回收利用,其中的空洞就会越来越多,必须对缓存优化整理,将其中的空洞减少到最小;
6)下一个数据槽索引(NextSlotIndex,4字节):表示存储下一个对象分块的数据槽的二级索引项编号,如果NextSlotIndex为-1,表示该数据槽存储着对象的最后一个对象分块。
往磁盘缓存中添加对象过程:根据对象的主键K设置一级索引项的对象主键ObjKey,根据文件块的设定容量将对象进行分割,形成一个或多个对象分块,每一对象分块大小≤文件块大小,将一个或多个对象分块存储到一至多个文件块的数据槽Si中,所述一级索引项记录了第一个对象分块所在的数据槽S1的二级索引项在二级索引文件的位置,而数据槽S1对应的二级索引项又记录了下一个对象分块所在的数据槽S2的二级索引项在二级索引文件的位置,依次类推; 数据槽Si对应的二级索引项又记录下一个对象分块所在的数据槽Si+1的二级索引项在二级索引文件2.idx的位置;
本实施例中,所述对象包括对象主键K和对象数据V,往磁盘缓存中添加对象具体过程为:
A1:扫描一级索引文件1.idx,判断是否存在一个一级索引项,该一级索引项中的ObjKey与待添加的对象主键K一致,且ValidFlag为1,如果存在满足条件的一级索引项,则表明缓存中已经存在一个主键为K的对象,转至步骤A2执行;否则,转至步骤A3执行;
A2:返回失败信息,并告知缓存中已经存在主键为K的对象;
A3:计算待缓存的对象大小,若该对象大小>文件块大小,将该对象拆分成若干个对象分块,每个对象分块大小≤文件块大小;若对象大小≤文件块大小,则将该对象整个作为一个对象分块,转至步骤A4执行;
A4:扫描二级索引文件2.idx,判断是否存在一个满足“SlotSize值的3/4≤对象分块大小≤SlotSize值”条件的空闲数据槽Si,若是,则将该对象分块存储在该空闲数据槽Si中,并在二级索引文件中修改该数据槽Si对应的二级索引项:将UseFlag标记为1;DataSize设置为对象分块的大小;如果该对象分块是对象的最后一个分块,则将NextSlotIndex设置为-1,如果该对象分块不是对象的第一个分块,则将存储前一个对象分块的数据槽Si-1的二级索引项的NextSlotIndex修改为当前数据槽Si的二级索引项,转至步骤A7执行;否则,若不存在满足“SlotSize值的3/4≤对象分块大小≤SlotSize值”条件的空闲数据槽Si,转至步骤A5执行;
A5:遍历文件块Ni.dat,判断是否存在一个文件块,该文件块存在空闲空间,且该空闲空间大小必须大于容得下该对象分块的数据槽Si大小,该数据槽Si大小为2n KB,且该数据槽Si大小≥该对象分块大小,n计算公式为:[log2(对象分块大小)]值向上取整数,并将剩下的空闲空间记录起来供后续创建数据槽使用,否则,则新增一个文件块(Ni+1).dat,在文件块(Ni+1).dat中创建新数据槽Si,该数据槽Si大小为2n KB,且该数据槽Si+1大小≥该对象分块大小,n计算公式为:[log2(对象分块大小)]值向上取整数,并将剩下的空闲空间记录起来供后续创建数据槽使用;
A6:将该对象分块存储到该数据槽Si中,并在二级索引文件2.idx末尾添加该数据槽Si对应的二级索引项:设置ChunkID、SlotOffset和SlotSize为新数据槽在文件块中的位置和大小;将UseFlag标记为1;DataSize设置为数据槽中存储的对象分块的大小;如果该对象分块是最后对象的一个分块,则将NextSlotIndex设置为-1,转至步骤A7执行。
A7:对象的所有对象分块都存储到数据槽后,在一级索引文件1.idx末尾添加一个一级索引项:将ObjKey设置为该对象主键;将CreateTime和LastAccessTime设置为当前时间;将ValidFlag设置为1;将CheckSum设置为从该对象数据计算得到的校验和;将FirstSlotIndex设置为存储第一个对象分包的数据槽S1的二级索引项,返回对象添加成功应答。
从磁盘缓存中获取缓存对象过程:扫描一级索引文件1.idx,查找到对象主键ObjKey与对象主键K一致的一级索引项,该一级索引项记录了该对象的第一个对象分块所在的数据槽S1的二级索引项在二级索引文件2.idx的位置,从二级索引文件中获取第一个对象分块所在的数据槽S1的二级索引项,通过该二级索引项定位到数据槽S1所在的文件块中获取第一个对象分块的数据,然后依据数据槽S1的二级索引项中记录的第二个对象分块所在的数据槽S2的二级索引项的位置,从二级索引文件2.idx中获取第二个对象分块所在的数据槽S2的二级索引项,再通过该二级索引项定位到数据槽S2所在的文件块中获取第二个对象分块的数据,依次类推,得到所有对象分块数据,将所有对象分块数据依序排列拼接,得到完整的对象数据;
本实施例中,从磁盘缓存中获取缓存对象具体方法如下:
B1:利用一级索引扫描一级索引文件1.idx,查询到一级索引的ObjKey字段等于对象主键K,且ValidFlag字段等于1时,则读取FirstSlotIndex字段,得到存储第一个对象分块的数据槽S1的二级索引项,转至B2执行,否则返回失败应答,
B2:将该二级索引项的编号乘以二级索引项数据长度得到该二级索引项在二级索引文件2.idx中的偏移位置,通过该偏移位置从二级索引文件2.idx中读取相应的二级索引项,再根据该二级索引项中的ChunkID、SlotOffset和DataSize字段,从文件块中将对象分块数据读取出来,判断该二级索引项中的NextSlotIndex是否为-1,若是,则表示是最后一个对象分块,转至B3执行;否则,读取NextSlotIndex字段,得到存储下一个对象分块的数据槽的二级索引项的编号,转至B2继续执行;
B3:获取到所有对象分块后,将所有对象分块按照先后顺序拼接起来,得到完整的对象数据,计算读取到的对象数据的校验和,如果该对象数据的校验和等于对应的一级索引项中的CheckSum值,则表明该对象数据完备,修改该一级索引项的LastAccessTime为当前时间,然后成功返回该对象数据;如果对象数据校验失败,则在缓存中删除该对象,并返回获取缓存对象失败应答。
从磁盘缓存中删除缓存对象过程:扫描一级索引文件1.idx,查找到对象主键ObjKey与对象主键K一致的一级索引项,从二级索引文件2.idx中获取到该对象的第一个对象分块所在的数据槽S1的二级索引项,在该二级索引项中将数据槽S1标记为未使用,再通过该二级索引项获取第二个对象分块所在的数据槽S2的二级索引项,在该二级索引项中将数据槽S2标记为未使用,依次类推,在二级索引文件中标记删除所有对象分块。最后,在将该该对象对应的一级索引项标记为无效,实现该对象在缓存的删除。
本实施例中,从磁盘缓存中删除缓存对象具体方法如下,输入待删除的对象主键K,:
C1:利用一级索引扫描一级索引文件1.idx,查询到一级索引的ObjKey字段等于对象主键K,且ValidFlag字段等于1时,则读取FirstSlotIndex字段,得到存储第一个对象分块的数据槽的二级索引项编号,转至C2执行,否则返回失败应答,
C2:将该二级索引项的编号乘以二级索引项数据长度得到该二级索引项在二级索引文件中的偏移位置,通过该偏移位置从二级索引文件中读取相应的二级索引项,将该二级索引项的UseFlag设置为0,标记删除对应的数据槽,回收再利用,判断该二级索引项中的NextSlotIndex是否为-1,若是,则表示是最后一个对象分块,转至C3执行;否则,读取NextSlotIndex字段,得到存储下一个对象分块的数据槽对应的二级索引项的编号,转至C2继续执行;
C3:将对象主键K对应的一级索引项的ValidFlag标记为0,最后返回缓存对象删除成功应答。
本实施例还包括过程D:磁盘缓存中缓存的对象通过缓存失效机制来剔除过期的对象,释放磁盘空间,所述缓存失效机制包括两种:LRU(Least Recently Used,最近最少使用)机制和FIFO(First In First Out,先入先出)机制。
通过事先设置的最大缓存时间(MaxCacheTime)参数,两种缓存失效机制工作过程如下:
D1:LRU机制。定时扫描一级索引文件,对于每一个一级索引项,如果当前时间减去LastAccessTime的值超过MaxCacheTime参数值,则认为该一级索引项对应的缓存对象已经过期,则从缓存中删除该对象(参考过程C中描述的步骤进行)。
D2:FIFO机制。定时扫描一级索引文件,对于每一个一级索引项,如果当前时间减去CreateTime的值超过MaxCacheTime参数值,则认为该一级索引项对应的缓存对象已经过期,则从缓存中删除该对象(参考过程C中描述的步骤进行)。
本实施例还包括过程E:缓存优化整理过程,包括以下步骤:经过一段时间使用后,文件块中数据槽就会出现很多空洞,为了使磁盘空间实现充分利用,以及维持对象的高效存取速度,需要定期对缓存进行优化整理,减少文件块中的空洞。缓存优化整理过程如下:
E1:扫描二级索引文件,得到一个二级索引项列表,该列表中二级索引项按照DataSize值从小到大排列。
E2:逐个遍历二级索引项列表中的每个二级索引项,从旧文件块中读取二级索引项中指定的旧的数据槽中的数据;
步骤E3,将旧数据槽中的数据拷贝到新文件块中,然后,修改该二级索引项中的ChunkID、SlotOffset和SlotSize字段指向新文件块的数据槽,如果旧文件块中的数据槽数据都已经搬移到新文件块中,则可以将旧文件块删除。
进一步的,上述步骤E3:将旧数据槽中的数据拷贝到新文件块中,具体包括如下步骤:
E31:首先根据待搬移的数据大小,计算新数据槽大小,新数据槽大小为2n KB且刚好能够容纳待搬移的数据;
E32:然后在新文件块中创建新的数据槽,然后将数据从旧数据槽中复制到新数据槽中。
尽管结合优选实施方案具体展示和介绍了本发明,但所属领域的技术人员应该明白,在不脱离所附权利要求书所限定的本发明的精神和范围内,在形式上和细节上可以对本发明做出各种变化,均为本发明的保护范围。
Claims (10)
1.一种基于磁盘的对象缓存方法,其特征在于,包括:
划分文件存储空间,构建二级索引的文件存储结构,该文件存储结构由一个一级索引文件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中标记删除所有对象分块,最后,在将该该对象对应的一级索引项标记为无效,实现该对象在缓存的删除。
2.根据权利要求1所述的一种基于磁盘的对象缓存方法,其特征在于:每一文件块Ni.dat(i=1,2,3,……n,n为正整数)的大小相同。
3.根据权利要求1所述的一种基于磁盘的对象缓存方法,其特征在于:所述一级索引项的长度是34字节,所述一级索引项记录一个缓存对象信息,一级索引项的字段包括:
1)对象主键(ObjKey,20字节):该字段用于存储缓存对象的主键K,每个缓存对象都是通过主键来进行唯一标识;
2)对象创建时间(CreateTime,4字节):该字段用于记录对象添加到缓存中的时间,该字段主要用于对象缓存失效的判断;
3)对象最后访问时间(LastAccessTime,4字节):该字段用于记录对象最后一次被访问的时间,该字段主要用于对象缓存失效的判断;
4)有效性标识(ValidFlag,1字节):该字段用于标记对象在缓存中是否已经失效,0表示失效,1表示有效;
5)检验和(CheckSum,1字节):该字段用于记录对象数据通过特定校验算法(如采用CRC循环校验算法)计算得到的校验和;
6)第一个数据槽索引(FirstSlotIndex,4字节):该字段用于记录存储对象的第一个分包的数据槽的二级索引项编号;
所述二级索引项的长度是21字节,每个二级索引项存储一个数据槽Si的元信息,二级索引项中的字段组成如下:
1)文件块ID(ChunkID,4字节):该字段表示数据槽所在的文件块ID,用整数表示;每个文件块在文件系统中的名称为“<ChunkID>.dat”;
2)数据槽偏移量(SlotOffset,4字节):该字段表示数据槽起始位置在文件块中的偏移量(字节数);
3)数据槽大小(SlotSize,4字节):该字段表示数据槽的字节数,即数据槽所能容纳的最大数据长度;
4)使用标志(UseFlag,1字节):该字段表示数据槽是否被用于存储对象数据:0表示未被使用;1表示被使用;
5)数据大小(DataSize,4字节):该字段表示被使用的数据槽中,实际存储的数据的大小;
6)下一个数据槽索引(NextSlotIndex,4字节):用于存储下一个对象分块的数据槽的二级索引项编号,如果NextSlotIndex为-1,表示该数据槽存储着对象的最后一个对象分块。
4.根据权利要求3所述的一种基于磁盘的对象缓存方法,其特征在于:
所述对象包括对象主键K和对象数据V,往磁盘缓存中添加对象具体过程为:
A1:扫描一级索引文件1.idx,判断是否存在一个一级索引项,该一级索引项中的ObjKey与待添加的对象主键K一致,且ValidFlag为1,如果存在满足条件的一级索引项,则表明缓存中已经存在一个主键为K的对象,转至步骤A2执行;否则,转至步骤A3执行;
A2:返回失败信息,并告知缓存中已经存在主键为K的对象;
A3:计算待缓存的对象大小,若该对象大小>文件块大小,将该对象拆分成若干个对象分块,每个对象分块大小≤文件块大小;若对象大小≤文件块大小,则将该对象整个作为一个对象分块,转至步骤A4执行;
A4:扫描二级索引文件2.idx,判断是否存在一个满足“SlotSize值的3/4≤对象分块大小≤SlotSize值”条件的空闲数据槽Si,若是,则将该对象分块存储在该空闲数据槽Si中,并在二级索引文件2.idx中修改该数据槽Si对应的二级索引项:将UseFlag标记为1;DataSize设置为对象分块的大小;如果该对象分块是对象的最后一个分块,则将NextSlotIndex设置为-1,如果该对象分块不是对象的第一个分块,则将存储前一个对象分块的数据槽Si-1的二级索引项的NextSlotIndex修改为当前数据槽Si的二级索引项,转至步骤A7执行;否则,若不存在满足“SlotSize值的3/4≤对象分块大小≤SlotSize值”条件的空闲数据槽Si,转至步骤A5执行;
A5:遍历文件块Ni.dat,判断是否存在一个文件块,该文件块存在空闲空间,且该空闲空间大小必须大于容得下该对象分块的数据槽Si大小,该数据槽Si大小为2n KB,且该数据槽Si大小≥该对象分块大小,n计算公式为:[log2(对象分块大小)]值向上取整数,否则,则新增一个文件块(Ni+1).dat,在文件块(Ni+1).dat中创建新数据槽Si,该数据槽Si大小为2n KB,且该数据槽Si大小≥该对象分块大小,n计算公式为:[log2(对象分块大小)]值向上取整数,
A6:将该对象分块存储到该数据槽Si中,并在二级索引文件2.idx末尾添加该数据槽Si对应的二级索引项:设置ChunkID、SlotOffset和SlotSize为新数据槽在文件块中的位置和大小;将UseFlag标记为1;DataSize设置为数据槽中存储的对象分块的大小;如果该对象分块是最后对象的一个分块,则将NextSlotIndex设置为-1,转至步骤A7执行,
A7:对象的所有对象分块都存储到数据槽后,在一级索引文件1.idx末尾添加一个一级索引项:将ObjKey设置为该对象主键;将CreateTime和LastAccessTime设置为当前时间;将ValidFlag设置为1;将CheckSum设置为从该对象数据计算得到的校验和;将FirstSlotIndex设置为存储第一个对象分包的数据槽S1的二级索引项,返回对象添加成功应答。
5.根据权利要求3所述的一种基于磁盘的对象缓存方法,其特征在于:
从磁盘缓存中获取缓存对象具体方法如下:
B1:利用一级索引扫描一级索引文件1.idx,查询到一级索引的ObjKey字段等于对象主键K,且ValidFlag字段等于1时,则读取FirstSlotIndex字段,得到存储第一个对象分块的数据槽S1的二级索引项,转至B2执行,否则返回失败应答,
B2:将该二级索引项的编号乘以二级索引项数据长度得到该二级索引项在二级索引文件2.idx中的偏移位置,通过该偏移位置从二级索引文件2.idx中读取相应的二级索引项,再根据该二级索引项中的ChunkID、SlotOffset和DataSize字段,从文件块中将对象分块数据读取出来,判断该二级索引项中的NextSlotIndex是否为-1,若是,则表示是最后一个对象分块,转至B3执行;否则,读取NextSlotIndex字段,得到存储下一个对象分块的数据槽的二级索引项的编号,转至B2继续执行;
B3:获取到所有对象分块后,将所有对象分块按照先后顺序拼接起来,得到完整的对象数据,计算读取到的对象数据的校验和,如果该对象数据的校验和等于对应的一级索引项中的CheckSum值,则表明该对象数据完备,修改该一级索引项的LastAccessTime为当前时间,然后成功返回该对象数据;如果对象数据校验失败,则在缓存中删除该对象,并返回获取缓存对象失败应答。
6.根据权利要求3所述的一种基于磁盘的对象缓存方法,其特征在于:
从磁盘缓存中删除缓存对象具体方法如下,输入待删除的对象主键K,
C1:利用一级索引扫描一级索引文件1.idx,查询到一级索引的ObjKey字段等于对象主键K,且ValidFlag字段等于1时,则读取FirstSlotIndex字段,得到存储第一个对象分块的数据槽的二级索引项编号,转至C2执行,否则返回失败应答,
C2:将该二级索引项的编号乘以二级索引项数据长度得到该二级索引项在二级索引文件2.idx中的偏移位置,通过该偏移位置从二级索引文件2.idx中读取相应的二级索引项,将该二级索引项的UseFlag设置为0,标记删除对应的数据槽,回收再利用,判断该二级索引项中的NextSlotIndex是否为-1,若是,则表示是最后一个对象分块,转至C3执行;否则,读取NextSlotIndex字段,得到存储下一个对象分块的数据槽对应的二级索引项的编号,转至C2继续执行;
C3:将对象主键K对应的一级索引项的ValidFlag标记为0,最后返回缓存对象删除成功应答。
7.根据权利要求3所述的一种基于磁盘的对象缓存方法,其特征在于:还包括过程D:磁盘缓存中缓存的对象通过缓存失效机制来剔除过期的对象,释放磁盘空间,所述缓存失效机制包括两种:LRU(Least Recently Used,最近最少使用)机制和FIFO(First In First Out,先入先出)机制。
8.根据权利要求7所述的一种基于磁盘的对象缓存方法,其特征在于:
通过事先设置的最大缓存时间(MaxCacheTime)参数,两种缓存失效机制工作过程如下:
D1:LRU机制:定时扫描一级索引文件,对于每一个一级索引项,如果当前时间减去LastAccessTime的值超过MaxCacheTime参数值,则认为该一级索引项对应的缓存对象已经过期,则从缓存中删除该对象;
D2:FIFO机制:定时扫描一级索引文件,对于每一个一级索引项,如果当前时间减去CreateTime的值超过MaxCacheTime参数值,则认为该一级索引项对应的缓存对象已经过期,则从缓存中删除该对象。
9.根据权利要求3所述的一种基于磁盘的对象缓存方法,其特征在于:还包括过程E:缓存优化整理过程,包括以下步骤:
E1:扫描二级索引文件2.idx,得到一个二级索引项列表,该列表中二级索引项按照DataSize值从小到大排列;
E2:逐个遍历二级索引项列表中的每个二级索引项,从旧文件块中读取二级索引项中指定的旧的数据槽中的数据;
步骤E3,将旧数据槽中的数据拷贝到新文件块中,然后,修改该二级索引项中的ChunkID、SlotOffset和SlotSize字段指向新文件块的数据槽,如果旧文件块中的数据槽数据都已经搬移到新文件块中,则可以将旧文件块删除。
10.根据权利要求9所述的一种基于磁盘的对象缓存方法,其特征在于:所述步骤E3:将旧数据槽中的数据拷贝到新文件块中,具体包括如下步骤:
E31:首先根据待搬移的数据大小,计算新数据槽大小,新数据槽大小为2n KB且刚好能够容纳待搬移的数据;
E32:然后在新文件块中创建新的数据槽,然后将数据从旧数据槽中复制到新数据槽中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310710511.8A CN103678638B (zh) | 2013-12-20 | 2013-12-20 | 一种基于磁盘的对象缓存方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310710511.8A CN103678638B (zh) | 2013-12-20 | 2013-12-20 | 一种基于磁盘的对象缓存方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103678638A true CN103678638A (zh) | 2014-03-26 |
CN103678638B CN103678638B (zh) | 2018-10-19 |
Family
ID=50316183
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310710511.8A Active CN103678638B (zh) | 2013-12-20 | 2013-12-20 | 一种基于磁盘的对象缓存方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103678638B (zh) |
Cited By (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105224560A (zh) * | 2014-06-20 | 2016-01-06 | 腾讯科技(北京)有限公司 | 缓存数据的查找方法和装置 |
CN105701096A (zh) * | 2014-11-25 | 2016-06-22 | 腾讯科技(深圳)有限公司 | 索引生成方法、数据查询方法、装置及系统 |
CN107203603A (zh) * | 2017-05-15 | 2017-09-26 | 福建中金在线信息科技有限公司 | 一种信息缓存、读取方法及装置和电子设备 |
CN107577711A (zh) * | 2017-08-01 | 2018-01-12 | 北京奇艺世纪科技有限公司 | 一种图片缓存的方法和装置 |
CN107798002A (zh) * | 2016-08-30 | 2018-03-13 | 光科技股份有限公司 | 一种提高智能网荷互动终端数据存储效率及安全性的方法 |
CN108021333A (zh) * | 2016-11-03 | 2018-05-11 | 阿里巴巴集团控股有限公司 | 随机读写数据的系统、装置及方法 |
CN108628969A (zh) * | 2018-04-24 | 2018-10-09 | 咪咕文化科技有限公司 | 一种空间关键字索引方法及平台、存储介质 |
CN108776578A (zh) * | 2018-06-01 | 2018-11-09 | 南京紫光云信息科技有限公司 | 一种快速合并对象的方法和系统 |
CN109271113A (zh) * | 2018-09-28 | 2019-01-25 | 武汉烽火众智数字技术有限责任公司 | 一种基于云存储的数据管理系统及方法 |
CN109361886A (zh) * | 2018-10-24 | 2019-02-19 | 杭州叙简科技股份有限公司 | 一种基于声音检测的会议录像标注系统 |
CN109408496A (zh) * | 2018-09-18 | 2019-03-01 | 沈文策 | 一种减少数据冗余的方法及装置 |
CN109753447A (zh) * | 2019-01-14 | 2019-05-14 | 北京星际荣耀空间科技有限公司 | 一种运载火箭遥测数据实时缓存系统及方法 |
CN109901795A (zh) * | 2019-01-31 | 2019-06-18 | 武汉励行科技有限公司 | 一种循环文件系统及文件定位方法 |
CN110059065A (zh) * | 2019-04-25 | 2019-07-26 | 北京酷我科技有限公司 | 一种磁盘索引数据的方法 |
CN110262752A (zh) * | 2019-05-16 | 2019-09-20 | 罗普特科技集团股份有限公司 | 一种用于存储流媒体数据的方法、装置、存储介质 |
CN110263012A (zh) * | 2019-06-25 | 2019-09-20 | 北京奇艺世纪科技有限公司 | 一种磁盘缓存方法及系统 |
CN111209308A (zh) * | 2020-01-09 | 2020-05-29 | 中国建设银行股份有限公司 | 一种优化分布式缓存的方法和装置 |
CN112035529A (zh) * | 2020-09-11 | 2020-12-04 | 北京字跳网络技术有限公司 | 缓存方法、装置、电子设备及计算机可读存储介质 |
CN112256650A (zh) * | 2020-10-20 | 2021-01-22 | 广州市百果园网络科技有限公司 | 存储空间管理方法、装置、设备及存储介质 |
CN115905122A (zh) * | 2023-02-20 | 2023-04-04 | 成都九洲电子信息系统股份有限公司 | 一种飞行航迹数据存储及检索系统、方法及存储介质 |
CN115390752B (zh) * | 2022-08-10 | 2023-04-18 | 中科豪联(杭州)技术有限公司 | 一种多磁盘的缓存文件管理方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101853278A (zh) * | 2010-05-19 | 2010-10-06 | 苏州迈科网络安全技术有限公司 | 数据存储系统应用方法 |
CN101876996A (zh) * | 2009-12-01 | 2010-11-03 | 广州从兴电子开发有限公司 | 一种内存数据库到文件数据库的数据同步方法及系统 |
CN102521306A (zh) * | 2011-12-01 | 2012-06-27 | 苏州迈科网络安全技术股份有限公司 | 一种数据存储系统应用方法 |
CN103177027A (zh) * | 2011-12-23 | 2013-06-26 | 北京新媒传信科技有限公司 | 获取动态Feed索引的方法和系统 |
US20130282650A1 (en) * | 2012-04-18 | 2013-10-24 | Renmin University Of China | OLAP Query Processing Method Oriented to Database and HADOOP Hybrid Platform |
-
2013
- 2013-12-20 CN CN201310710511.8A patent/CN103678638B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101876996A (zh) * | 2009-12-01 | 2010-11-03 | 广州从兴电子开发有限公司 | 一种内存数据库到文件数据库的数据同步方法及系统 |
CN101853278A (zh) * | 2010-05-19 | 2010-10-06 | 苏州迈科网络安全技术有限公司 | 数据存储系统应用方法 |
CN102521306A (zh) * | 2011-12-01 | 2012-06-27 | 苏州迈科网络安全技术股份有限公司 | 一种数据存储系统应用方法 |
CN103177027A (zh) * | 2011-12-23 | 2013-06-26 | 北京新媒传信科技有限公司 | 获取动态Feed索引的方法和系统 |
US20130282650A1 (en) * | 2012-04-18 | 2013-10-24 | Renmin University Of China | OLAP Query Processing Method Oriented to Database and HADOOP Hybrid Platform |
Cited By (29)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105224560A (zh) * | 2014-06-20 | 2016-01-06 | 腾讯科技(北京)有限公司 | 缓存数据的查找方法和装置 |
CN105224560B (zh) * | 2014-06-20 | 2019-12-06 | 腾讯科技(北京)有限公司 | 缓存数据的查找方法和装置 |
CN105701096A (zh) * | 2014-11-25 | 2016-06-22 | 腾讯科技(深圳)有限公司 | 索引生成方法、数据查询方法、装置及系统 |
CN107798002A (zh) * | 2016-08-30 | 2018-03-13 | 光科技股份有限公司 | 一种提高智能网荷互动终端数据存储效率及安全性的方法 |
CN107798002B (zh) * | 2016-08-30 | 2020-04-03 | 光一科技股份有限公司 | 一种提高智能网荷互动终端数据存储效率及安全性的方法 |
CN108021333A (zh) * | 2016-11-03 | 2018-05-11 | 阿里巴巴集团控股有限公司 | 随机读写数据的系统、装置及方法 |
CN107203603A (zh) * | 2017-05-15 | 2017-09-26 | 福建中金在线信息科技有限公司 | 一种信息缓存、读取方法及装置和电子设备 |
CN107577711A (zh) * | 2017-08-01 | 2018-01-12 | 北京奇艺世纪科技有限公司 | 一种图片缓存的方法和装置 |
CN108628969A (zh) * | 2018-04-24 | 2018-10-09 | 咪咕文化科技有限公司 | 一种空间关键字索引方法及平台、存储介质 |
CN108776578A (zh) * | 2018-06-01 | 2018-11-09 | 南京紫光云信息科技有限公司 | 一种快速合并对象的方法和系统 |
CN108776578B (zh) * | 2018-06-01 | 2021-10-26 | 紫光西部数据(南京)有限公司 | 一种快速合并对象的方法和系统 |
CN109408496A (zh) * | 2018-09-18 | 2019-03-01 | 沈文策 | 一种减少数据冗余的方法及装置 |
CN109271113A (zh) * | 2018-09-28 | 2019-01-25 | 武汉烽火众智数字技术有限责任公司 | 一种基于云存储的数据管理系统及方法 |
CN109271113B (zh) * | 2018-09-28 | 2022-03-29 | 武汉烽火众智数字技术有限责任公司 | 一种基于云存储的数据管理系统及方法 |
CN109361886A (zh) * | 2018-10-24 | 2019-02-19 | 杭州叙简科技股份有限公司 | 一种基于声音检测的会议录像标注系统 |
CN109753447A (zh) * | 2019-01-14 | 2019-05-14 | 北京星际荣耀空间科技有限公司 | 一种运载火箭遥测数据实时缓存系统及方法 |
CN109901795A (zh) * | 2019-01-31 | 2019-06-18 | 武汉励行科技有限公司 | 一种循环文件系统及文件定位方法 |
CN110059065A (zh) * | 2019-04-25 | 2019-07-26 | 北京酷我科技有限公司 | 一种磁盘索引数据的方法 |
CN110262752A (zh) * | 2019-05-16 | 2019-09-20 | 罗普特科技集团股份有限公司 | 一种用于存储流媒体数据的方法、装置、存储介质 |
CN110262752B (zh) * | 2019-05-16 | 2020-08-11 | 罗普特科技集团股份有限公司 | 一种用于存储流媒体数据的方法、装置、存储介质 |
CN110263012B (zh) * | 2019-06-25 | 2022-03-22 | 北京奇艺世纪科技有限公司 | 一种磁盘缓存方法及系统 |
CN110263012A (zh) * | 2019-06-25 | 2019-09-20 | 北京奇艺世纪科技有限公司 | 一种磁盘缓存方法及系统 |
CN111209308A (zh) * | 2020-01-09 | 2020-05-29 | 中国建设银行股份有限公司 | 一种优化分布式缓存的方法和装置 |
CN111209308B (zh) * | 2020-01-09 | 2023-06-16 | 建信金融科技有限责任公司 | 一种优化分布式缓存的方法和装置 |
CN112035529A (zh) * | 2020-09-11 | 2020-12-04 | 北京字跳网络技术有限公司 | 缓存方法、装置、电子设备及计算机可读存储介质 |
CN112256650A (zh) * | 2020-10-20 | 2021-01-22 | 广州市百果园网络科技有限公司 | 存储空间管理方法、装置、设备及存储介质 |
CN112256650B (zh) * | 2020-10-20 | 2024-05-31 | 广州市百果园网络科技有限公司 | 存储空间管理方法、装置、设备及存储介质 |
CN115390752B (zh) * | 2022-08-10 | 2023-04-18 | 中科豪联(杭州)技术有限公司 | 一种多磁盘的缓存文件管理方法 |
CN115905122A (zh) * | 2023-02-20 | 2023-04-04 | 成都九洲电子信息系统股份有限公司 | 一种飞行航迹数据存储及检索系统、方法及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN103678638B (zh) | 2018-10-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103678638A (zh) | 一种基于磁盘的对象缓存方法 | |
US11036799B2 (en) | Low RAM space, high-throughput persistent key value store using secondary memory | |
US20180260318A1 (en) | Read-write control method for memory, and corresponding memory and server | |
KR100922389B1 (ko) | 플래시 메모리를 위한 색인 스킴 | |
CN105009067B (zh) | 管理对存储数据单元的操作 | |
CN103577339B (zh) | 一种数据存储方法及系统 | |
US9047330B2 (en) | Index compression in databases | |
US20120159098A1 (en) | Garbage collection and hotspots relief for a data deduplication chunk store | |
US20070276990A1 (en) | Method for preloading data to improve data-retrieval times | |
CN103218176B (zh) | 数据处理方法及装置 | |
CN101799783A (zh) | 一种数据存储处理方法、查找方法及其装置 | |
CN103246696A (zh) | 高并发数据库的访问方法及应用于多服务器系统的方法 | |
CN102591947A (zh) | 用于数据去重复的快速且低ram占用的索引 | |
US11392314B2 (en) | Sequentially writing metadata into a solid state disk by redirect-on-write | |
CN107135662B (zh) | 一种差异数据备份方法、存储系统和差异数据备份装置 | |
US20130304972A1 (en) | Control device, storage device, and storage control method | |
CN103678158A (zh) | 一种数据布局优化方法及系统 | |
CN100472526C (zh) | 一种数据存储方法、数据读取方法以及数据检索方法 | |
CN111897675B (zh) | 一种手机端f2fs文件系统的近期删除文件恢复方法 | |
KR20150126667A (ko) | 저장된 데이터 유닛들의 동작 관리 | |
CN103049388B (zh) | 一种分页存储器件的压缩管理方法及装置 | |
CN115963984A (zh) | 用于存储数据结构的方法和系统 | |
CN114741028A (zh) | 一种基于ocssd的持久键值存储方法、设备及系统 | |
CN112395260B (zh) | 一种数据存储方法及介质 | |
CN108776578B (zh) | 一种快速合并对象的方法和系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |