一种文件存储方法和系统的制作方法

文档序号:7824116阅读:114来源:国知局
一种文件存储方法和系统的制作方法
【专利摘要】本发明提出一种文件存储方法,应用于存储设备上,包括:在本地创建用于将所述前端设备写入的小文件进行合并存储的大文件;当接收到前端设备写入的小文件时,将所述小文件的索引信息在本地进行缓存;为所述小文件指定大文件,根据写入顺序将所述小文件以及对应的描述信息写入指定的所述大文件,并在该大文件无法再写入新的数据或者写入超时时,将已缓存的所述小文件的索引信息按照写入顺序批量写入到小文件索引区;其中,所述索引信息包括所述指定的大文件的访问路径以及所述小文件在该大文件中的开始偏移量。通过本发明可以提升小文件的写入性能。
【专利说明】一种文件存储方法和系统

【技术领域】
[0001]本发明涉及视频监控领域,尤其涉及一种文件存储方法和系统。

【背景技术】
[0002]随着卡口监控业务的快速发展,单张图片等小文件的存储成为了业界的一大难题。目前业界对小文件的存储,现有的解决方案主要是通过文件系统或者云存储方案来实现。
[0003]然而,通过文件系统对小文件进行存储时,长时间满覆盖后容易出现文件碎片,并且存储的性能低下;而通过云存储方案对小文件进行存储时,例如采用hadoop方案,使用集群设备或者多个副本存储对小文件进行存储,仍然会存在存储性能低下的问题,并且非常浪费存储空间。


【发明内容】

[0004]有鉴于此,本发明提出一种小文件存储方法,应用于存储设备上,所述方法包括:
[0005]在本地创建用于将所述前端设备写入的小文件进行合并存储的大文件;
[0006]当接收到前端设备写入的小文件时,将所述小文件的索引信息在本地进行缓存;
[0007]为所述小文件指定大文件,根据写入顺序将所述小文件以及对应的描述信息写入指定的所述大文件,并在该大文件无法再写入新的数据或者写入超时时,将已缓存的所述小文件的索引信息按照写入顺序批量写入到小文件索引区;
[0008]其中,所述索引信息包括所述指定的大文件的访问路径以及所述小文件在该大文件中的开始偏移量。
[0009]可选的,所述小文件索引区包括目录子区域;
[0010]所述为所述小文件指定大文件包括:
[0011]为所述小文件指定大文件;
[0012]将所述小文件的目录信息以及指定的所述大文件的目录信息写入所述目录子区域,并在目录子区域中保存所述小文件的目录信息与所述大文件的目录信息的映射关系;其中所述大文件的目录信息中包括所述大文件的目录的访问路径。
[0013]可选的,所述根据写入顺序将所述小文件以及对应的描述信息写入指定的所述大文件之前,包括:
[0014]将所述前端设备写入的第一个小文件的索引信息以及所述指定的大文件的标识写入所述小文件索引区,以便后续可根据所述第一个小文件的索引信息以及所述指定的大文件的标识对小文件索引区中的数据进行异常恢复。
[0015]可选的,所述小文件索引区还包括索引子区域;其中所述索引子区域包括至少一个预设大小的文件分组块;
[0016]所述将已缓存的所述小文件的索引信息按照写入顺序批量写入到所述小文件索引区包括:
[0017]为所述小文件分配一个文件分组块;
[0018]将所述小文件的索引信息按照写入顺序批量写入所述文件分组块,并保存所述小文件与所述指定的大文件的映射关系;
[0019]当所述文件分组块无法再写入新的数据时,在所述索引子区域中从所述文件分组块的结束位置开始再次划分出一个新的文件分组块,将所述新的文件分组块分配给所述小文件,并继续将所述小文件的文件信息批量写入所述新的文件分组块,直到所述小文件的索引信息均写入完成。
[0020]可选的,所述方法还包括:
[0021]在将已缓存的小文件的索引信息按照写入顺序批量写入到小文件索引区的过程中,如果设备发生断电或者重启,在设备重启后,根据所述小文件索引区中存储的所述大文件的标识以及所述第一个小文件的索引信息,查找到对应的大文件,并遍历该大文件,读取该大文件中存储的所述描述信息,根据所述描述信息对所述小文件的索引信息进行恢复后,重新按照写入顺序批量写入所述小文件索引区。
[0022]可选的,所述方法还包括:
[0023]当所述已缓存的小文件的索引信息成功写入到所述小文件索引区后,释放已缓存的所述小文索引信息。
[0024]本发明还提出一种小文件存储系统,应用于存储设备上,所述系统包括:
[0025]创建模块,用于在本地创建用于将所述前端设备写入的小文件进行合并存储的大文件;
[0026]缓存模块,用于在接收到前端设备写入的小文件时,将所述小文件的索引信息在本地进行缓存;
[0027]写入模块,用于为所述小文件指定大文件,根据写入顺序将所述小文件以及对应的描述信息写入指定的所述大文件,并在该大文件无法再写入新的数据或者写入超时时,将已缓存的所述小文件的索引信息按照写入顺序批量写入到小文件索引区;
[0028]其中,所述索引信息包括所述指定的大文件的访问路径以及所述小文件在该大文件中的开始偏移量。
[0029]可选的,所述小文件索引区包括目录子区域;
[0030]所述写入模块具体用于:
[0031]为所述小文件指定大文件;
[0032]将所述小文件的目录信息以及指定的所述大文件的目录信息写入所述目录子区域,并在目录子区域中保存所述小文件的目录信息与所述大文件的目录信息的映射关系;其中所述大文件的目录信息中包括所述大文件的目录的访问路径。
[0033]可选的,所述写入模块进一步用于:
[0034]在根据写入顺序将所述小文件以及对应的描述信息写入指定的所述大文件之前,将所述前端设备写入的第一个小文件的索引信息以及所述指定的大文件的标识写入所述小文件索引区,以便后续可根据所述第一个小文件的索引信息以及所述指定的大文件的标识对小文件索引区中的数据进行异常恢复。
[0035]可选的,所述小文件索引区还包括索引子区域;其中所述索引子区域包括至少一个预设大小的文件分组块;
[0036]所述写入模块进一步用于:
[0037]为所述小文件分配一个文件分组块;
[0038]将所述小文件的索引信息按照写入顺序批量写入所述文件分组块,并保存所述小文件与所述指定的大文件的映射关系;
[0039]当所述文件分组块无法再写入新的数据时,在所述索引子区域中从所述文件分组块的结束位置开始再次划分出一个新的文件分组块,将所述新的文件分组块分配给所述小文件,并继续将所述小文件的文件信息批量写入所述新的文件分组块,直到所述小文件的索引信息均写入完成。
[0040]可选的,所述写入模块进一步用于:
[0041]在将已缓存的小文件的索引信息按照写入顺序批量写入到小文件索引区的过程中,如果设备发生断电或者重启,在设备重启后,根据所述小文件索引区中存储的所述大文件的标识以及所述第一个小文件的索引信息,查找到对应的大文件,并遍历该大文件,读取该大文件中存储的所述描述信息,根据所述描述信息对所述小文件的索引信息进行恢复后,重新按照写入顺序批量写入所述小文件索引区。
[0042]可选的,所述系统还包括:
[0043]释放模块,用于在所述已缓存的小文件的索引信息成功写入到所述小文件索引区后,释放已缓存的所述小文件的索引信息。
[0044]本发明方案通过在本地创建用于将前端设备写入的小文件进行合并存储的大文件,在接收到前端设备写入的小文件时,将接收到的小文件的索引信息在本地进行缓存,然后根据写入顺序将所述小文件以及对应的描述信息写入所述大文件,并在所述大文件无法再写入新的数据或者写入超时时,将已缓存的小文件的索引信息按照写入顺序批量写入到小文件索引区。由于所述索引信息包括所述指定的大文件的访问路径以及所述小文件在该大文件中的开始偏移量,用户可以根据所述大文件的访问路径以及小文件在该大文件中的开始偏移量直接在大文件上访问小文件,因此可以实现将小文件映射成为大文件进行存储,避免了直接存储小文件而产生文件碎片,并且节约了存储空间;同时由于采用了批量写入索引信息的方案,还可以显著提升小文件的写入性能。

【专利附图】

【附图说明】
[0045]图1是本发明示例性的一实施方式中提出的一种文件存储方法的流程图;
[0046]图2是本发明示例性的一实施方式中提出的一种小文件存储方案示意图;
[0047]图3是本发明示例性的一实施方式中提出的一种小文件索引区的存储结构图;
[0048]图4是本发明示例性的一实施方式中提出的一种大文件的存储结构图;
[0049]图5是本发明示例性的一实施方式中提出的一种文件存储系统的逻辑结构图。

【具体实施方式】
[0050]本发明旨在将前端设备写入的小文件映射成大文件进行存储,并且拥有大文件的存储性能。
[0051]本发明方案通过在本地创建用于将前端设备写入的小文件进行合并存储的大文件,在接收到前端设备写入的小文件时,将接收到的小文件的索引信息在本地进行缓存,然后根据写入顺序将所述小文件以及对应的描述信息写入所述大文件,并在所述大文件无法再写入新的数据或者写入超时时,将已缓存的小文件的索引信息按照写入顺序批量写入到小文件索引区。由于所述索引信息包括所述指定的大文件的访问路径以及所述小文件在该大文件中的开始偏移量,用户可以根据所述大文件的访问路径以及小文件在该大文件中的开始偏移量直接在大文件上访问小文件,因此可以实现将小文件映射成为大文件进行存储,避免了直接存储小文件而产生文件碎片,并且节约了存储空间;同时由于采用了批量写入索引信息的方案,还可以显著提升小文件的写入性能。
[0052]为了使本发明的技术方案更加清楚明白,以下结合附图并举实施例对本发明进行详细描述。
[0053]本发明示例性的一种实施方式中,提出一种文件存储方法,应用于存储设备上,请参见图1,所述方法包括:
[0054]步骤S101、在本地创建用于将所述前端设备写入的小文件进行合并存储的大文件;
[0055]步骤S102、当接收到前端设备写入的小文件时,将所述小文件的索引信息在本地进行缓存;
[0056]在实现时,所述大文件的可以提前创建,也可以在接收到前端设备写入的小文件时再出发创建。
[0057]步骤S103、为所述小文件指定大文件,根据写入顺序将所述小文件以及对应的描述信息写入指定的所述大文件,并在该大文件无法再写入新的数据或者写入超时时,将已缓存的所述小文件的索引信息按照写入顺序批量写入到小文件索引区;其中,所述索引信息包括所述指定的大文件的访问路径以及所述小文件在该大文件中的开始偏移量。
[0058]在本实施例中,所述前端设备可以是监控系统中的前端监控设备,例如,在基于卡口监控业务的监控系统中,所述前端设备可以是该监控系统中的前端卡口监控设备(比如卡口摄像机)。
[0059]请参见图2,图2为本实施例示出的小文件存储方案示意图。
[0060]如图2所示,在整个存储方案中,包括前端用于存储小文件的索引数据的小文件索引区,以及后端的大文件;所述大文件实际为一批小文件的集合,与前端的小文件存在映射关系。其中所述大文件可以存储在独立的块存储设备上,也可以存放在诸如现有实现中的文件系统或者云存储系统上,在本实施例中不加以限制。
[0061]在本实施例中,所述小文件索引区,用于描述小文件的索引结构,保证索引更新的性能以及索引本身的可靠性。所述小文件索引区可以被划分出一个目录子区域和一个索引子区域。所述目录子区域用于存放所述小文件的目录信息,所述索引子区域用于存放所述小文件的索引信息。
[0062]所述小文件的目录信息,可以包括小文件的目录名称(即用户的目录名称)、创建时间、父层目录以及小文件目录映射到所述大文件中的大文件的目录信息;其中所述大文件的目录信息可以包括所述大文件目录的访问路径等信息;所述小文件的索引信息,可以包括小文件的名称、文件大小、创建时间、父层目录标识、所述小文件映射后的大文件的访问路径、在大文件中的开始偏移量等信息。
[0063]通过以上的索引结构,可以实现将前端设备写入的小文件映射为一个大文件在存储设备上进行存储。用户在查看后端存储设备上存储的小文件时,首先可以通过小文件与大文件之间的映射关系,来查找小文件目录映射后的大文件目录的访问路径,然后在该大文件目录下,再根据小文件映射到所述大文件中的大文件的访问路径、以及在大文件中的开始偏移量等信息查找到对应的小文件。其中所述开始偏移量用于描述小文件在映射后的大文件中的位置。
[0064]请参见图3,图3为本实施例示出的所述小文件索引区的存储结构图。
[0065]如图3所示,在本实施例中所述小文件索引区的存储结构,可以沿用目前较为通用的存储结构,主要包括super (超级块)、Inode (索引节点)、Dir_block(目录块)、File-block(数据块)等四部分。Super 用于描述 Inode、Dir-block、File-block 的开始位置和结束位置等信息。Inode用于描述Dir-block和File-block中的资源占用情况,在实现时,可以米用bitmap来描述Dir-block和File-block中资源的占用情况。Dir-block即为所述小文件的目录子区域,用于存储小文件的目录信息;该子区域中的每一个Dir分别代表一个独立的存储目录。File-block即为所述索引子区域,用于存放所述小文件的索引信息。
[0066]请继续参见图3,在本实施例中,为了提高小文件的写入性能,可以通过将File-block划分为若干个文件分组块,并规定Dir-block中存储的每一个小文件的目录信息至少对应一个文件分组块,从而在对小文件的索引信息进行更新时,可以以文件分组块为单位进行批量更新,即将小文件的索引信息写入所述小文件索引区时,可以将同一个文件分组块中的小文件的索引数据批量写入小文件索引区,因此当小文件的数量足够大时,一次索引更新的性能损失可以忽略不计,从而可以使小文件的写入性能达到与大文件的写入性能相当的实现效果。
[0067]其中,值得说明的是,所述文件分组块的大小可以由用户结合实际的业务情况进行设备,而所述File-block中文件分组块的数量,则取决于文件分组块的大小以及前端设备写入的小文件的数量。例如,以卡口业务为例,假设前端卡口监控设备每一小时产生的图片(小文件)为100000张,所述文件分组块的大小被设置为存储2000个图片索引,卡口监控设备将每小时产生的图片批量写入后端的存储设备时,那么本次写入所需文件分组块的数量则为50个。
[0068]请参见图4,图4为本实施例示出的所述大文件的存储结构图。
[0069]如图4所示,一个大文件实际为一批小文件的集合,与小文件存在映射关系,大文件中的每一个小文件(SF-N)包括数据部分(Data)和描述信息(Desc)两部分,所述描述信息在实现时可以包括用户文件名称和文件大小,当小文件索引区中存储的小文件的索引数据发生损坏时,可以根据大文件中存储的所述描述信息对小文件索引区中的小文件的索引数据进行恢复。
[0070]以下以卡口业务为示例来详细描述本方案的存储过程。
[0071 ] 卡口业务的特点是业务的流量很大,其业务前端的卡口监控设备可以在短时间内产生大量的图片或者图片帧等小文件,在对业务前端产生的小文件进行存储时,通常都是通过设定一个时间周期(比如I小时),将时间周期内采集到的小文件存放到一个独立的存储目录,然后将该存储目录内的小文件批量写入后端的存储设备上。
[0072]因此,针对卡口业务的业务特点,后端存储设备可以将前端的卡口监控设备批量写入的小文件在本地进行合并,映射成为一个大文件进行存储。
[0073]在实现时,首先可以在存储设备本地创建若干用于将前端的卡口监控设备写入的小文件进行合并存储的大文件;其中每一个大文件对应卡口监控设备本地的一个存储目录;所述大文件的大小可以由用户根据实际的业务情况进行设置;例如,在实现时,为了尽可能的保证将前端设备一次写入的小文件集合映射到同一个大文件中,可以根据大文件对应的存储目录的总大小来设置大文件的大小。
[0074]存储设备在接收到前端的卡口监控设备写入的小文件时,首先可以在本地建立一个事务;所述事务可以为内部定义的内存结构,用于描述一次小文件索引批量更新的过程,即通过建立的该事务可以实现将小文件的索引数据批量写入所述小文件索引区。当事务建立完成后,可以将接收到的小文件的索引信息以及所述大文件的名称(标识)缓存到事务中。存储设备在开始将前端卡口监控设备写入的小文件写入大文件时,可以首先从已创建完成的大文件中为所述小文件指定一个大文件,然后将所述小文件的目录信息,以及指定的所述大文件的目录的访问路径等信息写入到如图3所示出的小文件索引结构中的Dir-block中,并在Dir-block中保存所述小文件的目录信息与所述大文件的目录信息的映射关系。此时该大文件的目录即为所述小文件的映射目录,后续可以根据该映射关系,将所述小文件按照所述大文件的目录的访问路径写入到指定的大文件中。
[0075]当所述大文件指定完成后,可以首先将事务中缓存的所述前端设备第一个写入的小文件的索引信息以及该大文件的名称写入所述小文件索引区,用于后续的异常恢复。当写入完成后,可以将事务中缓存的所述第一个写入的小文件的文件索引信息以及所述大文件的名称释放。
[0076]接下来,可以根据写入顺序将所述前端设备写入的小文件以及对应的描述信息按照图4所示出的存储结构写入所述大文件,其中所述描述信息可以包括小文件的名称、大小等信息;当所述大文件无法再写入新的数据时,比如当前大文件的大小已经达到设定大小,可以触发将事务中已缓存的所述小文件的索引信息按照写入顺序批量写入到如图3所示出的小文件索引区的索引结构中的File-block中,以完成磁盘的更新。
[0077]然而以上方案对于一些特殊的应用场景,会造成由于写入持续时间太长而导致的磁盘更新不及时的问题,如果磁盘不及时更新,那么在写入过程中如果发生断电或者重启事件,则不得不对小文件索引区中的数据重新进行恢复。
[0078]例如,以卡口监控设备的道路监控场景为例,在深夜时由于道路来往车辆较少,卡口监控设备时间周期内(比如每小时内)采集到的图片数量有限,因此将时间周期内采集到的图片批量写入到后端存储设备时,如果在将大文件写满后再触发将小文件的索引信息写入小文件索引区,则会导致写入持续时间过长,那么在这个写入的时间段内,如果设备发生断电或者重启,则不得不对小文件索引区中的数据重新进行恢复后,才能对磁盘进行更新。
[0079]因此,针对以上场景,当根据写入顺序将所述前端设备写入的小文件以及对应的描述信息按照图4所示出的存储结构写入所述大文件时,可以设置一个超时时间,如果本次写入持续时间达到超时时间时,可以立即触发将事务中已缓存的所述小文件的索引信息按照写入顺序批量写入到如图3所示出的小文件索引区的索引结构中的File-block中,从而可以及时的完成磁盘的更新,以减少对小文件索引区中的数据重新进行恢复的次数。
[0080]请继续参见图3,在将当前事务中缓存的小文件的索引信息批量写入到所述小文件索引区时,假设本次写入的小文件为目录Dirl中的小文件,首先可以从小文件索引区的File-block中为Dirl分配一个文件分组块FileGrpl,将该文件分组块FileGrpl的位置信息写入Dir-block中所述小文件的目录Dirl中,然后将所述小文件的索引信息按照写入顺序批量写入所述文件分组块FileGrpl中,并保存所述小文件与所述大文件的映射关系,此时所述大文件即为所述小文件映射后的大文件。
[0081]当然,如果本次写入的过程中,FileGrpl已达到了设定大小,无法再写入数据时,可以在索引子区域中从所述FileGrpl的结束位置开始再次划分出一个新的文件分组块FileGrp2(图3中未示出),将FileGrp2分配给Dirl,并将FileGrp2的位置信息写入FileGrpl中,以形成一个文件分组块的链表,然后继续将所述小文件的索引信息批量写入所述FileGrp2中,并重复以上过程,直到所述小文件的索引信息写入完成。在本实施例中,在将已缓存的小文件的索引信息按照写入顺序批量写入到小文件索引区的过程中,如果设备发生断电或者重启,在设备重启后,可以根据所述小文件索引区中存储的所述大文件的名称以及所述第一个小文件的索引信息,查找到对应的大文件(在实现时大文件可能有多个,因此通过已记录的大文件名称可以准确查找到对应的大文件),并遍历该大文件,读取该大文件中存储的所述描述信息,然后根据所述描述信息对所述小文件的索引信息进行恢复后,重新按照写入顺序批量写入所述小文件索引区。
[0082]如前所述,所述索引信息可以包括小文件的名称、文件大小、创建时间、父层目录标识、所述小文件映射后的大文件的访问路径、在大文件中的开始偏移量等信息。所述描述信息可以包括小文件的名称、大小等信息。
[0083]因此,在对所述索引信息进行恢复时,可以从小文件索引区中已经存储的所述第一个小文件的索引信息中直接拷贝创建时间、父层目录标识以及所述小文件映射后的大文件的访问路径等信息,然后根据所述描述信息恢复出用户文件名称和文件大小。最后,在对各小文件在大文件中的开始偏移量进行恢复时,可以根据已经记录的第一个小文件的文件索引信息中的开始偏移量,并结合所述第一个小文件的实际大小进行计算后得到。例如,假设第一个小文件的开始偏移量为0,大小为40,表明大文件中前40个字节为写入的第一个小文件,那么在对第二个小文件的开始偏移量进行恢复时,可以用所述第一个小文件的开始偏移量加上其实际的大小,得到第二个小文件的开始偏移量为40,此时表明大文件中从第40个字节开始为第二个小文件,依次类推,可以按顺序恢复出其它各小文件的开始偏移量。当所述小文件索引区中各小文件的索引信息成功恢复后,由于事务中缓存的索引数据在写入完成后才会释放,因此可以重新按照写入顺序将事务中缓存的索引数据批量写入所述小文件索引区。
[0084]通过以上实施例的描述可知,本发明方案通过在本地创建用于将前端设备写入的小文件进行合并存储的大文件,在接收到前端设备写入的小文件时,将接收到的小文件的索引信息在本地进行缓存,然后根据写入顺序将所述小文件以及对应的描述信息写入所述大文件,并在所述大文件无法再写入新的数据或者写入超时时,将已缓存的小文件的索引信息按照写入顺序批量写入到小文件索引区。由于所述索引信息包括所述指定的大文件的访问路径以及所述小文件在该大文件中的开始偏移量,用户可以根据所述大文件的访问路径以及小文件在该大文件中的开始偏移量直接在大文件上访问小文件,因此可以实现将小文件映射成为大文件进行存储,避免了直接存储小文件而产生文件碎片,并且节约了存储空间;同时由于采用了批量写入索引信息的方案,还可以显著提升小文件的写入性能。
[0085]同时,由于小文件索引区采用了特殊的索引结构,对索引区中的文件信息划分文件分组块,并规定索引区中存储的每一个小文件的目录信息至少对应一个文件分组块,从而在对小文件的索引信息进行更新时,可以以文件分组块为单位进行批量更新,因此可以显著提升小文件的写入性能,从而可以使小文件的写入性能达到与大文件的写入性能相当的实现效果;而且,对索引区中的文件信息划分文件分组块,还可以实现在删除文件索引时,只需要简单的在前端的索引区中删除几个文件分组块,并在后端删除映射后的大文件目录即可,整体效率较高。
[0086]另外,由于小文件在大文件中存储时,保存了小文件的描述信息,因此一旦小文件的索引信息发生异常,可以根据小文件的描述信息进行恢复,有效保证了索引信息的安全。而且由于在大文件中小文件的描述信息和数据在一起保存,如果出现磁盘坏道等情况下,在对小文件进行恢复时,正常的扇区不用依赖有坏道的扇区的数据,可以单独进行恢复。
[0087]请参见图5,在一种示例性的实施方式中,本发明还提出一种文件存储系统50,应用于存储设备上,所述系统50包括:
[0088]创建模块501,用于在本地创建用于将所述前端设备写入的小文件进行合并存储的大文件;
[0089]缓存模块502,用于在接收到前端设备写入的小文件时,将所述小文件的索引信息在本地进行缓存;
[0090]写入模块503,用于为所述小文件指定大文件,根据写入顺序将所述小文件以及对应的描述信息写入指定的所述大文件,并在该大文件无法再写入新的数据或者写入超时时,将已缓存的所述小文件的索引信息按照写入顺序批量写入到小文件索引区;
[0091]其中,所述索引信息包括所述指定的大文件的访问路径以及所述小文件在该大文件中的开始偏移量。
[0092]在本实施例中,所述小文件索引区包括目录子区域;
[0093]所述写入模块503具体用于:
[0094]为所述小文件指定大文件;
[0095]将所述小文件的目录信息以及指定的所述大文件的目录信息写入所述目录子区域,并在目录子区域中保存所述小文件的目录信息与所述大文件的目录信息的映射关系;其中所述大文件的目录信息中包括所述大文件的目录的访问路径。
[0096]在本实施例中,所述写入模块503进一步用于:
[0097]在根据写入顺序将所述小文件以及对应的描述信息写入指定的所述大文件之前,将所述前端设备写入的第一个小文件的索引信息以及所述指定的大文件的标识写入所述小文件索引区,以便后续可根据所述第一个小文件的索引信息以及所述指定的大文件的标识对小文件索引区中的数据进行异常恢复。
[0098]在本实施例中,所述小文件索引区还包括索引子区域;其中所述索引子区域包括至少一个预设大小的文件分组块;
[0099]所述写入模块503进一步用于:
[0100]为所述小文件分配一个文件分组块;
[0101]将所述小文件的索引信息按照写入顺序批量写入所述文件分组块,并保存所述小文件与所述指定的大文件的映射关系;
[0102]当所述文件分组块无法再写入新的数据时,在所述索引子区域中从所述文件分组块的结束位置开始再次划分出一个新的文件分组块,将所述新的文件分组块分配给所述小文件,并继续将所述小文件的文件信息批量写入所述新的文件分组块,直到所述小文件的索引信息均写入完成。
[0103]在本实施例中,所述写入模块503进一步用于:
[0104]在将已缓存的小文件的索引信息按照写入顺序批量写入到小文件索引区的过程中,如果设备发生断电或者重启,在设备重启后,根据所述小文件索引区中存储的所述大文件的标识以及所述第一个小文件的索引信息,查找到对应的大文件,并遍历该大文件,读取该大文件中存储的所述描述信息,根据所述描述信息对所述小文件的索引信息进行恢复后,重新按照写入顺序批量写入所述小文件索引区。
[0105]在本实施例中,所述系统50还包括:
[0106]释放模块504,用于在所述已缓存的小文件的索引信息成功写入到所述小文件索引区后,释放已缓存的所述小文件的索引信息。
[0107]通过以上实施例的描述,本领域技术人员可以理解实施例中装置中的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
[0108]以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
【权利要求】
1.一种小文件存储方法,应用于存储设备上,其特征在于,所述方法包括: 在本地创建用于将所述前端设备写入的小文件进行合并存储的大文件; 当接收到前端设备写入的小文件时,将所述小文件的索引信息在本地进行缓存; 为所述小文件指定大文件,根据写入顺序将所述小文件以及对应的描述信息写入指定的所述大文件,并在该大文件无法再写入新的数据或者写入超时时,将已缓存的所述小文件的索引信息按照写入顺序批量写入到小文件索引区; 其中,所述索引信息包括所述指定的大文件的访问路径以及所述小文件在该大文件中的开始偏移量。
2.如权利要求1所述的方法,其特征在于,所述小文件索引区包括目录子区域; 所述为所述小文件指定大文件包括: 为所述小文件指定大文件; 将所述小文件的目录信息以及指定的所述大文件的目录信息写入所述目录子区域,并在目录子区域中保存所述小文件的目录信息与所述大文件的目录信息的映射关系;其中所述大文件的目录信息中包括所述大文件的目录的访问路径。
3.如权利要求1所述的方法,其特征在于,所述根据写入顺序将所述小文件以及对应的描述信息写入指定的所述大文件之前,包括: 将所述前端设备写入的第一个小文件的索引信息以及所述指定的大文件的标识写入所述小文件索引区,以便后续可根据所述第一个小文件的索引信息以及所述指定的大文件的标识对小文件索引区中的数据进行异常恢复。
4.如权利要求1所述的方法,其特征在于,所述小文件索引区还包括索引子区域;其中所述索引子区域包括至少一个预设大小的文件分组块; 所述将已缓存的所述小文件的索引信息按照写入顺序批量写入到所述小文件索引区包括: 为所述小文件分配一个文件分组块; 将所述小文件的索引信息按照写入顺序批量写入所述文件分组块,并保存所述小文件与所述指定的大文件的映射关系; 当所述文件分组块无法再写入新的数据时,在所述索引子区域中从所述文件分组块的结束位置开始再次划分出一个新的文件分组块,将所述新的文件分组块分配给所述小文件,并继续将所述小文件的文件信息批量写入所述新的文件分组块,直到所述小文件的索引信息均写入完成。
5.如权利要求3所述的方法,其特征在于,所述方法还包括: 在将已缓存的小文件的索引信息按照写入顺序批量写入到小文件索引区的过程中,如果设备发生断电或者重启,在设备重启后,根据所述小文件索引区中存储的所述大文件的标识以及所述第一个小文件的索引信息,查找到对应的大文件,并遍历该大文件,读取该大文件中存储的所述描述信息,根据所述描述信息对所述小文件的索引信息进行恢复后,重新按照写入顺序批量写入所述小文件索引区。
6.如权利要求1所述的方法,其特征在于,所述方法还包括: 当所述已缓存的小文件的索引信息成功写入到所述小文件索引区后,释放已缓存的所述小文索引信息。
7.一种小文件存储系统,应用于存储设备上,其特征在于,所述系统包括: 创建模块,用于在本地创建用于将所述前端设备写入的小文件进行合并存储的大文件; 缓存模块,用于在接收到前端设备写入的小文件时,将所述小文件的索引信息在本地进行缓存; 写入模块,用于为所述小文件指定大文件,根据写入顺序将所述小文件以及对应的描述信息写入指定的所述大文件,并在该大文件无法再写入新的数据或者写入超时时,将已缓存的所述小文件的索引信息按照写入顺序批量写入到小文件索引区; 其中,所述索引信息包括所述指定的大文件的访问路径以及所述小文件在该大文件中的开始偏移量。
8.如权利要求7所述的系统,其特征在于,所述小文件索引区包括目录子区域; 所述写入模块具体用于: 为所述小文件指定大文件; 将所述小文件的目录信息以及指定的所述大文件的目录信息写入所述目录子区域,并在目录子区域中保存所述小文件的目录信息与所述大文件的目录信息的映射关系;其中所述大文件的目录信息中包括所述大文件的目录的访问路径。
9.如权利要求7所述的方法,其特征在于,所述写入模块进一步用于: 在根据写入顺序将所述小文件以及对应的描述信息写入指定的所述大文件之前,将所述前端设备写入的第一个小文件的索引信息以及所述指定的大文件的标识写入所述小文件索引区,以便后续可根据所述第一个小文件的索引信息以及所述指定的大文件的标识对小文件索引区中的数据进行异常恢复。
10.如权利要求7所述的系统,其特征在于,所述小文件索引区还包括索引子区域;其中所述索引子区域包括至少一个预设大小的文件分组块; 所述写入模块进一步用于: 为所述小文件分配一个文件分组块; 将所述小文件的索引信息按照写入顺序批量写入所述文件分组块,并保存所述小文件与所述指定的大文件的映射关系; 当所述文件分组块无法再写入新的数据时,在所述索引子区域中从所述文件分组块的结束位置开始再次划分出一个新的文件分组块,将所述新的文件分组块分配给所述小文件,并继续将所述小文件的文件信息批量写入所述新的文件分组块,直到所述小文件的索引信息均写入完成。
11.如权利要求9所述的系统,其特征在于,所述写入模块进一步用于: 在将已缓存的小文件的索引信息按照写入顺序批量写入到小文件索引区的过程中,如果设备发生断电或者重启,在设备重启后,根据所述小文件索引区中存储的所述大文件的标识以及所述第一个小文件的索引信息,查找到对应的大文件,并遍历该大文件,读取该大文件中存储的所述描述信息,根据所述描述信息对所述小文件的索引信息进行恢复后,重新按照写入顺序批量写入所述小文件索引区。
12.如权利要求7所述的系统,其特征在于,所述系统还包括: 释放模块,用于在所述已缓存的小文件的索引信息成功写入到所述小文件索引区后,释放已缓存的所述小文件的索引信息。
【文档编号】H04N7/18GK104462563SQ201410833341
【公开日】2015年3月25日 申请日期:2014年12月26日 优先权日:2014年12月26日
【发明者】吕志明 申请人:浙江宇视科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1