CN105138655A - 一种数据存储、读取方法及装置 - Google Patents
一种数据存储、读取方法及装置 Download PDFInfo
- Publication number
- CN105138655A CN105138655A CN201510546432.7A CN201510546432A CN105138655A CN 105138655 A CN105138655 A CN 105138655A CN 201510546432 A CN201510546432 A CN 201510546432A CN 105138655 A CN105138655 A CN 105138655A
- Authority
- CN
- China
- Prior art keywords
- block
- data
- file
- storage area
- data storage
- 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.)
- Pending
Links
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/13—File access structures, e.g. distributed indices
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)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本申请公开了一种数据存储、读取方法及装置,应用于flash,该flash被均匀划分为若干个具备块标识的block块,在响应目标文件写入指令时,查找空闲目标块,从中选取一个块,将目标文件写入该块的数据存储区,若检测到当前块写满后还有剩余目标文件数据,从目标块中选择下一个块,继续写入剩余的目标文件数据,直至写完为止,并且在写入目标文件的各个块的标签管理区内添加next文件标签,该标签的值为各块的下一块的块标识,在第一个写入目标文件的块的标签管理区域添加name文件标签,该标签的值为目标文件的文件名。本申请将flash划分为多个块进行管理,若某个文件在写入过程出现异常,仅需删除对应块内数据,其余块内数据仍保持正常。
Description
技术领域
本申请涉及数据处理技术领域,更具体地说,涉及一种数据存储、读取方法及装置。
背景技术
文件系统是一种组织和存储计算机数据的方法,它使得对数据的访问和查找变得容易,用户只需要记住数据被写入到哪个文件,便可轻松对其进行访问。
在将数据写入flash的过程中,可能因为某些原因,例如断电等导致数丢失、破坏等异常情况,这种情况下,如何尽可能多的从flash中恢复出正常数据是亟待解决的问题。
发明内容
有鉴于此,本申请提供了一种数据存储、读取方法及装置,用于提供一种数据存储及读取方案,能够尽可能多的从异常flash中恢复出正常数据。
为了实现上述目的,现提出的方案如下:
一种数据存储方法,应用于flash中,该flash被均匀划分为若干个具备块标识的block块,每个block块的内存包括标签管理区和数据存储区,该方法包括:
响应目标文件写入指令,在flash中查找空闲的block块,确定为目标block块;
从所述目标block块中选取一个block块,作为当前block块,在所述当前block块的标签管理区添加name文件标签,该标签的值为目标文件的文件名;
将所述目标文件数据写入当前block块的数据存储区中;
判断当前block块的数据存储区是否写满;
若确定当前block块的数据存储区写满,进一步判断是否还有未存储的目标文件数据;
若确定当前block块的数据存储区未写满,则退出;
若确定不存在未存储的目标文件数据,则退出;
若确定存在未存储的目标文件数据,则从目标block块中选择下一block块,并在所述当前block块的标签管理区添加next文件标签,将所述下一block块的块标识作为所述当前block块的next文件标签的值,确定所述下一block块为当前block块,将所述目标文件中未被存储数据写入当前block块的数据存储区,返回执行所述判断当前block块的数据存储区是否写满的步骤。
优选地,目标文件还存在与之对应的目录,则该方法还包括:
从所述目标block块中选择一个空闲的block块;
在选择的block块的标签管理区添加name目录标签,该标签的值为目标文件所属目录的目录名;
在选择的block块的数据存储区写入文件索引数据,所述文件索引数据为目标文件的文件名与第一个写入目标文件的block块的块标识之间的对应关系。
优选地,在所述从所述目标block块中选择一个空闲的block块之前,该方法还包括:
在flash中查找是否存在name目录标签的值与所述目标文件所属目录的目录名相同的block块;
若否,执行所述从所述目标block块中选择一个空闲的block块的步骤;
若是,将查找到的block块作为指定block块;
判断所述指定block块的数据存储区是否存在空闲部分;
若存在,则将所述文件索引数据写入该空闲部分;
若不存在,则将所述指定block块的标签管理区内的next目录标签的值所指示的block块确定为指定block块,返回执行所述判断所述指定block块的数据存储区是否存在空闲部分的步骤。
优选地,每个block块的内存还包括校验区,该方法还包括:
在确定一个block块的数据存储区写满时,或者一个block块的数据存储区写入了目标文件数据的结尾时,利用该block块的数据存储区内存储的数据,生成crc校验值,并将生成的crc校验值添加到对应block块的校验区中。
一种数据读取方法,应用于按照上述的数据存储方法存储数据的flash中,该方法包括:
接收文件读取指令,所述文件读取指令包括待读取文件的文件名及所属目录名;
在flash中查找name目录标签的值与所述目录名相同的block块;
在查找到的block块及与之具备关联关系的block块的数据存储区中,查找包含所述待读取文件的文件名的文件索引数据,其中,与查找到的block块具备关联关系的block块为依据查找到的block块的next目录标签值能够直接或间接确定的block块;
依据查找到的文件索引数据,确定与所述待读取文件的文件名对应的block块,将确定的block块确定为当前block块;
利用所述当前block块的数据存储区内的数据生成crc校验值;
判断生成的crc校验值与所述当前block块的校验区的crc校验值是否相同;
若否,提示数据错误;
若是,将所述当前block块的数据存储区内的数据读取出来;
判断所述当前block块的标签管理区内next文件标签的值是否为空值;
若是,则退出;
若否,则将所述当前block块的标签管理区内next文件标签的值所指示的block块确定为当前block块,返回执行所述利用所述当前block块的数据存储区内的数据生成crc校验值的步骤。
一种数据存储装置,应用于flash中,该flash被均匀划分为若干个具备块标识的block块,每个block块的内存包括标签管理区和数据存储区,该方装置包括:
写入指令响应单元,用于响应目标文件写入指令,在flash中查找空闲的block块,确定为目标block块;
第一数据处理单元,用于从所述目标block块中选取一个block块,作为当前block块,在所述当前block块的标签管理区添加name文件标签,该标签的值为目标文件的文件名;
第二数据处理单元,用于将所述目标文件数据写入当前block块的数据存储区中;
第一判断单元,用于判断当前block块的数据存储区是否写满,并在确定当前block块的数据存储区未写满时退出,在确定当前block块的数据存储区写满时执行第二判断单元;
第二判断单元,用于判断是否还有未存储的目标文件数据,在确定不存在未存储的目标文件数据时退出,在确定存在未存储的目标文件数据时执行第三数据处理单元;
第三数据处理单元,用于从目标block块中选择下一block块,并在所述当前block块的标签管理区添加next文件标签,将所述下一block块的块标识作为所述当前block块的next文件标签的值,确定所述下一block块为当前block块,将所述目标文件中未被存储数据写入当前block块的数据存储区,返回执行所述第一判断单元。
优选地,目标文件还存在与之对应的目录,则该装置还包括:
第四数据处理单元,用于从所述目标block块中选择一个空闲的block块;
第五数据处理单元,用于在选择的block块的标签管理区添加name目录标签,该标签的值为目标文件所属目录的目录名;
第六数据处理单元,用于在选择的block块的数据存储区写入文件索引数据,所述文件索引数据为目标文件的文件名与第一个写入目标文件的block块的块标识之间的对应关系。
优选地,还包括:
第三判断单元,用于在flash中查找是否存在name目录标签的值与所述目标文件所述目录的目录名相同的block块,若否,执行所述第四数据处理单元,若是,执行第七数据处理单元;
第七数据处理单元,用于将查找到的block块作为指定block块;
第四判断单元,用于判断所述指定block块的数据存储区是否存在空闲部分,若存在,则执行第八数据处理单元,若不存在,则执行第九数据处理单元;
第八数据处理单元,用于将所述文件索引数据写入该空闲部分;
第九数据处理单元,用于将所述指定block块的标签管理区内的next目录标签的值所指示的block块确定为指定block块,返回执行所述第四判断单元。
优选地,每个block块的内存还包括校验区,该装置还包括:
第十数据处理单元,用于在确定一个block块的数据存储区写满时,或者一个block块的数据存储区写入了目标文件数据的结尾时,利用该block块的数据存储区内存储的数据,生成crc校验值,并将生成的crc校验值添加到对应block块的校验区中。
一种数据读取装置,应用于按照上述的数据存储装置存储数据的flash中,该数据读取装置包括:
文件读取指令接收单元,用于接收文件读取指令,所述文件读取指令包括待读取文件的文件名及所属目录名;
块查找单元,用于在flash中查找name目录标签的值与所述目录名相同的block块;
索引数据查找单元,用于在查找到的block块及与之具备关联关系的block块的数据存储区中,查找包含所述待读取文件的文件名的文件索引数据,其中,与查找到的block块具备关联关系的block块为依据查找到的block块的next目录标签值能够直接或间接确定的block块;
块确定单元,用于依据查找到的文件索引数据,确定与所述待读取文件的文件名对应的block块,将确定的block块确定为当前block块;
校验值生成单元,用于利用所述当前block块的数据存储区内的数据生成crc校验值;
校验值核对单元,用于判断生成的crc校验值与所述当前block块的校验区的crc校验值是否相同,若否,提示数据错误,若是,将所述当前block块的数据存储区内的数据读取出来;
标签值判断单元,用于判断所述当前block块的标签管理区内next文件标签的值是否为空值,若是,则退出,若否,则将所述当前block块的标签管理区内next文件标签的值所指示的block块确定为当前block块,返回执行所述校验值生成单元。
从上述的技术方案可以看出,本申请实施例提供的数据存储方法,应用于flash中,该flash被均匀划分为若干个具备块标识的block块,每个block块的内存包括标签管理区和数据存储区,则在响应目标文件写入指令时,在flash中查找空闲的目标block块,并从中选取一个block块,将目标文件写入该block块的数据存储区中,若检测到当前block块写满后还有剩余的目标文件数据,则从目标block块中选择下一个block块,继续写入剩余的目标文件数据,直至将目标文件数据全部写入block块为止,并且在写入目标文件的各个block块的标签管理区内添加next文件标签,next文件标签的值为各block块的下一block块的块标识,进一步在第一个写入目标文件的block块的标签管理区域添加name文件标签,name文件标签的值为目标文件的文件名。按照本申请的存储方法,将flash划分为多个block块进行管理,这样如果某一个文件在写入过程出现异常,则仅需要将与该文件名对应的block块内的数据删除,其余block块内的数据仍能够正常读取。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请实施例公开的一种数据存储方法流程图;
图2为本申请实施例公开的另一种数据存储方法流程图;
图3为本申请实施例公开的又一种数据存储方法流程图;
图4为本申请实施例公开的一种数据读取方法流程图;
图5为本申请实施例公开的一种数据存储装置结构示意图;
图6为本申请实施例公开的一种数据读取装置结构示意图。
具体实施方式
在介绍本申请方案之前,对下文将要出现的名词作解释:
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请提供了一种数据存储方法,通过本申请的方法使得文件数据在flash中按照如下格式进行存储:
本申请首先将flash划分为若干个具有块标识的block块,且每个block块的内存包括标签管理区和数据存储区。
如果一个空闲block块的数据存储区能够容下目标文件,则将目标文件写入一个block块的数据存储区,并在该block块的标签管理区添加name文件标签,该标签的值为目标文件的文件名。
如果一个空闲block块的数据存储区不能够容下目标文件,则先将第一个空闲block块的数据存储区写满,并在第一个空闲block块的标签管理区添加name文件标签和next文件标签,其中name文件标签的值为目标文件的文件名,而next文件标签的值为下一个写入剩余目标文件的空闲block块的块标识。若下一个空闲block块的数据存储区域写满后仍有剩余的目标文件,则继续选取再下一个空闲block块,按照所述下一个空闲block块的处理方式,对所述再下一个空闲block块执行相同处理,直至将目标文件全部写入到空闲的block块中为止。
接下来通过具体实施例对本申请的数据存储方法进行介绍,参见图1,图1为本申请实施例公开的一种数据存储方法流程图。
如图1所示,该方法包括:
步骤S100、响应目标文件写入指令,在flash中查找空闲的block块,确定为目标block块;
具体地,block块的大小可以人为进行调整。
步骤S110、从所述目标block块中选取一个block块,作为当前block块,在所述当前block块的标签管理区添加name文件标签,该标签的值为目标文件的文件名;
步骤S120、将所述目标文件数据写入当前block块的数据存储区中;
具体地,可以按照字节的形式逐步将目标文件数据写入当前block块中。当然,如果目标文件数据所占用的内存大于当前block块的数据存储区的内存,则仅能够写入一部分的目标文件数据。
步骤S130、判断当前block块的数据存储区是否写满,若确定当前block块的数据存储区写满,进一步执行步骤S140,若确定当前block块的数据存储区未写满,则退出;
步骤S140、判断是否还有未存储的目标文件数据,若确定不存在未存储的目标文件数据,则退出,若确定存在未存储的目标文件数据,则执行步骤S150;
步骤S150、从目标block块中选择下一block块,并在所述当前block块的标签管理区添加next文件标签,将所述下一block块的块标识作为所述当前block块的next文件标签的值;
步骤S160、确定所述下一block块为当前block块,将所述目标文件中未被存储数据写入当前block块的数据存储区,返回执行所述步骤S130。
通过上述步骤,若一个目标文件过大,则可能占用多个block块的数据存储区,同一目标文件所占用的若干个block块中仅第一个block块的标签管理区内设置name文件标签,记录目标文件的文件名。并且,按照目标文件存储顺序,同一目标文件所占用的若干个block块的标签管理区内的next文件标签的值分别是下一block块的块标识。只要确定了第一个写入目标文件的block块,即可将写入目标文件的其它几个block块找到。因此,我们可以将写入同一目标文件的若干个block块确定为与目标文件关联的block块集合,集合内各个block块具备关联关系。
本申请实施例提供的数据存储方法,应用于flash中,该flash被均匀划分为若干个具备块标识的block块,每个block块的内存包括标签管理区和数据存储区,则在响应目标文件写入指令时,在flash中查找空闲的目标block块,并从中选取一个block块,将目标文件写入该block块的数据存储区中,若检测到当前block块写满后还有剩余的目标文件数据,则从目标block块中选择下一个block块,继续写入剩余的目标文件数据,直至将目标文件数据全部写入block块为止,并且在写入目标文件的各个block块的标签管理区内添加next文件标签,next文件标签的值为各block块的下一block块的块标识,进一步在第一个写入目标文件的block块的标签管理区域添加name文件标签,name文件标签的值为目标文件的文件名。按照本申请的存储方法,将flash划分为多个block块进行管理,这样如果某一个文件在写入过程出现异常,则仅需要将与该文件名对应的block块内的数据删除,其余block块内的数据仍能够正常读取。
进一步,考虑到目标文件还可能存在与之对应的目录,则本实施例进一步将目标文件所属目录进行存储。同时在存储的目录中记录目标文件所在的block块的块标识。
参见图2,图2为本申请实施例公开的另一种数据存储方法流程图。
如图2所示,该方法包括:
步骤S200、响应目标文件写入指令,在flash中查找空闲的block块,确定为目标block块;
具体地,block块的大小可以人为进行调整。
步骤S210、从所述目标block块中选取一个block块,作为当前block块,在所述当前block块的标签管理区添加name文件标签,该标签的值为目标文件的文件名;
步骤S220、将所述目标文件数据写入当前block块的数据存储区中;
具体地,可以按照字节的形式逐步将目标文件数据写入当前block块中。当然,如果目标文件数据所占用的内存大于当前block块的数据存储区的内存,则仅能够写入一部分的目标文件数据。
步骤S230、判断当前block块的数据存储区是否写满,若确定当前block块的数据存储区写满,进一步执行步骤S240,若确定当前block块的数据存储区未写满,则执行步骤S270;
步骤S240、判断是否还有未存储的目标文件数据,若确定不存在未存储的目标文件数据,则执行步骤S270,若确定存在未存储的目标文件数据,则执行步骤S250;
步骤S250、从目标block块中选择下一block块,并在所述当前block块的标签管理区添加next文件标签,将所述下一block块的块标识作为所述当前block块的next文件标签的值;
步骤S260、确定所述下一block块为当前block块,将所述目标文件中未被存储数据写入当前block块的数据存储区,返回执行所述步骤S230;
步骤S270、从所述目标block块中选择一个空闲的block块;
步骤S280、在选择的block块的标签管理区添加name目录标签,该标签的值为目标文件所属目录的目录名;
步骤S290、在选择的block块的数据存储区写入文件索引数据。
所述文件索引数据为目标文件的文件名与第一个写入目标文件的block块的块标识之间的对应关系。
可以理解的是,上述步骤S270-S290可以在步骤S210之后的任意位置执行,图2仅仅示例了一种可选情况而已。
相比于上一实施例,本实施例中进一步将目标文件的目录进行存储,在存储目录的同时记录了文件名及该目标文件所在的第一个block块的块标识。这样,在查找目标文件时,通过在目标文件所属目录下查找目标文件对应的文件索引数据,进而找到目标文件所在的第一个block块,也就可以找到目标文件关联的block块集合,从而可以读取目标文件。
在本申请的另一个实施例中,考虑同一目录下有多个文件,并且flash中已经存储了部分文件及文件所属目录。有关文件存储方式可以参照上述实施例的介绍,此处不再详述。而对于文件所属目录的存储方式,此处进行简单介绍:
目录的存储方式与文件存储方式大致类似,区别在于对于目录而言,block块的数据存储区内存储的是该目录下各个文件的文件索引数据。block块的标签管理区内的name目录标签的值为目录名称。而如果一个目录下的所有文件索引数据已经占满一个block块的数据存储区,则继续占用下一个空闲block块的数据存储区,直至将所有文件索引数据写完为止。同时,在存储同一目录下文件索引数据的各个block块的标签管理区中,还记录有next目录标签,next目录标签的值为下一个block块的块标识,next目录标签值的概念与next文件标签值的概念类似。
接下来,参见图3,图3为本申请实施例公开的又一种数据存储方法流程图。
如图3所示,该方法包括:
步骤S300、响应目标文件写入指令,在flash中查找空闲的block块,确定为目标block块;
具体地,block块的大小可以人为进行调整。
步骤S310、从所述目标block块中选取一个block块,作为当前block块,在所述当前block块的标签管理区添加name文件标签,该标签的值为目标文件的文件名;
步骤S320、将所述目标文件数据写入当前block块的数据存储区中;
具体地,可以按照字节的形式逐步将目标文件数据写入当前block块中。当然,如果目标文件数据所占用的内存大于当前block块的数据存储区的内存,则仅能够写入一部分的目标文件数据。
步骤S330、判断当前block块的数据存储区是否写满,若确定当前block块的数据存储区写满,进一步执行步骤S340,若确定当前block块的数据存储区未写满,则执行步骤S370;
步骤S340、判断是否还有未存储的目标文件数据,若确定不存在未存储的目标文件数据,则执行步骤S370,若确定存在未存储的目标文件数据,则执行步骤S350;
步骤S350、从目标block块中选择下一block块,并在所述当前block块的标签管理区添加next文件标签,将所述下一block块的块标识作为所述当前block块的next文件标签的值;
步骤S360、确定所述下一block块为当前block块,将所述目标文件中未被存储数据写入当前block块的数据存储区,返回执行所述步骤S330;
步骤S370、在flash中查找是否存在name目录标签的值与所述目标文件所属目录的目录名相同的block块,若否,执行步骤S380-S400,若是,执行步骤S410–S440;
步骤S380、从所述目标block块中选择一个空闲的block块;
步骤S390、在选择的block块的标签管理区添加name目录标签,该标签的值为目标文件的文件名;
步骤S400、在选择的block块的数据存储区写入文件索引数据;
步骤S410、将查找到的block块作为指定block块;
步骤S420、判断所述指定block块的数据存储区是否存在空闲部分,若存在,则执行步骤S430,若不存在,则执行步骤S440;
步骤S430、将所述文件索引数据写入该空闲部分;
步骤S440、将所述指定block块的标签管理区内的next目录标签的值所指示的block块确定为指定block块,返回执行所述步骤S420。
可以理解的是,上述步骤S370-S440可以在步骤S310之后的任意位置执行,图3仅仅示例了一种可选情况而已。
相比于上一实施例,本实施例中进一步增加了步骤S370的判断过程,如果在flash中已经存在了name目录标签的值与所述目标文件的文件名相同的block块,则按照步骤S410-S440的方式进行目录添加过程。
在上述各个实施例的基础上,每个block块的内存还可以包括校验区,校验区用于存储依据block块的数据存储区所存储的数据生成的crc校验值。
则在文件数据写入的过程中,在确定一个block块的数据存储区写满时,或者一个block块的数据存储区写入了目标文件数据的结尾时,利用该block块的数据存储区内存储的数据,生成crc校验值,并将生成的crc校验值添加到对应block块的校验区中。
需要说明的是,如果一个block块存储了部分目标文件数据,但是该block块的数据存储区还有剩余空间,则当前block块不会再存储其它目标文件。利用当前block块的数据存储区内所存储的数据生成crc校验值,然后添加到当前block块的校验区中。
通过为每个存储了数据的block块添加crc校验值,使得后续读取该block块的数据时,可以对crc校验值进行核对,在核对通过后认为该block块存储的数据为正常数据,否则,认为该部分数据为异常数据。
接下来,本申请实施例还提供了一种数据读取方法,该数据读取方法应用于按照上述实施例的数据存储方式存储数据的flash中。数据读取方法的具体实施过程如图4所示,包括:
步骤S500、接收文件读取指令;
所述文件读取指令包括待读取文件的文件名及所属目录名;
步骤S510、在flash中查找name目录标签的值与所述目录名相同的block块;
步骤S520、在查找到的block块及与之具备关联关系的block块的数据存储区中,查找包含所述待读取文件的文件名的文件索引数据;
其中,与查找到的block块具备关联关系的block块为依据查找到的block块的next目录标签值能够直接或间接确定的block块;
步骤S530、依据查找到的文件索引数据,确定与所述待读取文件的文件名对应的block块,将确定的block块确定为当前block块;
步骤S540、利用所述当前block块的数据存储区内的数据生成crc校验值;
步骤S550、判断生成的crc校验值与所述当前block块的校验区的crc校验值是否相同,若否,执行步骤S560,若是,执行步骤S570;
步骤S560、提示数据错误;
步骤S570、将所述当前block块的数据存储区内的数据读取出来;
步骤S580、判断所述当前block块的标签管理区内next文件标签的值是否为空值,若是,则退出,若否,则执行步骤S590;
步骤S590、将所述当前block块的标签管理区内next文件标签的值所指示的block块确定为当前block块,返回执行所述步骤S540。
本实施例提供的数据读取方法基于上述实施例的数据存储方法,凡是按照上述实施例的数据存储方法所存储的flash,均可以使用本实施例的数据读取方法。在进行数据读取时,依据文件索引数据找到待读取文件所在的block块,进而依据block块内的数据生成crc校验值,与block块的校验区存储的crc校验值进行比对,一致时才认为该block块内的数据时正常数据,否则认为该block块内的数据为异常数据,从而避免了读取异常数据的情况。
可以理解的是,在数据存储过程生成crc校验值时所使用的算法,与数据读取过程生成crc校验值时所使用的算法是相同的。
下面对本申请实施例提供的数据存储装置进行描述,下文描述的数据存储装置与上文描述的数据存储方法可相互对应参照。
参见图5,图5为本申请实施例公开的一种数据存储装置结构示意图。
本申请的数据存储装置应用于flash中,该flash被均匀划分为若干个具备块标识的block块,每个block块的内存包括标签管理区和数据存储区,如图5所示,该装置包括:
写入指令响应单元51,用于响应目标文件写入指令,在flash中查找空闲的block块,确定为目标block块;
第一数据处理单元52,用于从所述目标block块中选取一个block块,作为当前block块,在所述当前block块的标签管理区添加name文件标签,该标签的值为目标文件的文件名;
第二数据处理单元53,用于将所述目标文件数据写入当前block块的数据存储区中;
第一判断单元54,用于判断当前block块的数据存储区是否写满,并在确定当前block块的数据存储区未写满时退出,在确定当前block块的数据存储区写满时执行第二判断单元55;
第二判断单元55,用于判断是否还有未存储的目标文件数据,在确定不存在未存储的目标文件数据时退出,在确定存在未存储的目标文件数据时执行第三数据处理单元56;
第三数据处理单元56,用于从目标block块中选择下一block块,并在所述当前block块的标签管理区添加next文件标签,将所述下一block块的块标识作为所述当前block块的next文件标签的值,确定所述下一block块为当前block块,将所述目标文件中未被存储数据写入当前block块的数据存储区,返回执行所述第一判断单元54。
可选的,目标文件还存在与之对应的目录,则该装置还可以包括:
第四数据处理单元,用于从所述目标block块中选择一个空闲的block块;
第五数据处理单元,用于在选择的block块的标签管理区添加name目录标签,该标签的值为目标文件所属目录的目录名;
第六数据处理单元,用于在选择的block块的数据存储区写入文件索引数据,所述文件索引数据为目标文件的文件名与第一个写入目标文件的block块的块标识之间的对应关系。
可选的,本申请实施例的数据存储装置还可以包括:
第三判断单元,用于在flash中查找是否存在name目录标签的值与所述目标文件所属目录的目录名相同的block块,若否,执行所述第四数据处理单元,若是,执行第七数据处理单元;
第七数据处理单元,用于将查找到的block块作为指定block块;
第四判断单元,用于判断所述指定block块的数据存储区是否存在空闲部分,若存在,则执行第八数据处理单元,若不存在,则执行第九数据处理单元;
第八数据处理单元,用于将所述文件索引数据写入该空闲部分;
第九数据处理单元,用于将所述指定block块的标签管理区内的next目录标签的值所指示的block块确定为指定block块,返回执行所述第四判断单元。
可选的,每个block块的内存还可以包括校验区,则本申请的数据存储装置还可以包括:
第十数据处理单元,用于在确定一个block块的数据存储区写满时,或者一个block块的数据存储区写入了目标文件数据的结尾时,利用该block块的数据存储区内存储的数据,生成crc校验值,并将生成的crc校验值添加到对应block块的校验区中。
按照本申请的存储装置进行数据存储,将flash划分为多个block块进行管理,这样如果某一个文件在写入过程出现异常,则仅需要将与该文件名对应的block块内的数据删除,其余block块内的数据仍能够正常读取。
下面对本申请实施例提供的数据读取装置进行描述,下文描述的数据读取装置与上文描述的数据读取方法可相互对应参照。
参见图6,图6为本申请实施例公开的一种数据读取装置结构示意图。
本实施例的数据读取装置应用于按照上述数据存储装置存储数据的flash,如图6所示,该数据读取装置包括:
文件读取指令接收单元61,用于接收文件读取指令,所述文件读取指令包括待读取文件的文件名及所属目录名;
块查找单元62,用于在flash中查找name目录标签的值与所述目录名相同的block块;
索引数据查找单元63,用于在查找到的block块及与之具备关联关系的block块的数据存储区中,查找包含所述待读取文件的文件名的文件索引数据,其中,与查找到的block块具备关联关系的block块为依据查找到的block块的next目录标签值能够直接或间接确定的block块;
块确定单元64,用于依据查找到的文件索引数据,确定与所述待读取文件的文件名对应的block块,将确定的block块确定为当前block块;
校验值生成单元65,用于利用所述当前block块的数据存储区内的数据生成crc校验值;
校验值核对单元66,用于判断生成的crc校验值与所述当前block块的校验区的crc校验值是否相同,若否,提示数据错误,若是,将所述当前block块的数据存储区内的数据读取出来;
标签值判断单元67,用于判断所述当前block块的标签管理区内next文件标签的值是否为空值,若是,则退出,若否,则将所述当前block块的标签管理区内next文件标签的值所指示的block块确定为当前block块,返回执行所述校验值生成单元65。
本实施例提供的数据读取装置,在进行数据读取时,依据文件索引数据找到待读取文件所在的block块,进而依据block块内的数据生成crc校验值,与block块的校验区存储的crc校验值进行比对,一致时才认为该block块内的数据时正常数据,否则认为该block块内的数据为异常数据,从而避免了读取异常数据的情况。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种数据存储方法,其特征在于,应用于flash中,该flash被均匀划分为若干个具备块标识的block块,每个block块的内存包括标签管理区和数据存储区,该方法包括:
响应目标文件写入指令,在flash中查找空闲的block块,确定为目标block块;
从所述目标block块中选取一个block块,作为当前block块,在所述当前block块的标签管理区添加name文件标签,该标签的值为目标文件的文件名;
将所述目标文件数据写入当前block块的数据存储区中;
判断当前block块的数据存储区是否写满;
若确定当前block块的数据存储区写满,进一步判断是否还有未存储的目标文件数据;
若确定当前block块的数据存储区未写满,则退出;
若确定不存在未存储的目标文件数据,则退出;
若确定存在未存储的目标文件数据,则从目标block块中选择下一block块,并在所述当前block块的标签管理区添加next文件标签,将所述下一block块的块标识作为所述当前block块的next文件标签的值,确定所述下一block块为当前block块,将所述目标文件中未被存储数据写入当前block块的数据存储区,返回执行所述判断当前block块的数据存储区是否写满的步骤。
2.根据权利要求1所述的方法,其特征在于,目标文件还存在与之对应的目录,则该方法还包括:
从所述目标block块中选择一个空闲的block块;
在选择的block块的标签管理区添加name目录标签,该标签的值为目标文件所属目录的目录名;
在选择的block块的数据存储区写入文件索引数据,所述文件索引数据为目标文件的文件名与第一个写入目标文件的block块的块标识之间的对应关系。
3.根据权利要求2所述的方法,其特征在于,在所述从所述目标block块中选择一个空闲的block块之前,该方法还包括:
在flash中查找是否存在name目录标签的值与所述目标文件所属目录的目录名相同的block块;
若否,执行所述从所述目标block块中选择一个空闲的block块的步骤;
若是,将查找到的block块作为指定block块;
判断所述指定block块的数据存储区是否存在空闲部分;
若存在,则将所述文件索引数据写入该空闲部分;
若不存在,则将所述指定block块的标签管理区内的next目录标签的值所指示的block块确定为指定block块,返回执行所述判断所述指定block块的数据存储区是否存在空闲部分的步骤。
4.根据权利要求3所述的方法,其特征在于,每个block块的内存还包括校验区,该方法还包括:
在确定一个block块的数据存储区写满时,或者一个block块的数据存储区写入了目标文件数据的结尾时,利用该block块的数据存储区内存储的数据,生成crc校验值,并将生成的crc校验值添加到对应block块的校验区中。
5.一种数据读取方法,其特征在于,应用于按照上述权利要求4的数据存储方法存储数据的flash中,该方法包括:
接收文件读取指令,所述文件读取指令包括待读取文件的文件名及所属目录名;
在flash中查找name目录标签的值与所述目录名相同的block块;
在查找到的block块及与之具备关联关系的block块的数据存储区中,查找包含所述待读取文件的文件名的文件索引数据,其中,与查找到的block块具备关联关系的block块为依据查找到的block块的next目录标签值能够直接或间接确定的block块;
依据查找到的文件索引数据,确定与所述待读取文件的文件名对应的block块,将确定的block块确定为当前block块;
利用所述当前block块的数据存储区内的数据生成crc校验值;
判断生成的crc校验值与所述当前block块的校验区的crc校验值是否相同;
若否,提示数据错误;
若是,将所述当前block块的数据存储区内的数据读取出来;
判断所述当前block块的标签管理区内next文件标签的值是否为空值;
若是,则退出;
若否,则将所述当前block块的标签管理区内next文件标签的值所指示的block块确定为当前block块,返回执行所述利用所述当前block块的数据存储区内的数据生成crc校验值的步骤。
6.一种数据存储装置,其特征在于,应用于flash中,该flash被均匀划分为若干个具备块标识的block块,每个block块的内存包括标签管理区和数据存储区,该方装置包括:
写入指令响应单元,用于响应目标文件写入指令,在flash中查找空闲的block块,确定为目标block块;
第一数据处理单元,用于从所述目标block块中选取一个block块,作为当前block块,在所述当前block块的标签管理区添加name文件标签,该标签的值为目标文件的文件名;
第二数据处理单元,用于将所述目标文件数据写入当前block块的数据存储区中;
第一判断单元,用于判断当前block块的数据存储区是否写满,并在确定当前block块的数据存储区未写满时退出,在确定当前block块的数据存储区写满时执行第二判断单元;
第二判断单元,用于判断是否还有未存储的目标文件数据,在确定不存在未存储的目标文件数据时退出,在确定存在未存储的目标文件数据时执行第三数据处理单元;
第三数据处理单元,用于从目标block块中选择下一block块,并在所述当前block块的标签管理区添加next文件标签,将所述下一block块的块标识作为所述当前block块的next文件标签的值,确定所述下一block块为当前block块,将所述目标文件中未被存储数据写入当前block块的数据存储区,返回执行所述第一判断单元。
7.根据权利要求6所述的装置,其特征在于,目标文件还存在与之对应的目录,则该装置还包括:
第四数据处理单元,用于从所述目标block块中选择一个空闲的block块;
第五数据处理单元,用于在选择的block块的标签管理区添加name目录标签,该标签的值为目标文件所属目录的目录名;
第六数据处理单元,用于在选择的block块的数据存储区写入文件索引数据,所述文件索引数据为目标文件的文件名与第一个写入目标文件的block块的块标识之间的对应关系。
8.根据权利要求7所述的装置,其特征在于,还包括:
第三判断单元,用于在flash中查找是否存在name目录标签的值与所述目标文件所述目录的目录名相同的block块,若否,执行所述第四数据处理单元,若是,执行第七数据处理单元;
第七数据处理单元,用于将查找到的block块作为指定block块;
第四判断单元,用于判断所述指定block块的数据存储区是否存在空闲部分,若存在,则执行第八数据处理单元,若不存在,则执行第九数据处理单元;
第八数据处理单元,用于将所述文件索引数据写入该空闲部分;
第九数据处理单元,用于将所述指定block块的标签管理区内的next目录标签的值所指示的block块确定为指定block块,返回执行所述第四判断单元。
9.根据权利要求8所述的装置,其特征在于,每个block块的内存还包括校验区,该装置还包括:
第十数据处理单元,用于在确定一个block块的数据存储区写满时,或者一个block块的数据存储区写入了目标文件数据的结尾时,利用该block块的数据存储区内存储的数据,生成crc校验值,并将生成的crc校验值添加到对应block块的校验区中。
10.一种数据读取装置,其特征在于,应用于按照上述权利要求9的数据存储装置存储数据的flash中,该数据读取装置包括:
文件读取指令接收单元,用于接收文件读取指令,所述文件读取指令包括待读取文件的文件名及所属目录名;
块查找单元,用于在flash中查找name目录标签的值与所述目录名相同的block块;
索引数据查找单元,用于在查找到的block块及与之具备关联关系的block块的数据存储区中,查找包含所述待读取文件的文件名的文件索引数据,其中,与查找到的block块具备关联关系的block块为依据查找到的block块的next目录标签值能够直接或间接确定的block块;
块确定单元,用于依据查找到的文件索引数据,确定与所述待读取文件的文件名对应的block块,将确定的block块确定为当前block块;
校验值生成单元,用于利用所述当前block块的数据存储区内的数据生成crc校验值;
校验值核对单元,用于判断生成的crc校验值与所述当前block块的校验区的crc校验值是否相同,若否,提示数据错误,若是,将所述当前block块的数据存储区内的数据读取出来;
标签值判断单元,用于判断所述当前block块的标签管理区内next文件标签的值是否为空值,若是,则退出,若否,则将所述当前block块的标签管理区内next文件标签的值所指示的block块确定为当前block块,返回执行所述校验值生成单元。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510546432.7A CN105138655A (zh) | 2015-08-31 | 2015-08-31 | 一种数据存储、读取方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510546432.7A CN105138655A (zh) | 2015-08-31 | 2015-08-31 | 一种数据存储、读取方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105138655A true CN105138655A (zh) | 2015-12-09 |
Family
ID=54724003
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510546432.7A Pending CN105138655A (zh) | 2015-08-31 | 2015-08-31 | 一种数据存储、读取方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105138655A (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106020837A (zh) * | 2016-05-27 | 2016-10-12 | 深圳创维数字技术有限公司 | 一种加载机顶盒驱动的方法及系统 |
CN108228095A (zh) * | 2017-12-15 | 2018-06-29 | 中国航空工业集团公司西安飞行自动控制研究所 | 一种基于Flash进行实时信息记录的方法 |
CN108958660A (zh) * | 2018-07-02 | 2018-12-07 | 深圳市茁壮网络股份有限公司 | 分布式存储系统及其数据处理方法和装置 |
CN109284621A (zh) * | 2017-07-19 | 2019-01-29 | 阿里巴巴集团控股有限公司 | 数据保护/恢复方法和装置以及数据存储/保护方法 |
CN110045927A (zh) * | 2019-04-16 | 2019-07-23 | 华大半导体有限公司 | 一种使用闪存模拟具有原子操作特性的eeprom的方法 |
WO2019149261A1 (zh) * | 2018-02-01 | 2019-08-08 | 中兴通讯股份有限公司 | 分布式文件系统的文件存储方法及分布式文件系统 |
CN110888596A (zh) * | 2019-06-25 | 2020-03-17 | 北京华虹集成电路设计有限责任公司 | 一种Flash存储区域的文件擦写方法及装置 |
CN114327246A (zh) * | 2020-10-12 | 2022-04-12 | 深圳市爱图仕影像器材有限公司 | 存储介质内数据存储方法、存储介质及计算机设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1570879A (zh) * | 2003-07-25 | 2005-01-26 | 华为技术有限公司 | 一种存储异常信息的方法 |
CN102103597A (zh) * | 2009-12-17 | 2011-06-22 | 上海威乾视频技术有限公司 | Dsp嵌入式flash文件存储系统 |
CN104050251A (zh) * | 2014-06-11 | 2014-09-17 | 深圳市茁壮网络股份有限公司 | 一种文件管理方法及管理系统 |
-
2015
- 2015-08-31 CN CN201510546432.7A patent/CN105138655A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1570879A (zh) * | 2003-07-25 | 2005-01-26 | 华为技术有限公司 | 一种存储异常信息的方法 |
CN102103597A (zh) * | 2009-12-17 | 2011-06-22 | 上海威乾视频技术有限公司 | Dsp嵌入式flash文件存储系统 |
CN104050251A (zh) * | 2014-06-11 | 2014-09-17 | 深圳市茁壮网络股份有限公司 | 一种文件管理方法及管理系统 |
Non-Patent Citations (1)
Title |
---|
唐跃平等: "《科技信息云服务及军事应用》", 31 January 2015, 国防工业出版社 * |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106020837A (zh) * | 2016-05-27 | 2016-10-12 | 深圳创维数字技术有限公司 | 一种加载机顶盒驱动的方法及系统 |
CN109284621A (zh) * | 2017-07-19 | 2019-01-29 | 阿里巴巴集团控股有限公司 | 数据保护/恢复方法和装置以及数据存储/保护方法 |
CN108228095A (zh) * | 2017-12-15 | 2018-06-29 | 中国航空工业集团公司西安飞行自动控制研究所 | 一种基于Flash进行实时信息记录的方法 |
CN108228095B (zh) * | 2017-12-15 | 2021-02-09 | 中国航空工业集团公司西安飞行自动控制研究所 | 一种基于Flash进行实时信息记录的方法 |
WO2019149261A1 (zh) * | 2018-02-01 | 2019-08-08 | 中兴通讯股份有限公司 | 分布式文件系统的文件存储方法及分布式文件系统 |
CN110109886A (zh) * | 2018-02-01 | 2019-08-09 | 中兴通讯股份有限公司 | 分布式文件系统的文件存储方法及分布式文件系统 |
CN108958660A (zh) * | 2018-07-02 | 2018-12-07 | 深圳市茁壮网络股份有限公司 | 分布式存储系统及其数据处理方法和装置 |
CN110045927A (zh) * | 2019-04-16 | 2019-07-23 | 华大半导体有限公司 | 一种使用闪存模拟具有原子操作特性的eeprom的方法 |
CN110888596A (zh) * | 2019-06-25 | 2020-03-17 | 北京华虹集成电路设计有限责任公司 | 一种Flash存储区域的文件擦写方法及装置 |
CN114327246A (zh) * | 2020-10-12 | 2022-04-12 | 深圳市爱图仕影像器材有限公司 | 存储介质内数据存储方法、存储介质及计算机设备 |
CN114327246B (zh) * | 2020-10-12 | 2024-02-27 | 深圳爱图仕创新科技股份有限公司 | 存储介质内数据存储方法、存储介质及计算机设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105138655A (zh) | 一种数据存储、读取方法及装置 | |
US9292217B2 (en) | Logical volume space sharing | |
KR100862584B1 (ko) | 기억장치 | |
US8935541B2 (en) | Method and apparatus for encrypting and processing data in flash translation layer | |
CN106874348B (zh) | 文件存储和索引方法、装置及读取文件的方法 | |
CN106462500A (zh) | 用于执行损耗均衡操作的设备及方法 | |
US11176110B2 (en) | Data updating method and device for a distributed database system | |
CN106021014B (zh) | 一种内存管理方法及装置 | |
CN105975878B (zh) | 基于Nand Flash闪存的安全存储方法及系统 | |
CN104216796B (zh) | 一种数据备份、恢复方法及电子设备 | |
CN104008780A (zh) | 存储单元的修复方法和装置 | |
CN104238962A (zh) | 向缓存中写入数据的方法及装置 | |
CN110874358B (zh) | 多属性列的存储、检索方法和装置以及电子设备 | |
CN109496292A (zh) | 一种磁盘管理方法、磁盘管理装置及电子设备 | |
CN102959548A (zh) | 数据存储方法、查找方法及装置 | |
CN104932830B (zh) | 信息处理方法及电子设备 | |
JPH08129551A (ja) | ハッシュ方式 | |
CN106484691A (zh) | 移动终端的数据存储方法和装置 | |
CN107911541A (zh) | 一种基于Android系统的多摄像头切换使用方法和装置 | |
CN115883172A (zh) | 异常监测方法、装置、计算机设备和存储介质 | |
KR20030042013A (ko) | 메모리 장치에서의 데이터 관리 방법 | |
CN105830067A (zh) | 一种文件信息处理方法、装置及文件处理设备、系统 | |
CN113688410A (zh) | 一种数据检索方法、装置、fpga及介质 | |
CN107526814A (zh) | 移动终端文件存储方法及装置 | |
CN104021142B (zh) | 防篡改系统网页文件指纹的存储和查询方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20151209 |
|
RJ01 | Rejection of invention patent application after publication |