具体实施方式
本发明实施例提供了一种写操作方法及装置,用于提高系统的IO性能。
请参阅图1,为本发明实施例一种写操作方法的一个实施例,包括:
101、拦截写操作请求;
在现有的流媒体系统中,一般包括应用系统、文件系统及存储系统,存储系统大多采用大容量的独立磁盘冗余阵列(RAID,Redundant Array ofIndependent Disk)存储数据,可以有效利用磁盘的IO带宽,提高系统的总体IO性能。需要说明的是,本发明实施例的方法工作在应用系统和文件系统之间。
系统将拦截写操作请求,写操作请求中包含需要写入的文件数据,文件数据的大小,文件数据所属目标文件的类型及名称,及文件数据在目标文件中的当前写文件位置。
102、将写操作请求中包含的文件数据进行分片,其中分片的大小与文件系统中预置的片段文件的存储大小相同,且片段文件的存储大小为预置的RAID条带存储大小的整数倍;
系统拦截写操作请求之后,将写操作请求中包含的文件数据进行分片,其中,文件系统中的片段文件用于对存储资源进行管理,存储资源可以包括RAID条带,片段文件包含一个或多个RAID条带,片段文件的存储大小为预置的RAID条带存储空间大小的整数倍,称为片段文件与RAID条带对齐。在现有的存储系统中,RAID条带是指将RAID的存储空间划分为大小相等的存储块。
例如,若拦截到的写文件操作请求中文件数据大小为240MB,系统中的片段文件的存储空间为80MB,包含8个RAID条带,每个RAID条带的存储空间为10MB,则可将写操作请求中包含的240MB的文件数据分成3片,每片的大小均为80MB。
需要说明的是,当文件数据的大小不是片段文件存储大小的整数倍时,仍然将文件数据按片段文件的存储大小进行分片,最后剩余的小于片段文件存储空间的文件数据也称为一片,例如,当文件数据大小为220MB,片段文件的存储空间为80MB,则将文件数据分成3片,其中前2片的数据大小为80MB,第三片的数据大小为60MB。
103、根据写操作请求中包含的文件数据所属的目标文件的类型及名称获取文件数据将要写入的片段文件;
在对文件数据进行分片后,根据写操作请求中包含的文件数据所属的目标文件的类型及名称获取目标文件,并从目标文件对应的片段文件中获取文件数据将要写入的片段文件。
104、将分片之后的文件数据写入所获取的片段文件对应的RAID条带中;
系统获取到文件数据将要写入的片段文件之后,将分片之后的片段文件写入所获取的片段文件的RAID条带中。
由于文件数据的按文件系统中的片段文件的存储大小进行分片,使得数据大小与片段文件存储大小相同的分片文件可以写满一个片段文件,即一个片段文件中包含的RAID条带都将写满数据。需要说明的是,当一个分片文件的数据大小小于片段文件存储大小时,该分片文件仍将写入对应的片段文件中,且当数据写入操作在该片段文件的某个RAID条带写满之后结束,则完成了写文件操作,当数据写入操作没有写满该片段文件的某个RAID条带就结束,则系统将采用补零的方式将未写满的RAID条带写满,保证已经写入数据的RAID条带都已经写满。例如,文件数据大小为225MB,片段文件为80MB,且片段文件包含8个存储空间为10MB的RAID条带,文件数据被分为3个分片文件,前两片的大小为80MB,第三片的大小为65MB,则分片文件将顺序写入3个片段文件中,其中第3个片段文件中只写入65MB的数据,在该片段文件的第7个RAID条带结束数据写入,且该条带未写满,则系统将采用补零的方式将第7个RAID条带写满。
在本发明实施例中,通过将写操作中的文件数据进行分片,且分片的大小与文件系统中的按RAID条带容量整数倍创建的片段文件大小相同,使得数据在写入片段文件时能够写满片段文件中的RAID条带,系统在写入数据时需要在一个空的raid条带中写入,不需要将已有的数据读出,不会产生写惩罚,提高了系统的IO性能。
为了更好的理解技术,请参阅图2为本发明实施例一种写操作方法的另一实施例,包括:
201、拦截写操作请求;
系统将拦截应用系统的写操作请求,写操作请求中包含需要写入的文件数据,文件数据的大小,文件数据所属目标文件的类型及名称,及文件数据在目标文件中的当前写文件位置。
202、将写操作请求中包含的文件数据进行分片,其中分片的大小与文件系统中预置的片段文件的存储大小相同,片段文件的存储大小为RAID条带预置存储大小的整数倍;
步骤202与图1所示实施例中的步骤102描述的内容相同,此处不再赘述。
203、判断写操作请求中包含的文件数据所属的目标文件是否存在,若存在,则执行步骤205,若不存在,则执行步骤204;
系统拦截的写操作请求中包含文件数据所属的目标文件的类型及名称,系统将根据该目标文件的类型及名称获取文件数据将要写入的片段文件,但由于该片段文件存储在文件数据所属的目标文件对应的目标文件目录中,则系统先将获取文件数据所属的目标文件,再在目标文件对应的片段文件目录中获取文件数据将写入的片段文件,因此,本发明实施例中,系统将判断写操作请求中的文件数据所属的目标文件是否存在。
204、创建目标文件及目标文件对应的片段文件目录;
当写操作请求中包含的文件数据所属的目标文件不存在时,系统将根据目标文件的类型创建目标文件及目标文件对应的片段文件目录,创建之后,将从系统的空闲片段文件池中移动若干个片段文件至片段文件目录中,且移入的片段文件的数目至少为文件数据分片的数目,其中,片段文件目录用于存放目标文件的片段文件,目标文件的片段文件用于存储文件数据,且片段文件目录中的片段文件将按系统预置的方式或者由用户进行编号。例如:创建文件名为test.ts的目标文件,同时建立一个与目标文件对应的片段目录名为test.ts.segment,片段文件名从1开始编号,如:
test.ts.segment/1.dat;
test.ts.segment/2.dat;
test.ts.segment/3.dat。
如写操作的文件数据对应的是目标文件的片段文件1,则将文件数据写入test.ts.segment/1.dat;
205、根据写操作请求中包含的文件数据的大小及当前写文件位置,确定文件数据将要写入的片段文件的编号;
目标文件及目标文件对应的片段文件目录创建之后,或者判断写操作请求对应的目标文件存在时,系统将根据写操作请求中包含的文件数据的大小及当前写文件位置,确定文件数据将要写入的片段文件的编号,其中,当前写文件位置表示文件数据写入时在片段文件的起始位置。
206、根据得到的片段文件的编号判断将写入文件数据的片段文件是否存在,若不存在,则执行步骤207,若存在,则执行步骤209;
若经过步骤203判断之后发现目标文件已经存在,则目标文件对应的片段文件目录中包含的片段文件也许已经执行了其他的写文件操作,剩余的片段文件存储空间不够完成此次写文件操作的情况,因此系统将根据文件数据将要写入的片段文件的编号判断所需的片段文件是否存在。
207、移动空闲片段文件到文件数据所属的目标文件对应的目标文件目录下;
当将要写入数据的片段文件不存在或部分存在时,系统将从空闲片段文件池中移动空闲片段文件到文件数据所属的目标文件对应的目标文件目录下,本实施例中的移动,并不是物理意义上的移动,可以是把片段文件的所在的目标文件目录进行更改,移动的空闲片段文件的数目为目标文件目录下缺少的片段文件的个数,例如,文件数据写入需要3个片段文件,目标文件目录下只有1个片段文件可用于数据的写入,则从空闲片段文件池中移动2个片段文件到目标文件目录下。其中空闲片段文件池中包含未使用的空闲片段文件,空闲片段文件池在系统的初始化过程中建立,用于保存空闲片段文件。
208、将移入的空闲片段文件的编号修改为文件数据将要写入的片段文件的编号;
步骤207中将空闲片段文件移入到目标文件目录下,为了使得文件数据能够写入对应编号的片段文件,系统将修改移入的空闲片段文件的编号。
在步骤205中系统得到文件数据将要写入的片段文件的编号,因此系统将移入的片段文件的编号修改为文件数据将要写入的片段文件的编号,使得写操作请求中的文件数据能够写入对应编号的片段文件。例如当文件数据将要写入的片段文件的编号为1,2,3,则将移入的空闲片段文件按1.dat,2.dat,3.dat进行编号。
209、将文件数据写入对应的片段文件的RAID条带中。
当目标文件对应的片段文件目录下存在文件数据将要写入的片段文件时,系统将写操作请求中文件数据写入所属目标文件对应的片段文件中,完成写操作的优化处理。
需要说明的是,由于通常条带存储容量较大,对数据量较小的文件一个条带就可以存储,因此不需要对数据量小的文件再进行分片存储,在本发明实施例中,对数据量较大的文件效果较好,例如媒体文件等,因此,本发明实施例中可以判断拦截的写操作对应的目标文件类型是否是预先指定的文件类型,如果是,则按本发明实施例描述的技术方案对写操作进行优化处理,如果不是,则按现有技术中对文件写入方式进行处理。若系统只对特定类型的文件本发明实施例描述的方案进行写操作,则系统将通过初始化流程预先设置文件数据所属的目标文件类型、文件数据所需存储空间的最小值及文件数据分片的大小等参数等等,例如:系统设置文件为以“.ts”为后缀,大于或等于80MB的文件,且文件的分片大小为80MB,则系统拦截的写操作请求中的文件数据所属的目标文件类型为“.ts”为后缀且大于或等于80MB的文件。同时,在初始化过程中,系统将创建片段文件,所创建的片段文件的存储空间具有和存储系统中RAID存储空间整数倍大小相同的存储空间,且都保存在空闲片段文件池中,供后续的操作使用。
在本发明实施例中,将写操作请求中的文件数据写入所属目标文件对应的片段文件的处理方法有以下几种,分别为:
1)系统的存储空间分为两个部分:高速写cache存储空间和慢速存储空间,当目标文件及目标文件对应的片段文件建立在高速写cache存储空间时,系统将写操作请求中的文件数据写入高速写cache存储空间中目标文件对应的片段文件中。
若将文件数据写入高速写cache存储空间中,当预置的固定周期结束时,或者系统检测到高速写cache存储空间的剩余容量小于预置的数值时,系统将高速写cache存储空间中的所有片段文件迁移到慢速存储空间上,释放高速写cache存储空间中的冷片段文件,其中冷片段文件为在固定周期内访问量少于系统预置数值的片段文件。
按以上方法处理写操作请求时,高速写cache存储空间及慢速存储空间是系统将存储空间分成的两个部分,通过将高速写cache存储空间中的片段文件迁移到慢速存储空间并释放高速写cache存储空间的冷片段文件,使得访问量高的片段文件可以保存在高速写cache存储空间上,能够有效的提高系统访问目标文件的效率,可以实现片段文件的写cache特性。
2)系统的存储空间分为一级高速存储空间和二级慢速存储空间时,当目标文件及目标文件对应的片段文件同时建立在一级高速存储空间和二级慢速存储空间上时,系统将把写操作请求中的文件数据写入一级高速存储空间中所述目标文件对应的片段文件中。
文件数据写入一级高速存储空间后,当预置的固定周期结束后,或者系统检测到一级高速存储空间的剩余空间小于预置的数值时,系统将把一级高速存储空间中的冷片段文件迁移到二级慢速存储空间上,并释放一级高速存储空间中的冷片段文件,其中冷片段文件为访问次数小于预置次数的片段文件。
按照以上方法处理写操作请求,可以实现片段文件级分层迁移功能的分级存储特性。
3)系统的存储空间分为一级高速存储空间和二级慢速存储空间时,系统可以在一级高速存储空间和二级慢速存储空间建立目标文件及目标文件对应的片段文件目录,即建立文件分片池,系统将把写操作请求中的文件数据写入二级慢速存储空间中目标文件对应的片段文件中。
文件数据写入二级慢速存储空间之后,预置的固定周期结束后,系统将对二级慢速存储空间中访问次数大于预置次数的片段文件进行统计,并将片段文件迁移到一级高速存储空间上,迁移之后,将释放二级慢速存储空间中访问次数大于预置次数的片段文件。
按照以上方法对写操作请求进行处理,也可以实现片段文件分级迁移功能的分级存储特性。
在方法2)及3)中,系统将存储空间分为一级高速存储空间及二级慢速存储空间,其中一级高速存储空间用于保存访问量大的片段文件,二级慢速存储空间用于保存访问量小的片段文件(即冷片段文件),通过片段文件的迁移,能够有效的对片段文件进行管理,实现片段文件分级迁移功能的分级存储特性。
在本发明实施例中,通过拦截系统的写操作请求,将文件数据按用于存储数据的片段文件的存储大小进行分片,使得文件数据能够按RAID条带对齐的方式写入片段文件中,由于片段文件中的条带将写满数据,使得数据写入之前不需要将已有数据读出,不会有写惩罚产生,提高了系统的IO性能,同时通过将系统的存储空间进行分级,可以实现片段文件级写cache特性及片段文件级分层迁移功能的分级存储特性。
在本发明实施例中,不仅可以对写操作请求进行IO性能的优化处理,还可以读操作请求进行优化处理,请参阅图3,为本发明实施例中一种读操作方法的一个实施例,包括:
301、拦截应用系统的读操作请求;
系统将拦截应用系统的读操作请求。
302、获取目标文件对应的片段文件;
系统根据读操作请求中包含的目标文件名和读文件位置信息得到目标文件对应的片段文件,其中片段文件为包含若干个预置存储大小的RAID条带且按RAID条带对齐方式写入数据的片段文件;
303、从片段文件中读取文件数据。
系统将从获取到的片段文件中读取文件数据的内容。
需要说明的是,系统还可以对删除操作请求进行优化处理,请参阅图4,为本发明实施例中一种删除文件操作方法的实施例,包括:
401、拦截应用系统的删除文件操作请求;
系统将拦截应用系统的删除文件操作请求。
402、确定目标文件对应的片段文件目录;
系统将根据删除文件操作请求中包含的目标文件的名称信息获取目标文件及目标文件对应的片段文件目录。
403、释放片段文件目录中的片段文件;
系统确定目标文件对应的片段文件目录之后,将片段文件目录中下的片段文件释放回空闲片段文件池中。
404、删除片段文件目录及目标文件。
片段文件被释放之后,系统将删除目标文件及目标文件对应的用于存储片段文件的片段文件目录。
需要说明的是,系统还可以对文件改名操作进行优化处理,请参阅图5,为本发明实施例中一种文件改名操作方法的实施例,包括:
501、拦截应用系统的文件改名操作请求;
系统将拦截应用系统的文件改名操作请求。
502、获得目标文件及目标文件对应的片段文件目录;
系统将根据文件改名操作中包含的文件名获得目标文件及目标文件对应的片段文件目录。
503、修改目标文件及目标文件对应的片段文件目录的名称。
系统获得目标文件及目标文件对应的片段文件目录之后,将根据文件改名操作请求中包含的名称修改目标文件及目标文件对应的片段文件目录的名称。
在本发明实施例的图3,4所示的实施例中,对读操作请求及删除操作请求中,由于片段文件是按RAID条带对齐的方式创建及写入数据的,使得在执行操作时,能够从写满的RAID条带中读出数据或删除数据,有效的避免了碎片的产生。
请参阅图6,为本发明实施例一种写操作装置,包括:
拦截模块601,用于拦截写操作请求,写操作请求包含文件数据、文件数据所属的目标文件的类型及名称;
分片模块602,用于将写操作请求中包含的文件数据进行分片,其中分片的大小与文件系统中预置的片段文件的存储大小相同,片段文件的存储大小为预置的RAID条带存储大小的整数倍;
获取模块603,用于根据写操作请求中包含的文件数据所属的目标文件的类型及名称获取文件数据将要写入的片段文件;
写入模块604,用于将分片之后的文件数据写入所获取的片段文件对应的RAID条带中。
在本发明实施例中,装置还包括:
补零模块605,用于当最后写入数据的RAID条带没有写满时,采用补零的方式写满最后写入数据的RAID条带。
在本发明实施例中,通过拦截系统的写操作,并将写操作中的文件数据按照预置的片段文件的存储大小进行分片,将分片后的文件数据写入按RAID对应的片段文件中,使得写操作请求中的文件数据能够按RAID条带对齐的方式进行存储,写入数据时不需要将已有的数据读出,避免了写惩罚的产生,提高系统的IO性能。
为更好的理解技术,将对图6所示的实施例中的获取模块603进行详细介绍,请参阅图7,为本发明实施例获取模块的实施例,包括:
目标文件获取模块701,用于按照文件数据所属的目标文件的类型及名称获取目标文件;
编号确定模块702,用于根据写操作请求中包含的文件数据的大小及当前写文件位置,确定文件数据将要写入的目标文件的片段文件的编号;
片段文件获取模块703,用于根据片段文件的编号获取对应的片段文件。
其中,目标文件获取模块701还包括:
目标文件判断模块7011,用于根据文件数据所属的目标文件的类型及名称判断目标文件是否存在;
创建模块7012,用于当目标文件不存在时,创建目标文件及目标文件对应的片段文件目录,片段文件目录下保存着目标文件的片段文件。
其中,片段文件获取模块703包括:
片段文件判断模块7031,用于根据片段文件的编号判断将要写入文件数据的片段文件是否存在;
空闲片段文件获取模块7032,用于当将要写入文件数据的片段文件不存在时,移动空闲片段文件到文件数据所属的目标文件对应的目标文件目录下;
编号修改模块7033,用于将移入的空闲片段文件的编号修改为文件数据将要写入的片段文件的编号。
为加深对技术的理解,请参阅8,为本发明实施例写入模块的实施例。包括:
写入模块604包括以下三组模块中的任意一种,分别为:
1)第一写入模块801,用于当目标文件及目标文件对应的片段文件建立在高速写cache存储空间时,将写操作中的文件数据写入高速写cache存储空间目标文件对应的片段文件中;
第一迁移模块802,用于当预置的固定周期结束或者检测到高速写cache存储空间的剩余空间小于预置的数值时,将高速写cache存储空间中的片段文件迁移到慢速存储空间上;
第一释放模块803,用于释放高速写cache存储空间中的冷片段文件。
2)第二写入模块804,用于当目标文件及目标文件对应的片段文件同时建立在一级高速存储空间和二级慢速存储空间时,将写操作中的文件数据写入一级高速存储空间中目标文件对应的片段文件中;
第二迁移模块805,用于当预置的固定周期结束或者检测到一级高速存储空间的剩余空间小于预置的数值时,将一级高速存储空间中的冷片段文件迁移到二级慢速存储空间上;
第二释放模块806,用于释放一级高速存储空间中的冷片段文件。
3)第三写入模块807,用于当目标文件及目标文件对应的片段文件同时建立在一级高速存储空间和二级慢速存储空间时,将写操作中的文件数据写入二级慢速存储空间中目标文件对应的片段文件中;
统计模块808,预置的固定周期结束时,统计得到二级慢速存储空间中访问次数大于预置次数的片段文件;
第三迁移模块809,用于将片段文件迁移到一级高速存储空间上;
第三释放模块810,释放二级慢速存储空间中的访问次数大于预置次数的片段文件。
在本发明实施例中,写入模块604将写操作中的文件数据写入目标文件对应的片段文件中有以下三种情况,分别为:
1)若目标文件及目标文件对应的片段文件建立在高速写cache存储空间上,第一写入模块801将写操作中的文件数据写入高速写cache存储空间目标文件对应的片段文件中,当预置的固定周期结束或者检测到高速写cache存储空间的剩余空间小于预置的数值时,第一迁移模块802将高速写cache存储空间中的片段文件迁移到慢速存储空间上,并由第一释放模块803释放高速写cache存储空间中的冷片段文件。
2)若目标文件及目标文件对应的片段文件同时建立在一级高速存储空间和二级慢速存储空间上,第二写入模块804将写操作中的文件数据写入一级高速存储空间中目标文件对应的片段文件中,当预置的固定周期结束或者检测到一级高速存储空间的剩余空间小于预置的数值时,第二迁移模块805将一级高速存储空间中的冷片段文件迁移到二级慢速存储空间上,并由第二释放模块806释放一级高速存储空间中的冷片段文件。
3)若目标文件及目标文件对应的片段文件同时建立在一级高速存储空间和二级慢速存储空间上,第三写入模块807将写操作中的文件数据写入二级慢速存储空间中目标文件对应的片段文件中,预置的固定周期结束时,统计模块808将统计得到二级慢速存储空间中访问次数大于预置次数的片段文件并将结果发送给第三迁移模块809,第三迁移模块809将访问次数大于预置次数的片段文件迁移到一级高速存储空间上,片段文件迁移后,第三释放模块810将释放二级慢速存储空间中的访问次数大于预置次数的片段文件。
需要说明的是,在现有的流媒体系统中,一般包括应用系统、文件系统及存储系统,存储系统大多采用大容量的RAID存储数据。在本发明实施例中,可以通过在流媒体系统中插入插件的方式达到对特定类型的目标文件进行优化处理的目的,例如插件可以夹在应用系统与文件系统之间,包括用于设置参数的配置模块,用于拦截文件操作的拦截处理模块,及用于创建片段文件、给片段文件分配存储空间、释放片段文件的文件分片池处理模块,在本发明实施例中,插件所包含的功能也可由流媒体系统中原有的系统去完成,并不一定要用添加插件的形式,在实际应用中优化方式的具体实施方法根据情况而定,此处不做限定。
本发明实施例是系统处理写操作使用的优化装置,系统还可以通过拦截特定的文件操作的方式优化处理读操作,删除文件操作,文件改名操作等,请分别参看图9,图10,图11。
请参阅图9,为本发明实施例一种读操作装置,包括:
拦截模块901,用于拦截应用系统的读操作请求;
第一获取模块902,用于拦截模块901拦截读操作请求后,根据读操作请求中所包含的文件名和读文件位置信息得到目标文件对应的片段文件;
读取模块903,从目标文件对应的片段文件中读取文件数据。
请参阅图10,为本发明实施例一种删除文件操作装置,包括:
拦截模块1001,用于拦截应用系统的删除文件操作请求;
第二获取模块1002,用于拦截模块拦截删除文件操作请求后,根据删除文件操作中包含的文件的名称信息获取目标文件对应的片段文件目录;
片段文件释放模块1003,用于将片段文件目录中的片段文件释放回空闲片段文件池中;
删除模块1004,用于删除片段文件目录及目标文件。
请参阅图11,为本发明实施例一种文件改名操作装置,包括:
拦截模块1101,用于拦截应用系统的文件改名操作请求;
第三获取模块1102,用于拦截模块1101拦截文件改名操作请求后,根据文件改名操作包含的文件名获得目标文件及目标文件对应的片段文件目录;
改名模块1103,用于根据文件改名操作请求修改目标文件及目标文件对应的片段文件目录的名称。
在本发明实施例图9,10,11所示实施例中,描述的是对按RAID条带对齐方式写入数据的片段文件的读操作、删除文件操作及文件改名操作的优化处理,由于其中的片段文件中被写入数据的RAID条带都处于写满的状态,使得有效的减少碎片的产生。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上对本发明所提供的一种写操作方法及装置进行了详细介绍,对于本领域的一般技术人员,依据本发明实施例的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。