CN110263012B - 一种磁盘缓存方法及系统 - Google Patents
一种磁盘缓存方法及系统 Download PDFInfo
- Publication number
- CN110263012B CN110263012B CN201910554015.5A CN201910554015A CN110263012B CN 110263012 B CN110263012 B CN 110263012B CN 201910554015 A CN201910554015 A CN 201910554015A CN 110263012 B CN110263012 B CN 110263012B
- Authority
- CN
- China
- Prior art keywords
- data
- block
- file
- data file
- disk
- 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.)
- Active
Links
Images
Classifications
-
- 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
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/182—Distributed file systems
- G06F16/1834—Distributed file systems implemented based on peer-to-peer networks, e.g. gnutella
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种磁盘缓存方法及系统,通过网络获取N个数据块,并对数据块进行校验,从对多个数据文件中的块数据数据块的存储位置进行统一编号确定的块编号中,选择一个存储空间存储位置为空闲状态的块编号,基于该块编号从数据库中查找对应的数据文件,并确定块数据数据块写入查找到的数据文件中的文件偏移位置,将块数据数据块的块信息保存到数据库中。本发明可以将网络数据放置在多个数据文件中,而多数据文件的存储方式可支持多磁盘,通过将放置网络数据的不同数据文件分散到不同的磁盘中,使得在多磁盘的可用空间都较小时,仍可以实现较高的缓存量,因此可根据磁盘的可用空间情况动态自适应缓存量。
Description
技术领域
本发明涉及数据存储技术领域,更具体的说,涉及一种磁盘缓存方法及系统。
背景技术
P2P(Peer to Peer)网络,即对等网络,是一种在对等者(Peer)之间分配任务和工作负载的分布式应用架构,是对等计算模型在应用层形成的一种组网或网络形式。目前,从P2P网络获取数据块下载到本地后,会被存储到磁盘缓存中。在提供数据上传服务时,则从磁盘缓存中查找到需要上传的数据,读取查找到的数据并发送到P2P网络。
现有技术中,网络数据会被放置至一个数据文件中,由于一个数据文件只能放置在一个磁盘,因此,当数据文件的配置使用空间较大,比如,数据文件为4G文件,而磁盘的可用存储位置较少,比如只有2G时,数据文件也只能存储2G数据,而无法在另一个有2G可用空间的磁盘继续存储数据。
因此,如何提供一种磁盘缓存方法,能够根据磁盘的可用空间情况动态自适应缓存量成为了本领域技术人员亟需解决的技术问题。
发明内容
有鉴于此,本发明公开一种磁盘缓存方法及系统,以实现将网络数据放置在多个数据文件中,而多数据文件的存储方式可支持多磁盘,因此,可以将放置网络数据的不同数据文件分散到不同的磁盘中,这样,在多磁盘的可用空间都较小时,仍可以实现较高的缓存量,从而实现了根据磁盘的可用空间情况动态自适应缓存量。
一种磁盘缓存方法,应用于存储器模块,包括:
通过网络获取N个数据块,所述数据块为网络数据,且N个所述数据块的大小相同,N为正整数;
对所述数据块进行正确性校验;
当所述数据块校验正确后,从对多个数据文件中的数据块的存储位置进行统一编号确定的块编号中,选择一个存储位置为空闲状态的块编号,其中,每个所述数据文件基于所要放置的磁盘的实际可用空间大小,在所述磁盘中创建;
根据选择的所述块编号确定对应的数据文件编号;
根据所述数据文件编号,从数据库存储的数据文件信息中,查找到对应的数据文件;
根据所述块编号确定校验正确的所述数据块在查找到的所述数据文件中的文件偏移位置,并将所述数据块写入所述文件偏移位置;
将所述数据块的块信息保存到所述数据库中。
可选的,所述块编号的表达式如下:
Px∈[i*j,(i+1)*j);
式中,Px为所述块编号,i为数据文件D的编号,0<=i<n,n是缓存文件的个数,j为一个数据文件D中能够存储的数据块的数量。
可选的,所述根据选择的所述块编号确定对应的数据文件编号,具体包括:
将选择的所述块编号对任一所述数据文件能够存储的所述数据块的数量取商,得到所述数据文件编号。
可选的,所述根据所述块编号确定校验正确的所述数据块在查找到的所述数据文件中的文件偏移位置,具体包括:
将所述块编号对任一所述数据文件能够存储的所述数据块的数量取余,得到所述块编号在查找到的所述数据文件中的块位置序号;
将所述块位置序号和块单位字节数相乘,得到校验正确的所述数据块在查找到的所述数据文件中的所述文件偏移位置。
可选的,当对等网络P2P模块从所述存储器模块读取数据时,还包括:
获取所述P2P模块发送的目标视频文件ID和目标块编号;
根据所述目标视频文件ID和所述目标块编号,从所述数据库中查找到对应的块信息;
根据所述块信息中记录的目标数据块在目标数据文件中的保存位置,查找到所述目标数据文件以及所述目标数据块在所述目标数据文件中的文件偏移位置;
基于所述目标数据文件和所述文件偏移位置,读取所述目标数据块;
将读取的所述目标数据块返回到所述P2P模块。
一种磁盘缓存系统,应用于存储器模块,包括:
第一获取单元,用于通过网络获取N个数据块,所述数据块为网络数据,且N个所述数据块的大小相同,N为正整数;
校验单元,用于对所述数据块进行正确性校验;
块编号选择单元,用于当所述数据块校验正确后,从对多个数据文件中的数据块的存储位置进行统一编号确定的块编号中,选择一个存储位置为空闲状态的块编号,其中,每个所述数据文件基于所要放置的磁盘的实际可用空间大小,在所述磁盘中创建;
数据文件编号确定单元,用于根据选择的所述块编号确定对应的数据文件编号;
数据文件查找单元,用于根据所述数据文件编号,从数据库存储的数据文件信息中,查找到对应的数据文件;
文件偏移位置确定单元,用于根据所述块编号确定校验正确的所述数据块在查找到的所述数据文件中的文件偏移位置,并将所述数据块写入所述文件偏移位置;
保存单元,用于将所述数据块的块信息保存到所述数据库中。
可选的,所述块编号的表达式如下:
Px∈[i*j,(i+1)*j);
式中,Px为所述块编号,i为数据文件D的编号,0<=i<n,n是缓存文件的个数,j为一个数据文件D中能够存储的数据块的数量。
可选的,所述数据文件编号确定单元具体用于:
将选择的所述块编号对任一所述数据文件能够存储的所述数据块的数量取商,得到所述数据文件编号。
可选的,所述文件偏移位置确定单元具体用于:
将所述块编号对任一所述数据文件能够存储的所述数据块的数量取余,得到所述块编号在查找到的所述数据文件中的块位置序号;
将所述块位置序号和块单位字节数相乘,得到校验正确的所述数据块在查找到的所述数据文件中的所述文件偏移位置。
可选的,还包括:
第二获取单元,用于当对等网络P2P模块从所述存储器模块读取数据时,获取所述P2P模块发送的目标视频文件ID和目标块编号;
块信息查找单元,用于根据所述目标视频文件ID和所述目标块编号,从所述数据库中查找到对应的块信息;
文件偏移位置查找单元,用于根据所述块信息中记录的目标数据块在目标数据文件中的保存位置,查找到所述目标数据文件以及所述目标数据块在所述目标数据文件中的文件偏移位置;
目标数据块读取单元,用于基于所述目标数据文件和所述文件偏移位置,读取所述目标数据块;
返回单元,用于将读取的所述目标数据块返回到所述P2P模块。
从上述的技术方案可知,本发明公开了一种磁盘缓存方法及系统,通过网络获取N个数据块,数据块为网络数据,且N个数据块的大小相同,N为正整数,在数据块校验正确后,从预先对多个数据文件中的数据块的存储位置进行统一编号确定的块编号中,选择一个存储位置为空闲状态的块编号,基于该块编号从数据库中查找对应的数据文件,以及确定校验正确的数据块在查找到的数据文件中的文件偏移位置,并将数据块写入文件偏移位置,将数据块的块信息保存到数据库中。由此可以看出,本发明可以将网络数据放置在多个数据文件中,而多数据文件的存储方式可支持多磁盘,因此,可以将放置网络数据的不同数据文件分散到不同的磁盘中,这样,在多磁盘的可用空间都较小时,仍可以实现较高的缓存量,因此,本发明实现了根据磁盘的可用空间情况动态自适应缓存量。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据公开的附图获得其他的附图。
图1为本发明实施例公开的一种磁盘缓存方法流程图;
图2为本发明实施例公开的一种磁盘缓存系统的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例公开了一种磁盘缓存方法及系统,通过网络获取N个数据块,数据块为网络数据,且N个数据块的大小相同,N为正整数,在数据块校验正确后,从预先对多个数据文件中的数据块的存储位置进行统一编号确定的块编号中,选择一个存储位置为空闲状态的块编号,基于该块编号从数据库中查找对应的数据文件,以及确定校验正确的数据块在查找到的数据文件中的文件偏移位置,并将数据块写入文件偏移位置,将数据块的块信息保存到数据库中。由此可以看出,本发明可以将网络数据放置在多个数据文件中,而多数据文件的存储方式可支持多磁盘,因此,可以将放置网络数据的不同数据文件分散到不同的磁盘中,这样,在多磁盘的可用空间都较小时,仍可以实现较高的缓存量,因此,本发明实现了根据磁盘的可用空间情况动态自适应缓存量。
并且,当某个磁盘故障时,只会导致位于该磁盘的数据文件不可用,并不会导致全部数据丢失,相对于传统方案而言,本发明大大减小了因磁盘故障而带来的数据处理量。
进一步,由于本发明是采用多磁盘存储网络数据,因此,相对于一个磁盘存储网络数据而言,本发明提高了网络数据本地缓存的读写效率。
参见图1,本发明一实施例公开的一种磁盘缓存方法流程图,该方法应用于存储器模块,包括步骤:
步骤S101、通过网络获取N个数据块,所述数据块为网络数据,且N个所述数据块的大小相同,N为正整数;
其中,块数据的定义为:将文件从0偏移位置向后以M字节为单位大小依次分割出若干个单元,每个单元称为一个数据块。将分割得到的数据块从0开始依次编号,即为每个块的块号。如:将一个10MByte大小的文件按2MByte字节为单位分割,可得到5个数据块,块号依次为0,1,2,3和4。
步骤S102、对所述数据块进行正确性校验;
在实际应用中,可以采用CRC((Cyclic Redundancy Check,循环冗余校验)对数据块进行正确性校验,CRC是一种根据网络数据包或电脑文件等数据产生简短固定位数校验码的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除法及余数的原理来作错误侦测的。
每一个数据块均有一个对应的CRC32值,该CRC32值为一个32bit(8位十六进制数)的校验值,基于CRC32值可实现对数据块的正确性校验,具体校验过程可参见现有成熟方案,此处不再赘述。
步骤S103、当所述数据块校验正确后,从对多个数据文件中的数据块的存储位置进行统一编号确定的块编号中,选择一个存储位置为空闲状态的块编号;
其中,每个所述数据文件基于所要放置的磁盘的实际可用空间大小,在所述磁盘中创建,或者说,基于每个磁盘的实际可用空间大小,在每个所述磁盘中创建数据文件。
其中,磁盘的实际可用空间大小为:磁盘的剩余空间-磁盘的预留空间。
需要特别说明的是,在各个磁盘中创建的数据文件进行统一命名,数据文件的命名规则为:data-xxxx.bdf,其中xxxx为从0到实际缓存大小值的编号,不足四位数的左边补0。
每个数据文件的数据文件路径会被保存至数据库中的数据文件信息中,也就是说,数据库中的数据文件信息可以放置任意一个数据文件data-xxxx.bdf所在的目录。
对多个数据文件Di中的数据块的存储位置,从0开始统一进行块编号Px,则块编号Px的表达式如下:
Px∈[i*j,(i+1)*j);
式中,i为数据文件D的编号,0<=i<n,n是缓存文件的个数,j为一个数据文件D中能够存储的数据块的数量。
块编号Px的表达式表达的是对于某个文件i,其内部分割的块位置编号取值位于这个集合中,主要是标识所有文件的块位置编码是全局统一编号。
n是缓存文件个数,如果配置可以使用50G缓存空间,如果每个文件大小是j*块大小,比如1G,那么n就是50G/1G=50,即会产生出50个文件(从0开始编号)用于存储数据。
具体的,本实施例中,存储器模块由若干个数据文件Di和用于数据索引的数据库DB组成,i为数据文件D的编号,0<=i<n,假设每个数据文件Di的大小为1GB。由于存储器模块中的存储单元为2MB的数据块,因此,大小为1GB的数据文件可以存储1024MB/2MB=512个数据块,也即,上述公式中的j=512。
对多个数据文件Di中的数据块的存储位置,从0开始统一进行块编号Px,则块编号Px的表达式如下:
Px∈[i*512,(i+1)*512);
其中,i为数据文件D的编号,0<=i<n,n是缓存文件的个数。
步骤S104、根据选择的所述块编号确定对应的数据文件编号;
具体的,在实际应用中,可以将所选择的块编号对一个数据文件能够存储的数据块的数量取商,得到数据文件编号,当每个数据文件的大小为1GB,每个数据块的大小为2MB时,公式如下:
D_N=POS_FREE/512;
式中,D_N为数据文件编号,POS_FREE为块编号,512为大小为1GB的数据文件能够存储大小为2MB的数据块的数量。
步骤S105、根据所述数据文件编号,从数据库存储的数据文件信息中,查找到对应的数据文件;
需要说明的是,本实施例中,数据库DB用于数据索引,数据库DB中存储有视频文件信息(FILE_INFO)、块信息(BLOCK_INFO)和数据文件信息(D_INFO)。
其中,视频文件信息(FILE_INFO)也即P2P网络所传输的视频文件的文件信息,视频文件信息(FILE_INFO)主要包括:
F_FID:视频文件ID,也即数据文件在P2P网络中的标识ID;
F_SZ:视频文件大小;
F_CT:视频文件的生成时间;
F_AT:视频文件的最后访问时间;
F_DT:视频文件的删除时间,具体指的是视频文件在未来被删除的时间。
块信息(BLOCK_INFO)主要包括:
B_FID:视频文件ID,同文件信息中的F_FID;
B_BN:块编号,从0开始编号;
B_SZ:数据块的字节大小;
B_POS:数据块在数据文件中的保存位置;
B_CRC:数据块的CRC32值。
数据文件信息(D_INFO)主要包括:
D_N:数据文件编号;
D_P:数据文件路径;
D_S:数据文件大小。
步骤S106、根据所述块编号确定校验正确的所述数据块在查找到的所述数据文件中的文件偏移位置,并将所述数据块写入所述文件偏移位置;
具体的,步骤S103中选择的存储位置为空闲状态的块编号为:在所有数据文件的所有块编号中的编号。
通过将该块编号对一个数据文件能够存储的所述数据块的数量取余,得到块编号在查找到的数据文件中的块位置序号,将该块位置序号和块单位字节数相乘,得到校验正确的数据块在查找到的数据文件中的文件偏移位置。
假设,每个数据文件的大小为为1GB。由于存储器模块中的存储单元为2MB的数据块,因此,大小为1GB的数据文件可以存储1024MB/2MB=512个数据块。因此,通过将块编号对512取余,得到块编号在查找到的数据文件中的块位置序号Mx,块位置序号Mx只是一个位置编号,并非是真实的数据文件偏移,由于位置编号是按照2MB数据块大小进行分配的,位置编号0和位置编号1之间间隔2*1024*1024字节,因此,如果要操作一个实际的文件偏移,需要将块位置序号Mx*2*1024*1024,从而得到校验正确的数据块在查找到的数据文件中的文件偏移位置。
步骤S107、将所述数据块的块信息保存到所述数据库中。
其中,数据块的块信息包括:文件ID、块编号、数据块的字节大小、数据块在数据文件中的保存位置和数据块的CRC32值。
综上可知,本发明公开了一种磁盘缓存方法,在通过网络获取N个数据块,数据块为网络数据,且N个数据块的大小相同,N为正整数,在数据块校验正确后,从预先对多个数据文件中的数据块的存储位置进行统一编号确定的块编号中,选择一个存储位置为空闲状态的块编号,基于该块编号从数据库中查找对应的数据文件,以及确定校验正确的数据块在查找到的数据文件中的文件偏移位置,并将数据块写入文件偏移位置,将数据块的块信息保存到数据库中。由此可以看出,本发明可以将网络数据放置在多个数据文件中,而多数据文件的存储方式可支持多磁盘,因此,可以将放置网络数据的不同数据文件分散到不同的磁盘中,这样,在多磁盘的可用空间都较小时,仍可以实现较高的缓存量,因此,本发明实现了根据磁盘的可用空间情况动态自适应缓存量。
并且,当某个磁盘故障时,只会导致位于该磁盘的数据文件不可用,并不会导致全部数据丢失,相对于传统方案而言,本发明大大减小了因磁盘故障而带来的数据处理量。
进一步,由于本发明是采用多磁盘存储网络数据,因此,相对于一个磁盘存储网络数据而言,本发明提高了网络数据本地缓存的读写效率。
上述实施例中,在从所有的数据文件中块编号中,没有查找到存储位置为空闲状态的块编号时,磁盘缓存方法还可以包括步骤:
按照先进先出策略选择所述块编号。
具体的,在查找存储位置为空闲状态的块编号时,如果当前缓存已满,没有存储位置为空闲状态的块编号,则按照FIFO(First Input First Output,先进先出)策略选择一个不再需要的块位置,并将该块位置对应的编号作为选择的块编号。在执行完步骤S106之后,更新该块位置对应的块信息。
上述实施例中,当P2P(Peer to Peer,对等网络)模块需要从存储器模块读取数据时,磁盘缓存方法还可以包括步骤:
获取所述P2P模块发送的目标视频文件ID和目标块编号;
根据所述目标视频文件ID和所述目标块编号,从所述数据库中查找到对应的块信息;
根据所述块信息中记录的目标数据块在目标数据文件中的保存位置,查找到所述目标数据文件以及所述目标数据块在所述目标数据文件中的文件偏移位置;
基于所述目标数据文件和所述文件偏移位置,读取所述目标数据块;
将读取的所述目标数据块返回到所述P2P模块。
综上可知,本发明公开的磁盘缓存方法,当P2P模块需要从存储器模块读取数据时,P2P模块会向存储器模块发送目标视频文件ID和目标块编号,存储器模块基于目标视频文件ID和目标块编号查找对应的块信息,基于块信息中记录的目标数据块在目标数据文件中的保存位置,查找到目标数据文件以及目标数据块在目标数据文件中的文件偏移位置,从而基于目标数据文件和文件偏移位置,读取目标数据块并返回给P2P模块。由于本发明将网络数据放置在多个数据文件中,而多个数据文件的存储方式可支持多磁盘,因此,可以将放置网络数据的不同数据文件分散到不同的磁盘中,这样,在多磁盘的可用空间都较小时,仍可以实现较高的缓存量,并且,在从存储器模块读取数据时,本发明可以基于目标数据文件以及目标数据块在目标数据文件中的文件偏移位置,查找到目标数据块,因此,本发明实现了根据磁盘的可用空间情况动态自适应缓存量。
需要特别说明的是,本发明提供的磁盘缓存方法在实现异步多线程时,对于读写操作,根据文件ID和块编号,确定数据块在数据文件中的保存位置,以及对应的数据文件编号后,磁盘会根据D_N对THREAD_NUM取余数,哈希到若干个线程I/O队列中,每个线程处理器对应数据文件编号D_N的数据文件的读写,其中,THREAD_NUM指的是线程数,为固定值,编写代码时指定,可以根据设备配置高低进行调整,数据文件编号为D_N的哈希分配为:D_N对THREAD_NUM取余数,如此可以将不同的数据文件分配到不同的线程进行处理。
上述实施例中,当存储器模块初始化时,磁盘缓存方法还可以包括:
若磁盘的可用空间小于空间阈值时,对各个数据文件按照数据文件编号由大到小的顺序,释放数据文件中缓存数据占用的空间,以保证磁盘剩余空间始终保持在一定比例,该比例可通过配置控制。
若磁盘的可用空间大于空间阈值时,继续在磁盘分配新的数据文件,并分配对应的空闲位置,以在放置数据块时使用,如此实现缓存空间的自动扩展。
需要说明的是,在存储器模块初始化时才执行上述操作的原因为:初始化主要是检测磁盘空间、配置信息等,按需准备后续代码执行需要的条件,在运行期间,代码执行需要的条件就不再变动。
综上可知,本发明通过在磁盘的可用空间小于空间阈值时,自动释放数据文件中缓存数据占用的空间,在磁盘的可用空间大于空间阈值时,自动扩展缓存空间,增加缓存占用量,从而实现了根据磁盘的可用空间情况动态自适应缓存量。
上述实施例中,当某磁盘故障时,只会导致位于出现故障的磁盘的数据文件不可用,此时该磁盘上存放的数据文件中存储的所有的数据块对应的块信息将会被擦除,同时修改数据文件信息中对应的信息。待故障磁盘恢复正常后,再重新在恢复正常的磁盘上建立数据文件,并将该数据文件对应的所有的数据块在数据文件中的保存位置,添加到未使用的位置列表中,位置列表中存储有所有与未使用的位置编号,该位置编号也即块编号在数据文件中的块位置序号,以供下次保存数据块时使用。
需要特别说明的是,上述所述的擦除块信息实际为:释放数据块在数据文件中的保存位置,不需要执行真正的数据擦除操作。当数据块在数据文件中的保存位置被释放后,对应位置存放的数据也就无法再被索引找到,即为无效,从而使得该位置可以重新缓存其他数据块。
综上可知,当某磁盘故障时,本发明只会导致位于出现故障的磁盘的数据文件不可用,并且可在磁盘出现故障时,释放故障磁盘中数据块在数据文件中的保存位置,待故障磁盘恢复正常后,再重新在恢复正常的磁盘上建立数据文件。因此,本发明公开的磁盘缓存方法具有很高的容错性。
与上述方法实施例相对应,本发明还公开了一种磁盘缓存系统。
参见图2,本发明一实施例公开的一种磁盘缓存系统的结构示意图,该系统应用于存储器模块,该系统包括:
第一获取单元201,用于通过网络获取N个数据块,数据块为网络数据,且N个数据块的大小相同,N为正整数;
在实际应用中,当网络数据在P2P网络上存储时,网络数据会被P2P网络分割成数据片,P2P模块会将这些数据片下载至存储器模块,使存储器模块获取到网络数据被分割后得到的数据片。
校验单元202,用于将当前获取的连续多个所述数据片拼装成一个完整的数据块,并对所述数据块进行正确性校验;
通常网络数据会被分割成若干个数据片,每连续的多个数据片会被拼装成一个完整的数据块,因此,网络数据的若干个数据片会被存储器模块拼装成多个完整的数据块。
在实际应用中,可以采用CRC((Cyclic Redundancy Check,循环冗余校验)对数据块进行正确性校验,CRC是一种根据网络数据包或电脑文件等数据产生简短固定位数校验码的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除法及余数的原理来作错误侦测的。
每一个数据块均有一个对应的CRC32值,该CRC32值为一个32bit(8位十六进制数)的校验值,基于CRC32值可实现对数据块的正确性校验,具体校验过程可参见现有成熟方案,此处不再赘述。
块编号选择单元203,用于当所述数据块校验正确后,从对多个数据文件中的数据块的存储位置进行统一编号确定的块编号中,选择一个存储位置为空闲状态的块编号,每个所述数据文件基于所要放置的磁盘的实际可用空间大小,在所述磁盘中创建;
其中,每个所述数据文件基于所要放置的磁盘的实际可用空间大小,在所述磁盘中创建,或者说,基于每个磁盘的实际可用空间大小,在每个所述磁盘中创建数据文件。
其中,磁盘的实际可用空间大小为:磁盘的剩余空间-磁盘的预留空间。
需要特别说明的是,在各个磁盘中创建的数据文件进行统一命名,命名规则为:data-xxxx.bdf,其中xxxx为从0到实际缓存大小值的编号,不足四位数的左边补0。
每个数据文件的数据文件路径会被保存至数据库中的数据文件信息中,也就是说,数据库中的数据文件信息可以放置任意一个数据文件data-xxxx.bdf所在的目录。
对多个数据文件Di中的数据块的存储位置,从0开始统一进行块编号Px,则块编号Px的表达式如下:
Px∈[i*j,(i+1)*j);
式中,i为数据文件D的编号,0<=i<n,n是缓存文件的个数,j为一个数据文件D中能够存储的数据块的数量。
具体的,本实施例中,存储器模块由若干个数据文件Di和用于数据索引的数据库DB组成,i为数据文件D的编号,0<=i<n,假设每个数据文件Di的大小为1GB。由于存储器模块中的存储单元为2MB的数据块,因此,大小为1GB的数据文件可以存储1024MB/2MB=512个数据块,也即,上述公式中的j=512。
对多个数据文件Di中的数据块的存储位置,从0开始统一进行块编号Px,则块编号Px的表达式如下:
Px∈[i*512,(i+1)*512);
其中,i为数据文件D的编号,0<=i<n,n是缓存文件的个数。
数据文件编号确定单元204,用于根据选择的所述块编号确定对应的数据文件编号;
具体的,数据文件编号确定单元204将选择的所述块编号对任一所述数据文件能够存储的所述数据块的数量取商,得到所述数据文件编号。
数据文件查找单元205,用于根据所述数据文件编号,从数据库存储的数据文件信息中,查找到对应的数据文件;
需要说明的是,本实施例中,数据库DB用于数据索引,数据库DB中存储有视频文件信息(FILE_INFO)、块信息(BLOCK_INFO)和数据文件信息(D_INFO)。
其中,视频文件信息(FILE_INFO)也即P2P网络所传输的视频文件的文件信息,视频文件信息(FILE_INFO)主要包括:
F_FID:视频文件ID,也即数据文件在P2P网络中的标识ID;
F_SZ:视频文件大小;
F_CT:视频文件的生成时间;
F_AT:视频文件的最后访问时间;
F_DT:视频文件的删除时间,具体指的是视频文件在未来被删除的时间。
块信息(BLOCK_INFO)主要包括:
B_FID:视频文件ID,同文件信息中的F_FID;
B_BN:块编号,从0开始编号;
B_SZ:数据块的字节大小;
B_POS:数据块在数据文件中的保存位置;
B_CRC:数据块的CRC32值。
数据文件信息(D_INFO)主要包括:
D_N:数据文件编号;
D_P:数据文件路径;
D_S:数据文件大小。
文件偏移位置确定单元206,用于根据所述块编号确定校验正确的所述数据块在查找到的所述数据文件中的文件偏移位置,并将所述数据块写入所述文件偏移位置;
具体的,文件偏移位置确定单元206将所述块编号对任一所述数据文件能够存储的所述数据块的数量取余,得到所述块编号在查找到的所述数据文件中的块位置序号;
将所述块位置序号和块单位字节数相乘,得到校验正确的所述数据块在查找到的所述数据文件中的所述文件偏移位置。
保存单元207,用于将所述数据块的块信息保存到所述数据库中。
其中,数据块的块信息包括:文件ID、块编号、数据块的字节大小、数据块在数据文件中的保存位置和数据块的CRC32值。
综上可知,本发明公开了一种磁盘缓存方法,通过网络获取N个数据块,数据块为网络数据,且N个数据块的大小相同,N为正整数,在数据块校验正确后,从预先对多个数据文件中的数据块的存储位置进行统一编号确定的块编号中,选择一个存储位置为空闲状态的块编号,基于该块编号从数据库中查找对应的数据文件,以及确定校验正确的数据块在查找到的数据文件中的文件偏移位置,并将数据块写入文件偏移位置,将数据块的块信息保存到数据库中。由此可以看出,本发明可以将网络数据放置在多个数据文件中,而多数据文件的存储方式可支持多磁盘,因此,可以将放置网络数据的不同数据文件分散到不同的磁盘中,这样,在多磁盘的可用空间都较小时,仍可以实现较高的缓存量,因此,本发明实现了根据磁盘的可用空间情况动态自适应缓存量。
并且,当某个磁盘故障时,只会导致位于该磁盘的数据文件不可用,并不会导致全部数据丢失,相对于传统方案而言,本发明大大减小了因磁盘故障而带来的数据处理量。
进一步,由于本发明是采用多磁盘存储网络数据,因此,相对于一个磁盘存储网络数据而言,本发明提高了网络数据本地缓存的读写效率。
上述实施例中,当P2P(Peer to Peer,对等网络)模块需要从存储器模块读取数据时,磁盘缓存系统还可以包括:
第二获取单元,用于当对等网络P2P模块从所述存储器模块读取数据时,获取所述P2P模块发送的目标视频文件ID和目标块编号;
块信息查找单元,用于根据所述目标视频文件ID和所述目标块编号,从所述数据库中查找到对应的块信息;
文件偏移位置查找单元,用于根据所述块信息中记录的目标数据块在目标数据文件中的保存位置,查找到所述目标数据文件以及所述目标数据块在所述目标数据文件中的文件偏移位置;
目标数据块读取单元,用于基于所述目标数据文件和所述文件偏移位置,读取所述目标数据块;
返回单元,用于将读取的所述目标数据块返回到所述P2P模块。
综上可知,本发明公开的磁盘缓存系统,当P2P模块需要从存储器模块读取数据时,P2P模块会向存储器模块发送目标视频文件ID和目标块编号,存储器模块基于目标视频文件ID和目标块编号查找对应的块信息,基于块信息中记录的目标数据块在目标数据文件中的保存位置,查找到目标数据文件以及目标数据块在目标数据文件中的文件偏移位置,从而基于目标数据文件和文件偏移位置,读取目标数据块并返回给P2P模块。由于本发明将网络数据放置在多个数据文件中,而多个数据文件的存储方式可支持多磁盘,因此,可以将放置网络数据的不同数据文件分散到不同的磁盘中,这样,在多磁盘的可用空间都较小时,仍可以实现较高的缓存量,并且,在从存储器模块读取数据时,本发明可以基于目标数据文件以及目标数据块在目标数据文件中的文件偏移位置,查找到目标数据块,因此,本发明实现了根据磁盘的可用空间情况动态自适应缓存量。
需要特别说明的是,本发明提供的磁盘缓存系统在实现异步多线程时,对于读写操作,根据文件ID和块编号,确定数据块在数据文件中的保存位置,以及对应的数据文件编号后,磁盘会根据D_N对THREAD_NUM取余数,哈希到若干个线程I/O队列中,每个线程处理器对应数据文件编号D_N的数据文件的读写,其中,THREAD_NUM指的是线程数,为固定值,编写代码时指定,可以根据设备配置高低进行调整,数据文件编号为D_N的哈希分配为:D_N对THREAD_NUM取余数,如此可以将不同的数据文件分配到不同的线程进行处理。
上述实施例中,当存储器模块初始化时,磁盘缓存系统还可以包括:
释放单元,用于若磁盘的可用空间小于空间阈值时,对各个数据文件按照数据文件编号由大到小的顺序,释放数据文件中缓存数据占用的空间,以保证磁盘剩余空间始终保持在一定比例,该比例可通过配置控制。
分配单元,用于若磁盘的可用空间大于空间阈值时,继续在磁盘分配新的数据文件,并分配对应的空闲位置,以在放置数据块时使用,如此实现缓存空间的自动扩展。
综上可知,本发明通过在磁盘的可用空间小于空间阈值时,自动释放数据文件中缓存数据占用的空间,在磁盘的可用空间大于空间阈值时,自动扩展缓存空间,增加缓存占用量,从而实现了根据磁盘的可用空间情况动态自适应缓存量。
上述实施例中,当某磁盘故障时,只会导致位于出现故障的磁盘的数据文件不可用,此时该磁盘上存放的数据文件中存储的所有的数据块对应的块信息将会被擦除,同时修改数据文件信息中对应的信息。待故障磁盘恢复正常后,再重新在恢复正常的磁盘上建立数据文件,并将该数据文件对应的所有的数据块在数据文件中的保存位置,添加到未使用的位置列表中,位置列表中存储有所有与未使用的位置编号,该位置编号也即块编号在数据文件中的块位置序号,以供下次保存数据块时使用。
需要特别说明的是,上述所述的擦除块信息实际为:释放数据块在数据文件中的保存位置,不需要执行真正的数据擦除操作。当数据块在数据文件中的保存位置被释放后,对应位置存放的数据也就无法再被索引找到,即为无效,从而使得该位置可以重新缓存其他数据块。
综上可知,当某磁盘故障时,本发明只会导致位于出现故障的磁盘的数据文件不可用,并且可在磁盘出现故障时,释放故障磁盘中数据块在数据文件中的保存位置,待故障磁盘恢复正常后,再重新在恢复正常的磁盘上建立数据文件。因此,本发明公开的磁盘缓存方法具有很高的容错性。
需要说明的是,系统实施例中各组成部分的具体工作原理,请参见方法实施例对应部分,此处不再赘述。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种磁盘缓存方法,其特征在于,应用于存储器模块,包括:
通过网络获取N个数据块,所述数据块为网络数据,且N个所述数据块的大小相同,N为正整数;
对所述数据块进行正确性校验;
当所述数据块校验正确后,从对多个数据文件中的数据块的存储位置进行统一编号确定的块编号中,选择一个存储位置为空闲状态的块编号,其中,每个所述数据文件基于所要放置的磁盘的实际可用空间大小,在所述磁盘中创建;
根据选择的所述块编号确定对应的数据文件编号;
根据所述数据文件编号,从数据库存储的数据文件信息中,查找到对应的数据文件;
根据所述块编号确定校验正确的所述数据块在查找到的所述数据文件中的文件偏移位置,并将所述数据块写入所述文件偏移位置;
将所述数据块的块信息保存到所述数据库中;
当对等网络P2P模块从所述存储器模块读取数据时,基于目标数据文件以及目标数据块在所述目标数据文件中的文件偏移位置,读取所述目标数据块;
将读取的所述目标数据块返回到所述P2P模块;
其中,当磁盘故障时,将故障磁盘上存放的数据文件中存储的所有数据块对应的块信息擦除,同时修改数据文件信息中对应的信息;在故障磁盘恢复正常后,重新在恢复正常的磁盘上建立数据文件,并将该数据文件对应的所有数据块在数据文件中的保存位置,添加到未使用的位置列表中。
2.根据权利要求1所述的磁盘缓存方法,其特征在于,所述块编号的表达式如下:
Px∈[i*j,(i+1)*j);
式中,Px为所述块编号,i为数据文件D的编号,0<=i<n,n是缓存文件的个数,j为一个数据文件D中能够存储的数据块的数量。
3.根据权利要求1所述的磁盘缓存方法,其特征在于,所述根据选择的所述块编号确定对应的数据文件编号,具体包括:
将选择的所述块编号对任一所述数据文件能够存储的所述数据块的数量取商,得到所述数据文件编号。
4.根据权利要求1所述的磁盘缓存方法,其特征在于,所述根据所述块编号确定校验正确的所述数据块在查找到的所述数据文件中的文件偏移位置,具体包括:
将所述块编号对任一所述数据文件能够存储的所述数据块的数量取余,得到所述块编号在查找到的所述数据文件中的块位置序号;
将所述块位置序号和块单位字节数相乘,得到校验正确的所述数据块在查找到的所述数据文件中的所述文件偏移位置。
5.根据权利要求1所述的磁盘缓存方法,其特征在于,当对等网络P2P模块从所述存储器模块读取数据时,在所述基于目标数据文件以及目标数据块在所述目标数据文件中的文件偏移位置,读取所述目标数据块之前,还包括:
获取所述P2P模块发送的目标视频文件ID和目标块编号;
根据所述目标视频文件ID和所述目标块编号,从所述数据库中查找到对应的块信息;
根据所述块信息中记录的所述目标数据块在所述目标数据文件中的保存位置,查找到所述目标数据文件以及所述目标数据块在所述目标数据文件中的所述文件偏移位置。
6.一种磁盘缓存系统,其特征在于,应用于存储器模块,包括:
第一获取单元,用于通过网络获取N个数据块,所述数据块为网络数据,且N个所述数据块的大小相同,N为正整数;
校验单元,用于对所述数据块进行正确性校验;
块编号选择单元,用于当所述数据块校验正确后,从对多个数据文件中的数据块的存储位置进行统一编号确定的块编号中,选择一个存储位置为空闲状态的块编号,其中,每个所述数据文件基于所要放置的磁盘的实际可用空间大小,在所述磁盘中创建;
数据文件编号确定单元,用于根据选择的所述块编号确定对应的数据文件编号;
数据文件查找单元,用于根据所述数据文件编号,从数据库存储的数据文件信息中,查找到对应的数据文件;
文件偏移位置确定单元,用于根据所述块编号确定校验正确的所述数据块在查找到的所述数据文件中的文件偏移位置,并将所述数据块写入所述文件偏移位置;
保存单元,用于将所述数据块的块信息保存到所述数据库中;
目标数据块读取单元,用于当对等网络P2P模块从所述存储器模块读取数据时,基于目标数据文件以及目标数据块在所述目标数据文件中的文件偏移位置,读取所述目标数据块;
返回单元,用于将读取的所述目标数据块返回到所述P2P模块;
其中,当磁盘故障时,将故障磁盘上存放的数据文件中存储的所有数据块对应的块信息擦除,同时修改数据文件信息中对应的信息;在故障磁盘恢复正常后,重新在恢复正常的磁盘上建立数据文件,并将该数据文件对应的所有数据块在数据文件中的保存位置,添加到未使用的位置列表中。
7.根据权利要求6所述的磁盘缓存系统,其特征在于,所述块编号的表达式如下:
Px∈[i*j,(i+1)*j);
式中,Px为所述块编号,i为数据文件D的编号,0<=i<n,n是缓存文件的个数,j为一个数据文件D中能够存储的数据块的数量。
8.根据权利要求6所述的磁盘缓存系统,其特征在于,所述数据文件编号确定单元具体用于:
将选择的所述块编号对任一所述数据文件能够存储的所述数据块的数量取商,得到所述数据文件编号。
9.根据权利要求6所述的磁盘缓存系统,其特征在于,所述文件偏移位置确定单元具体用于:
将所述块编号对任一所述数据文件能够存储的所述数据块的数量取余,得到所述块编号在查找到的所述数据文件中的块位置序号;
将所述块位置序号和块单位字节数相乘,得到校验正确的所述数据块在查找到的所述数据文件中的所述文件偏移位置。
10.根据权利要求6所述的磁盘缓存系统,其特征在于,在所述目标数据块读取单元基于目标数据文件以及目标数据块在所述目标数据文件中的文件偏移位置,读取所述目标数据块之前还包括:
第二获取单元,用于当对等网络P2P模块从所述存储器模块读取数据时,获取所述P2P模块发送的目标视频文件ID和目标块编号;
块信息查找单元,用于根据所述目标视频文件ID和所述目标块编号,从所述数据库中查找到对应的块信息;
文件偏移位置查找单元,用于根据所述块信息中记录的所述目标数据块在所述目标数据文件中的保存位置,查找到所述目标数据文件以及所述目标数据块在所述目标数据文件中的所述文件偏移位置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910554015.5A CN110263012B (zh) | 2019-06-25 | 2019-06-25 | 一种磁盘缓存方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910554015.5A CN110263012B (zh) | 2019-06-25 | 2019-06-25 | 一种磁盘缓存方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110263012A CN110263012A (zh) | 2019-09-20 |
CN110263012B true CN110263012B (zh) | 2022-03-22 |
Family
ID=67921254
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910554015.5A Active CN110263012B (zh) | 2019-06-25 | 2019-06-25 | 一种磁盘缓存方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110263012B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112667592B (zh) * | 2020-12-24 | 2024-05-07 | 平安科技(深圳)有限公司 | 数据存储方法、装置、计算机设备和存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1878301A (zh) * | 2006-07-19 | 2006-12-13 | 杭州华为三康技术有限公司 | 一种视频监控数据存储管理方法及系统 |
CN103678638A (zh) * | 2013-12-20 | 2014-03-26 | 厦门雅迅网络股份有限公司 | 一种基于磁盘的对象缓存方法 |
CN107590019A (zh) * | 2016-07-07 | 2018-01-16 | 北京金山云网络技术有限公司 | 一种数据存储的方法和装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9223791B2 (en) * | 2013-07-02 | 2015-12-29 | Red Hat, Inc. | System and method for reading file blocks |
-
2019
- 2019-06-25 CN CN201910554015.5A patent/CN110263012B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1878301A (zh) * | 2006-07-19 | 2006-12-13 | 杭州华为三康技术有限公司 | 一种视频监控数据存储管理方法及系统 |
CN103678638A (zh) * | 2013-12-20 | 2014-03-26 | 厦门雅迅网络股份有限公司 | 一种基于磁盘的对象缓存方法 |
CN107590019A (zh) * | 2016-07-07 | 2018-01-16 | 北京金山云网络技术有限公司 | 一种数据存储的方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN110263012A (zh) | 2019-09-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7882304B2 (en) | System and method for efficient updates of sequential block storage | |
US20220137849A1 (en) | Fragment Management Method and Fragment Management Apparatus | |
CN107168657B (zh) | 一种基于分布式块存储的虚拟磁盘分层缓存设计方法 | |
CN114860163B (zh) | 一种存储系统、内存管理方法和管理节点 | |
JP2005276192A (ja) | データ記憶容量を増大させるための方法及び装置 | |
US6901478B2 (en) | Raid system and mapping method thereof | |
US20120030265A1 (en) | Fileset Masks to Cluster Inodes for Efficient Fileset Management | |
US8219749B2 (en) | System and method for efficient updates of sequential block storage | |
KR101077904B1 (ko) | 페이지 단위 매핑 기법을 이용한 플래시 메모리 관리 장치 및 방법 | |
JP2015512604A (ja) | 暗号ハッシュ・データベース | |
US9307024B2 (en) | Efficient storage of small random changes to data on disk | |
CN108021717B (zh) | 一种轻量级嵌入式文件系统的实现方法 | |
CN109407985B (zh) | 一种数据管理的方法以及相关装置 | |
CN112463753A (zh) | 一种区块链数据存储方法、系统、设备及可读存储介质 | |
CN109558456A (zh) | 一种文件迁移方法、装置、设备及可读存储介质 | |
US8239427B2 (en) | Disk layout method for object-based storage devices | |
CN110263012B (zh) | 一种磁盘缓存方法及系统 | |
CN106095331B (zh) | 一种固定大文件内部资源的控制方法 | |
CN111435286B (zh) | 一种数据存储方法、装置和系统 | |
CN113377292B (zh) | 一种单机存储引擎 | |
CN113467753B (zh) | 一种分布式不重复随机序列生成方法和系统 | |
CN116974458A (zh) | 用于处理数据的方法、电子设备和计算机程序产品 | |
CN108958660B (zh) | 分布式存储系统及其数据处理方法和装置 | |
CN115964002A (zh) | 一种电能表终端档案管理方法、装置、设备及介质 | |
CN115756955A (zh) | 一种数据备份、数据恢复的方法、装置及计算机设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |