一种文件索引存储方法及装置制造方法

文档序号:6508861阅读:350来源:国知局
一种文件索引存储方法及装置制造方法
【专利摘要】本发明涉及一种文件索引存储方法,包括以下步骤:当接收到一文件待存储的数据块索引时,判断该文件对应的索引主记录是否关联有扩展记录;当判断该索引主记录未关联有扩展记录时,若该索引主记录的数据段长度达到预设阈值,则创建若干个与该索引主记录关联的扩展记录;将该数据段中已存储的数据块索引与所述待存储的数据块索引存入相应的扩展记录。本发明还提供一种文件索引存储装置。利用本发明可以提高文件索引的存储效率及访问性能。
【专利说明】一种文件索弓I存储方法及装置

【技术领域】
[0001]本发明具体实施例涉及数据存储【技术领域】,特别涉及一种文件索引存储方法及装置。

【背景技术】
[0002]分布式文件系统提供的文件概念,通常是多个数据块的组合。一个文件的文件索引即包括这些数据块的索引。根据文件索引可以读取该文件的相应数据块中的数据。因此,文件的数据读写都需要维护文件索引和实际数据的一致性。在互联网应用中,随着带宽、屏幕分辨率的提高,输出设备和输送管道等逐渐不再成为超清视频点播、大文件传输等类似应用的瓶颈。但大文件涉及的数据块较多,使得文件索引急剧膨胀。因此,如何有效地存储文件索引,提升文件索引的访问性能,成为大文件类应用设计重点需要考虑的问题。


【发明内容】

[0003]有鉴于此,有必要提供一种文件索引存储方法及装置,可以提高文件索引的存储效率及访问性能。
[0004]一种文件索引存储方法,包括以下步骤:当接收到一文件待存储的数据块索引时,判断该文件对应的索引主记录是否关联有扩展记录;当判断该索引主记录未关联有扩展记录时,若该索引主记录的数据段长度达到预设阈值,则创建若干个与该索引主记录关联的扩展记录;将该数据段中已存储的数据块索引与所述待存储的数据块索引存入相应的扩展记录。
[0005]一种文件索引存储装置,包括:第一判断模块,用于当接收到一文件待存储的数据块索引时,判断该文件对应的索引主记录是否关联有扩展记录;第一存储模块,用于当判断该索引主记录未关联有扩展记录时,若该索引主记录的数据段长度达到预设阈值,则创建若干个与该索引主记录关联的扩展记录;所述第一存储模块,还用于将该数据段中已存储的数据块索引与所述待存储的数据块索引存入相应的扩展记录。
[0006]相较于现有技术,本发明文件索引存储方法及装置,在文件的索引主记录中用于存储数据块索引的数据段长度达到预设阈值的情况下,将该数据段中的所有数据块索引拆分成与该索引主记录关联的若干个扩展记录进行存储,从而可以提高文件索引的存储效率,以及提升文件索引的访问性能。
[0007]为让本发明的上述和其他目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附图式,作详细说明如下。

【专利附图】

【附图说明】
[0008]图1为一种终端的结构框图。
[0009]图2为本发明第一实施例提供的文件索引存储方法的流程图。
[0010]图3为文件对应的数据的写入方法流程图。
[0011]图4为在索引主记录的数据段中存储数据块索引的示意图。
[0012]图5为创建与索引主记录关联的扩展记录的方法流程图。
[0013]图6为在扩展记录中存储数据块索引的示意图。
[0014]图7为本发明第二实施例提供的文件索引存储方法的流程图。
[0015]图8为在数据段中存储对应于文件空洞的数据块索引的示意图。
[0016]图9为在扩展记录中存储对应于文件空洞的数据块索引的示意图。
[0017]图10为本发明第三实施例提供的文件索引存储方法的流程图。
[0018]图11为本发明第四实施例提供的文件索引存储装置的框图。
[0019]图12为本发明第五实施例提供的文件索引存储装置的框图。
[0020]图13为本发明第六实施例提供的文件索引存储装置的框图。

【具体实施方式】
[0021]为更进一步阐述本发明为实现预定发明目的所采取的技术手段及功效,以下结合附图及较佳实施例,对依据本发明的【具体实施方式】、结构、特征及其功效,详细说明如后。
[0022]图1示出了一种终端的结构框图。如图1所示,终端I包括一个或多个(图中仅示出一个)存储器11、处理器12、存储控制器13、外设接口 14、通信模块15、输入单元16及显示单元17。这些组件通过一条或多条通讯总线/信号线相互通讯。
[0023]本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对终端I的结构造成限定。例如,终端I还可包括比图1所示更多或者更少的组件,或者具有与图1所示不同的配置。图1所示的各组件可以采用硬件、软件或其组合实现。
[0024]存储器11可用于存储软件程序以及模块,如本发明实施例中的文件索引存储方法及装置对应的程序指令/模块,处理器12通过运行存储在存储器11内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的文件索引存储方法。
[0025]存储器11可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器11可进一步包括相对于处理器12远程设置的存储器,这些远程设置的存储器可以通过网络连接至终端I。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。处理器12以及其他可能的组件对存储器11的访问可在存储控制器13的控制下进行。
[0026]外设接口 14将各种输入/输出装置耦合至处理器12以及存储器11。处理器12运行存储器11内的各种软件、指令以及执行终端I的各种功能以及进行数据处理。
[0027]通信模块15用于与通信网络或者其他设备进行通信。具体地,通信模块15例如可以是网卡151或RF (Rad1 Frequency,射频)模块152。网卡151作为局域网中连接计算机和传输介质的接口,用于实现与局域网传输介质之间的物理连接与电信号匹配,从而建立局域网并连接到因特网(Internet),与各种网络如局域网、城域网、广域网进行通信。网卡151可包括各种现有的用于执行上述功能的电路元件,例如处理器和存储器(包括ROM和RAM)等。RF模块152用于接收以及发送电磁波,实现电磁波与电信号的相互转换,从而与通信网络或者其他设备进行通信。RF模块152可包括各种现有的用于执行这些功能的电路元件,例如,天线、射频收发器、数字信号处理器、加密/解密芯片、用户身份模块(SM)卡、存储器等等。RF模块152可与各种网络如互联网、企业内部网、无线网络进行通信或者通过无线网络与其他设备进行通信。上述的无线网络可包括蜂窝式电话网、无线局域网或者城域网。上述的无线网络可以使用各种通信标准、协议及技术,包括但并不限于全球移动通信系统(Global System for Mobile Communicat1n, GSM)、增强型移动通信技术(Enhanced Data GSM Environment, EDGE),宽带码分多址技术(wideband codedivis1n multiple access, W-CDMA),码分多址技术(Code divis1n access, CDMA)、时分多址技术(time divis1n multiple access, TDMA),无线保真技术(Wireless, Fidelity,WiFi)(如美国电气和电子工程师协会标准IEEE802.11a, IEEE802.lib, IEEE802.1lg和/或 IEEE802.lln)、网络电话(Voice over internet protocal, VoIP)、全球微波互联接入(Worldwide Interoperability for Microwave Access,W1-Max)、其他用于邮件、即时通信及短消息的协议,以及任何其他合适的通信协议,甚至可包括那些当前仍未被开发出来的协议。
[0028]输入单元16可用于接收输入的字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。具体地,输入单元16可包括按键161以及触控表面162。按键161例如可包括用于输入字符的字符按键,以及用于触发控制功能的控制按键。控制按键的实例包括“返回主屏”按键、开机/关机按键、拍照键等等。触控表面162可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控表面162上或在触控表面162附近的操作),并根据预先设定的程序驱动相应的连接装置。可选的,触控表面162可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器12,并能接收处理器12发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触控表面162。除了触控表面162,输入单元16还可以包括其他输入设备。上述的其他输入设备包括但不限于物理键盘、轨迹球、鼠标、操作杆等中的一种或多种。
[0029]显示单元17用于显示由用户输入的信息、提供给用户的信息以及终端I的各种图形接口。这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。在一个实例中,显示单元17包括一个显示面板171。该显示面板171例如可为一个液晶显示面板(Liquid Crystal Display, LCD)、有机发光二极管(Organic Light-Emitting D1deDisplay, OLED)显不面板、电泳显不面板(Electro-Phoretic Display, EPD)等。进一步地,触控表面162可设置于显示面板171上从而与显示面板171构成一个整体。
[0030]第一实施例
[0031]参阅图2所示,本发明第一实施例提供一种文件索引存储方法,其可以由上述终端I执行。该终端I的具体实例包括但并不限于台式计算机、便携式计算机、智能手机、平板电脑或者其他类似的运算装置。在本实施例中,该文件索引存储方法包括以下步骤:
[0032]步骤SI,当接收到一文件待存储的数据块索引时,判断该文件对应的索引主记录是否关联有扩展记录,若否,则执行步骤S2,若是,则执行步骤S5 ;
[0033]步骤S2,判断该索引主记录的数据段长度是否达到预设阈值,若是,则执行步骤S3,若否,则执行步骤S4 ;
[0034]步骤S3,创建若干个与该索引主记录关联的扩展记录,并将该数据段中已存储的的数据块索引与所述待存储的数据块索引存入相应的扩展记录;
[0035]步骤S4,将该待存储的数据块索引存入索引主记录的该数据段中;
[0036]步骤S5,将该待存储的数据块索引存入相应的扩展记录中。
[0037]按照上述的文件索引存储方法,在文件的索引主记录中用于存储数据块索引的数据段长度达到预设阈值的情况下,将该数据段中的所有数据块索引信息拆分成与该索引主记录关联的若干个扩展记录进行存储,从而可以提高文件索引的存储效率,以及提升文件索引的访问性能。
[0038]在一些实例中,上述方法的各步骤的实现细节如下:
[0039]步骤SI所述的文件为正在写入所述存储器11的文件,该文件可以为各种类型,例如视频、文档、图片、程序等。在本实施例中,将该文件写入存储器11的过程包括:将该文件对应的数据写入存储器11,及在存储器11中为该文件建立文件索引。该文件索引用于在存储器11中定位到该文件。
[0040]具体而言,参阅图3所示,所述将该文件对应的数据写入存储器11的过程可以由现有的数据存储引擎,例如NoSQL (非关系型数据库)存储引擎,通过以下步骤实现:
[0041]步骤a,当接收到该文件的写入请求时,获取该文件待写入数据的长度。所述文件的写入请求例如可以在通过所述通信模块15从互联网上下载该文件时发出,也可以在通过所述输入单元16接收用户对该文件的创建及修改操作时发出,还可以在终端I中某一程序,例如摄像程序运行并产生该文件时发出,等等。
[0042]步骤b,根据针对该文件预先设定的数据块的指定数据长度,以及所获取的该文件待写入数据的长度,在存储器11中的数据存储单元中为该文件分配若干个数据块。所述数据块的指定数据长度是指该数据块可容纳的最大数据长度,该数据块的指定数据长度可以在首次接收到该文件的写入请求,从而在该数据存储单元中创建该文件时设定。所述数据存储单元是指专门用于存储文件对应的数据的存储区域。该数据存储单元可以以数据库的形式存在。
[0043]步骤C,将该文件待写入数据依次写入所分配的数据块中。若所分配的数据块的指定数据长度之和大于该文件待写入数据的长度,则所分配的数据块中可能有若干个数据块未被该文件待写入数据填满。
[0044]步骤d,返回所分配的各个数据块对应的数据块索引及该文件的标识信息。每个数据块索引具有固定长度。该数据块索引包括对应数据块的ID及该数据块的有效数据长度。该数据块的有效数据长度是指该数据块中实际存储数据的长度。该文件的标识信息例如包括该文件的名称、ID等。该文件的标识信息可以在接收该文件的写入请求时获得。
[0045]而所述在存储器11中为该文件建立文件索引的过程可由本实施例提供的文件索弓I存储方法来实现。由于该文件对应的数据被存储在若干个数据块中,因此该文件索引即包括各数据块索引。该数据块索引可以根据数量被存储在该文件对应的索引主记录的数据段中,或被存储在与该索引主记录关联的扩展记录中。该索引主记录及扩展记录可以被存储在存储器11中的索引存储单元中。相对于所述数据存储单元,该索引存储单元专门用于存储各文件的文件索引。
[0046]在本实施例中,每当所述数据存储引擎返回一条数据块索引及文件的标识信息时,即执行所述步骤SI。数据存储引擎所返回的该数据块索引即为待存储的数据块索引信息。该待存储的数据块索引对应该文件末尾的数据。因此,步骤SI接收到该文件的标识信息及该数据块索引后,可以根据该文件的标识信息在所述索引存储单元中找到该文件对应的索引主记录。
[0047]在一个实例中,该索引主记录包括头部和数据段。其中该头部具有固定长度,而该数据段可变长。该头部包括文件元信息、结构标志和数据段长度信息。该文件元信息例如包括该文件的标识信息、该文件的创建时间和修改时间、该文件的总长度、对应数据块的指定数据长度等。该结构标志指示该索引主记录是否关联有扩展记录。该数据段长度信息指示索引主记录的数据段长度。
[0048]因此,步骤SI可以先从该索引主记录的头部中读取该结构标志,然后根据该结构标志判断该索引主记录是否关联有扩展记录。若该索引主记录关联有扩展记录,则所关联的该扩展记录的ID,例如UUID (Universally Unique Identifier,通用唯一识别码)被记录在该索引主记录的数据段中。该扩展记录的ID具有唯一性。
[0049]步骤S2中,若该索引主记录未关联有扩展记录,则该索引主记录的该数据段用于以数组形式存储该文件的数据块索引,如图4所示。随着该文件的增大,组成该文件的数据块越来越多,该文件的数据块索引也越来越多,造成该索引主记录的数据段越来越长。这种情况会造成从该数据段中拉取数据块索引所需的时间呈线性增长的趋势,因而该数据段过长会直接影响到数据块索引的访问效率。
[0050]因此,步骤S2需要进一步判断该索引主记录的数据段长度是否达到预设阈值。具体地,步骤S2可以从该索引主记录的头部中读取该数据段长度信息,并根据该数据段长度信息判断该数据段长度是否达到该预设阈值。在一个实例中,该预设阈值可以为所述数据块索引的固定长度的整数倍。若该数据段长度未达到该预设阈值,则该数据段至少还可以存入一条数据块索引,并且对数据块索引的访问效率影响较小。若该数据段长度达到该预设阈值,则就算再向该数据段存入一条数据块索引,对数据块索引的访问效率影响都较大。
[0051]步骤S3中,若该数据段的长度达到该预设阈值,为了提高数据块索引的访问效率,可以以二级索引的方式存储数据块索引。具体地,参阅图5所示,步骤S3包括以下步骤:
[0052]步骤S3.1,创建若干个扩展记录,并分别为每个扩展记录分配一个ID。所创建的扩展记录都以数组的形式被存储在索引存储单元中。每个扩展记录都用于存储指定数量的数据块索引。该指定数量可以记录在索引主记录的头部中。由于每条数据块索引具有固定长度,因此每个扩展记录也具有固定长度。该数据块索引的固定长度也可以记录在索引主记录的头部中。该扩展记录的创建数量需要根据数据段中已存储的数据块索引的数量以及所述待存储的数据块索引确定。例如,若每个扩展记录用于存储3条数据块索引,而目前数据段中已存储的数据块索引为9条,加上该待存储的数据块索引,则需要创建4个扩展记录。
[0053]步骤S3.2,将所创建的各扩展记录的ID记录在所述索引主记录的数据段中,从而将各扩展记录与索引主记录关联起来。
[0054]步骤S3.3,将该结构标志更新为指示索引主记录关联有扩展记录。
[0055]步骤S3.4,将该数据段中已存储的数据块索引转移到相应的扩展记录中,并将所述待存储的数据块索引也存入相应的扩展记录。数据块索引在各扩展记录中依然以数组形式存储。具体而言,由于每个扩展记录可以存储指定数量的数据块索引,可以将该待存储的数据块索引排在数据段中已存储的数据块索引的顺序之后。然后按顺序将数据段中已存储的数据块索引及待存储的数据块索引逐一写入所创建的各个扩展记录。
[0056]例如,若每个扩展记录可以存储3条数据块索引,而目前数据段中已存储了 9条数据块索引,则需要先创建4个扩展记录。然后,按照顺序将数据段中已存储的第一条至第三条数据块索引转移到所创建的第一个扩展记录,将已存储的第四条至第六条数据块索引转移到所创建的第二个扩展记录,依此类推,最后将待存储的数据块索引写入第四个扩展记录,如图6所示。
[0057]值得注意的是,由于每个扩展记录的长度也要固定,因此,若最后一个扩展记录中数据块索引的数量不足,则先将该扩展记录中未存有数据块索引的字节都填上O。待要继续存入数据块索引时,再将最后一个扩展记录中相应存储区域的字节O替换为该待存储的数据块索引。延续上一个例子,第四个扩展记录中仅有一条数据块索引,则将第四个扩展记录中用于存储另外两条数据块索引的存储区域的字节都填O。若后续又需要存储一条数据块索引,则按照顺序将相应存储区域的字节O替换为该数据块索引,而在第四个扩展记录中还剩余一个数据块索引的长度的存储区域对应的字节为O。
[0058]步骤S4中,若该数据段的长度未达到该预设阈值,则仍然将该待存储的数据块索引以数组形式存入该数据段中。值得注意的是,在将待存储的数据块索引存入该数据段中后,还需要更新该头部中的数据段长度信息,以便后续判断该数据段长度是否达到所述预设阈值。
[0059]步骤S5中,若该索引主记录已关联有扩展记录,则将该待存储的数据块索引存入相应的扩展记录中。具体而言,先判断扩展记录数组中最后一个扩展记录存储的数据块索引是否达到所述的指定数量。若该最后一个扩展记录存储的数据块索引达到该指定数量,则需要再创建一个与该索引主记录关联的扩展记录,即将所创建的扩展记录的ID记录在该数据段中,并将该待存储的数据块索引存入所创建的该扩展记录。若该最后一个扩展记录存储的数据块索引未达到该指定数量,则将该待存储的数据块索引存入该最后一个扩展记录。
[0060]通过上述过程在索引存储单元中为该文件建立的文件索弓丨,便于高效地定位到该文件的任意一个数据块索引。例如,已知某一目标数据块在该文件中的偏移量为Fileoffset,而数据块的指定数据长度为BlockSize,每个数据块索引的长度为indexSize,每个扩展记录用于存储数据块索引的数量为indexCount,FINT为取整操作。其中,BlockSize、indexSize 和 indexCount 分别为固定值。
[0061]当需要定位该目标数据块对应的目标数据块索引时,先根据索引主记录的头部中的结构标志判断该索引主记录是否关联有扩展记录,即该文件是大文件还是小文件。若该文件关联有扩展记录,则该文件被定义为大文件。若该文件未关联有扩展记录,则该文件被定义为小文件。
[0062]若该文件未关联有扩展记录,则可以通过以下公式定位该目标数据块索引:
[0063]目标数据块索引在索引主记录的数据段中的偏移量
[0064]=(FINT(Fileoffset/BlockSize))*Indexsize。
[0065]若该文件关联有扩展记录,则先根据以下公式定位该目标数据块索引所在扩展记录的序号:
[0066]扩展记录序号=FINT(Fileoffset/(BlockSize*IndexCount));
[0067]然后再根据以下公式在所定位的扩展记录中定位该目标数据块索引:
[0068]目标数据块在该扩展记录中的偏移量
[0069]= (Fileoffset-扩展记录序号 * (BlockSize*IndexCount)) /Indexsize0
[0070]综上所述,使用本实施例的文件索引存储方法存储文件的数据块索引后,在小文件情况下,只需要读取一次索引主记录就能定位到数据块索引,并且读取性能较佳。在大文件情况下,读取一次索引主记录定位到扩展记录后,再读取一次该扩展记录从而定位到数据块索引,而不需要读取全部扩展记录。此外,由于通常可以缓存部分索引历史记录。因此,在一定时间内,由于文件的索引主记录是热数据,无需重复拉取,而扩展记录可以按需缓存和按需读取,使得整体的文件索引的访问性能提升。
[0071]第二实施例
[0072]在文件存储的过程中,通常会出现文件空洞的情况。该文件空洞是指由于设定的文件偏移量大于文件的当前长度,从而使对该文件的下一次写操作在文件中构成的空洞。而位于文件中但没有被实际写入该文件的所有字节,即该空洞对应的字节都设定为重复的O。如果该文件的某个数据块范围内均为空洞,则数据存储引擎不为该空洞分配数据块以节省存储空间。
[0073]针对这一情况,参阅图7所示,本发明第二实施例提供一种文件索引存储方法,其相较于本发明第一实施例的文件索引存储方法,所述步骤S3、步骤S4或步骤S5中,将该待存储的数据块索引存入数据段或相应的扩展记录的步骤还包括:
[0074]步骤S21,若该待存储的数据块索引对应该文件的空洞,例如数据存储引擎返回的该数据块索引信息为空值,则在该数据段或相应的扩展记录中将该待存储的数据块索引的字节设为0,即将该待存储的数据块索引对应存储区域的字节设为O。参阅图8和图9所示,图8为在数据段中存储对应于文件空洞的数据块索引的示意图。图9为在扩展记录中存储对应于文件空洞的数据块索引的示意图。
[0075]考虑到定位数据段中存储的最后一个数据块索引的情况,由于数据段是根据所存储的数据块索引的数量而变长的,因此若数据段中最后一个数据块索引的字节为0,则该最后一个数据块索引对应于该文件的一个空洞。
[0076]而考虑到定位扩展记录中存储的最后一个数据块索引的情况,由于已创建的最后一个扩展记录中尚未存储数据块索引的存储区域的字节也都将设为0,若最后一个扩展记录中最后一个数据块索引的字节也被设为0,则可能会引起将该字节被设为O的最后一个数据块索引对应的存储区域误判为尚未存储数据块索引的问题。
[0077]为了解决这一问题,在一个实例中,可以在索引主记录的头部记录扩展记录中已存储的数据块索引的总数。当出现所述最后一个扩展记录的一个存储区域的字节被设为O而无法判断该存储区域是尚未存储数据块索引,还是存储有对应文件空洞的数据块索引的情况时,可以根据该数据块索引的总数来进行判断。例如,若该数据块索引的总数为5,而在扩展记录中该存储区域之前的区域存储的数据块索引已达到5个,则该存储区域尚未存储数据块索引。若在扩展记录中该存储区域之前的区域存储的数据块索引只有4个,则该存储区域中存储有对应文件空洞的数据块索引。
[0078]步骤S22,当一扩展记录中存储的所有数据块索引的字节都为O时,将数据段中该扩展记录的ID更新为预设值,例如为将该扩展记录的ID对应的字节都设为O,如图9所示。
[0079]综上所述,通过本发明实施例的文件索引存储方法,将文件空洞对应的数据块索引在索引主记录的数据段中或所关联的扩展记录中以字节为O表示,可以在未给文件空洞分配数据块的情况下,为该文件空洞建立相应的数据块索引。此外,若一扩展记录包括的所有数据块索引的字节都为0,则将该扩展记录的ID修改为预设值,从而在读取到该扩展记录的ID为该预设值时,即可获知该扩展记录对应于文件空洞,无需再继续读取该扩展记录,从而提闻读取效率。
[0080]第三实施例
[0081]根据上述第一及第二实施例存储文件索引后,在定位到扩展记录进行修改的过程中,可能会涉及到扩展记录的多次写操作。为了保证扩展记录在多次写操作情况下的原子性,即在扩展记录未修改成功的情况下,该扩展记录对应的数据与修改前保持一致,参阅图10所示,本发明第三实施例提供一种文件索引存储方法,其相较于第一或第二实施例的文件索引存储方法,还包括:
[0082]步骤S31,当需要修改一目标扩展记录时,先生成该目标扩展记录的备份扩展记录,并为该备份扩展记录也分配一个ID。具体而言,在修改该目标扩展记录时,需要先定位到该目标扩展记录。定位到该目标扩展记录的方法可以参考第一实施例中定位扩展记录序号的公式,在此不再赘述。所生成的该备份扩展记录与该目标扩展记录一致。
[0083]步骤S32,根据修改操作修改该备份扩展记录。该修改操作例如包括修改该备份扩展记录中的一个或多个数据块索引。
[0084]步骤S33,当修改操作结束后,将该数据段中该目标扩展记录的ID替换为该备份扩展记录的ID。从而使该目标扩展记录与索引主记录的关联解除,而使该备份扩展记录与该索引主记录关联。
[0085]综上所述,本实施例的文件索引存储方法,当需要修改一目标扩展记录时,先生成一个与该目标扩展记录一致的备份扩展记录。然后根据修改操作修改该备份扩展记录。当修改操作结束后,才将该备份扩展记录替代目标扩展记录与索引主记录相关联。因此,即使在对备份扩展记录的修改过程中发生错误,使对备份扩展记录的修改失败,但由于并未修改该目标扩展记录,且该目标扩展记录仍与索引主记录关联,因此对该备份扩展记录的修改失败并不会影响目标扩展记录对应数据的原子性。
[0086]第四实施例
[0087]参阅图11所示,本发明第四实施例提供一种文件索引存储装置100,其包括第一判断模块101、第二判断模块102、第一存储模块103、第二存储模块104和第三存储模块105。可以理解,上述的各模块是指计算机程序或者程序段,用于执行某一项或多项特定的功能。此外,上述各模块的区分并不代表实际的程序代码也必须是分开的。
[0088]第一判断模块101,用于当接收到一文件待存储的数据块索引时,判断该文件对应的索引主记录是否关联有扩展记录。该数据块索引包括对应数据块的ID及该数据块的有效数据长度。该数据块索引具有固定长度。该索引主记录包括头部和数据段。该头部包括文件元信息、结构标志和数据段长度信息。该文件元信息例如包括该文件的标识信息、该文件的创建时间和修改时间、该文件的总长度、对应数据块的指定数据长度等。该结构标志指示该索引主记录是否关联有扩展记录。该数据段长度信息指示索引主记录的数据段长度。因此,第一判断模块101可以先从该索引主记录的头部中读取该结构标志,然后根据该结构标志判断该索引主记录是否关联有扩展记录。
[0089]第二判断模块102,用于若该索引主记录未关联有扩展记录,则判断该索引主记录的数据段长度是否达到预设阈值。若该索引主记录未关联有扩展记录,则该索引主记录的该数据段用于以数组形式存储该文件的数据块索引。第二判断模块102可以从该索引主记录的头部中读取该数据段长度信息,并根据该数据段长度信息判断该数据段长度是否达到该预设阈值。在一个实例中,该预设阈值可以为所述数据块索引的固定长度的整数倍。
[0090]第一存储模块103,用于若该数据段长度达到该预设阈值,则创建若干个与该索引主记录关联的扩展记录,并将该数据段中已存储的数据块索引与所述待存储的数据块索引存入相应的扩展记录。每个扩展记录都用于存储指定数量的数据块索引。所创建的扩展记录也都以数组形式存储。
[0091]具体而言,第一存储模块103先创建若干个扩展记录,并分别为每个扩展记录分配一个ID。然后,第一存储模块103将所创建的各扩展记录的ID记录在所述索引主记录的数据段中,从而将各扩展记录与索引主记录关联起来,并将该结构标志更新为指示索引主记录关联有扩展记录。最后,第一存储模块103将该数据段中已存储的数据块索引转移到相应的扩展记录中,并将所述待存储的数据块索引也存入相应的扩展记录。
[0092]第二存储模块104,用于若该数据段长度未达到该预设阈值,则将该待存储的数据块索引存入索引主记录的该数据段中。在将待存储的数据块索引存入该数据段中后,第二存储模块104还需要更新该头部中的数据段长度信息。
[0093]第三存储模块105,用于若该索引主记录关联有扩展记录,则将该待存储的数据块索引存入相应的扩展记录中。具体而言,第三存储模块105先判断扩展记录数组中最后一个扩展记录存储的数据块索引是否达到所述的指定数量。若该最后一个扩展记录存储的数据块索引达到该指定数量,则需要再创建一个与该索引主记录关联的扩展记录,即将所创建的扩展记录的ID记录在该数据段中,并将该待存储的数据块索引存入所创建的该扩展记录。若该最后一个扩展记录存储的数据块索引未达到该指定数量,则将该待存储的数据块索引存入该最后一个扩展记录。
[0094]对于以上各模块的具体工作过程,可进一步参考本发明第一实施例提供的文件索引存储方法,在此不再重复。
[0095]综上所述,本实施例提供的文件索引存储方法,在文件的索引主记录中用于存储数据块索引的数据段长度达到预设阈值的情况下,将该数据段中的所有数据块索引信息拆分成与该索引主记录关联的若干个扩展记录进行存储,从而可以提高文件索引的存储效率,以及提升文件索引的访问性能。
[0096]第五实施例
[0097]参阅图12所示,本发明第五实施例提供一种文件索引存储装置200,其相较于第四实施例的文件索引存储装置100,所述第一存储模块103、第二存储模块104和第三存储模块105分别还包括第一存储子模块201。
[0098]该第一存储子模块201,用于在该待存储的数据块索引存入数据段或相应的扩展记录时,若该待存储的数据块索引对应该文件的空洞,则在该数据段或相应的扩展记录中将该待存储的数据块索引的字节设为O。
[0099]此外,所述第一存储模块103和第三存储模块105分别还包括第二存储子模块202,该第二存储子模块202用于当一扩展记录中存储的所有数据块索引的字节都为O时,将数据段中该扩展记录的ID更新为预设值。
[0100]对于以上各模块的具体工作过程,可进一步参考本发明第二实施例提供的文件索引存储方法,在此不再重复。
[0101]综上所述,通过本发明实施例的文件索引存储装置200,将文件空洞对应的数据块索引在索引主记录的数据段中或所关联的扩展记录中以字节为O表示,可以在未给文件空洞分配数据块的情况下,为该文件空洞建立相应的数据块索引。此外,若一扩展记录包括的所有数据块索引的字节都为0,则将该扩展记录的ID修改为预设值,从而在读取到该扩展记录的ID为该预设值时,即可获知该扩展记录对应于文件空洞,无需再继续读取该扩展记录,从而提闻读取效率。
[0102]第六实施例
[0103]参阅图13所示,本发明第六实施例提供一种文件索引存储装置300,其相较于第四实施例的文件索引存储装置100或第五实施例的文件索引存储装置200,还进一步包括修改模块301。该修改模块301用于:
[0104]当需要修改一目标扩展记录时,先生成该目标扩展记录的备份扩展记录,并为该备份扩展记录也分配一个ID ;
[0105]根据修改操作修改该备份扩展记录;以及
[0106]当修改操作结束后,将该数据段中该目标扩展记录的ID替换为该备份扩展记录的ID。从而使该目标扩展记录与索引主记录的关联解除,而使该备份扩展记录与该索引主记录关联。
[0107]对于以上各模块的具体工作过程,可进一步参考本发明第三实施例提供的文件索引存储方法,在此不再重复。
[0108]综上所述,本实施例的文件索引存储装置300,当需要修改一目标扩展记录时,先生成一个与该目标扩展记录一致的备份扩展记录。然后根据修改操作修改该备份扩展记录。当修改操作结束后,才将该备份扩展记录替代目标扩展记录与索引主记录相关联。因此,即使在对备份扩展记录的修改过程中发生错误,使对备份扩展记录的修改失败,但由于并未修改该目标扩展记录,且该目标扩展记录仍与索引主记录关联,因此对该备份扩展记录的修改失败并不会影响目标扩展记录对应数据的原子性。
[0109]此外,本发明实施例还提供一种计算机可读存储介质,其内存储有计算机可执行指令,上述的计算机可读存储介质例如为非易失性存储器例如光盘、硬盘、或者闪存。上述的计算机可执行指令用于让计算机或者类似的运算装置完成上述的文件索引存储方法中的各种操作。
[0110]以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,虽然本发明已以较佳实施例揭示如上,然而并非用以限定本发明,任何本领域技术人员,在不脱离本发明技术方案范围内,当可利用上述揭示的技术内容做出些许更动或修饰为等同变化的等效实施例,但凡是未脱离本发明技术方案内容,依据本发明的技术实质对以上实施例所作的任何简介修改、等同变化与修饰,均仍属于本发明技术方案的范围内。
【权利要求】
1.一种文件索引存储方法,其特征在于,该方法包括以下步骤: 当接收到一文件待存储的数据块索引时,判断该文件对应的索引主记录是否关联有扩展记录; 当判断该索引主记录未关联有扩展记录时,若该索引主记录的数据段长度达到预设阈值,则创建若干个与该索引主记录关联的扩展记录; 将该数据段中已存储的数据块索引与所述待存储的数据块索引存入相应的扩展记录。
2.如权利要求1所述的文件索引存储方法,其特征在于,还包括: 当判断该索引主记录未关联有扩展记录时,若该数据段长度未达到该预设阈值,则将该待存储的数据块索引存入索引主记录的该数据段中。
3.如权利要求2所述的文件索引存储方法,其特征在于,还包括: 当判断该索引主记录关联有扩展记录时,将该待存储的数据块索引存入相应的扩展记录中。
4.如权利要求3所述的文件索引存储方法,其特征在于,所述的数据块索引包括该数据块的ID和有效数据长度。
5.如权利要求3所述的文件索引存储方法,其特征在于,所述数据块索引具有固定长度。
6.如权利要求3所述的文件索引存储方法,其特征在于,所述数据块索引在该数据段或扩展记录中以数组形式存储,与索引主记录关联的该扩展记录也以数组形式存储。
7.如权利要求6所述的文件索引存储方法,其特征在于,每个所述扩展记录都用于存储指定数量的数据块索引。
8.如权利要求7所述的文件索引存储方法,其特征在于,所述当判断该索引主记录关联有扩展记录时,将该待存储的数据块索引存入相应的扩展记录中的步骤包括: 判断扩展记录数组中的最后一个扩展记录存储的数据块索引是否达到该指定数量; 若该最后一个扩展记录存储的数据块索引达到该指定数量,则再创建一个与该索引主记录关联的扩展记录,并将该待存储的数据块索引存入所创建的该扩展记录; 若该最后一个扩展记录存储的数据块索引未达到该指定数量,则将该待存储的数据块索引存入该最后一个扩展记录。
9.如权利要求3所述的文件索引存储方法,其特征在于,该索引主记录包括头部和所述数据段,该头部包括结构标志和数据段长度信息; 该结构标志指示该索引主记录是否关联有扩展记录。
10.如权利要求9所述的文件索引存储方法,其特征在于,所述判断该文件对应的索引主记录是否关联有扩展记录的步骤包括: 从该头部中读取该结构标志; 根据该结构标志判断该索引主记录是否关联有扩展记录。
11.如权利要求9所述的文件索引存储方法,其特征在于,当判断该索引主记录未关联有扩展记录时,还包括: 从该头部中读取该数据段长度信息; 根据该数据段长度信息判断该数据长度是否达到该预设阈值。
12.如权利要求9所述的文件索引存储方法,其特征在于,所述创建若干个与该索引主记录关联的扩展记录的步骤包括: 创建若干个扩展记录,并分别为每个扩展记录分配一个ID ; 将各扩展记录的ID记录在该数据段中; 将该结构标志更新为指示索引主记录关联有扩展记录。
13.如权利要求12所述的文件索引存储方法,其特征在于,将所述待存储的数据块索引存入数据段或相应的扩展记录的步骤还包括: 若该待存储的数据块索引对应该文件中的空洞,则在数据段或相应的扩展记录中将该待存储的数据块索引的字节设为O。
14.如权利要求13所述的文件索引存储方法,其特征在于,还包括: 当一扩展记录中存储的所有数据块索引的字节都为O时,将数据段中该扩展记录的ID更新为预设值。
15.如权利要求9所述的文件索引存储方法,其特征在于,还包括: 当将所述待存储的数据块索引存入数据段后,更新该头部中的数据段长度。
16.如权利要求12所述的文件索引存储方法,其特征在于,还包括: 当需要修改一目标扩展记录时,生成该目标扩展记录的备份扩展记录,并为该备份扩展记录分配一个ID ; 根据修改操作修改该备份扩展记录; 当该修改操作结束后,将该数据段中该目标扩展记录的ID替换为该备份扩展记录的ID0
17.一种文件索引存储装置,其特征在于,该装置包括: 第一判断模块,用于当接收到一文件待存储的数据块索引时,判断该文件对应的索引主记录是否关联有扩展记录; 第一存储模块,用于当判断该索引主记录未关联有扩展记录时,若该索引主记录的数据段长度达到预设阈值,则创建若干个与该索引主记录关联的扩展记录; 所述第一存储模块,还用于将该数据段中已存储的数据块索引与所述待存储的数据块索引存入相应的扩展记录。
18.如权利要求17所述的文件索引存储装置,其特征在于,还包括: 第二存储模块,用于当判断该索引主记录未关联有扩展记录时,若该数据段长度未达到该预设阈值,则将该待存储的数据块索引存入索引主记录的该数据段中。
19.如权利要求18所述的文件索引存储装置,其特征在于,还包括: 第三存储模块,用于当判断该索引主记录关联有扩展记录时,将该待存储的数据块索引存入相应的扩展记录中。
20.如权利要求19所述的文件索引存储装置,其特征在于,所述的数据块索引包括该数据块的ID和有效数据长度。
21.如权利要求19所述的文件索引存储装置,其特征在于,所述数据块索引具有固定长度。
22.如权利要求19所述的文件索引存储装置,其特征在于,所述数据块索引在该数据段或扩展记录中以数组形式存储,与索引主记录关联的该扩展记录也以数组形式存储。
23.如权利要求22所述的文件索引存储装置,其特征在于,每个所述扩展记录都用于存储指定数量的数据块索引。
24.如权利要求23所述的文件索引存储装置,其特征在于,所述第三存储模块用于: 当判断该索引主记录关联有扩展记录时,判断扩展记录数组中的最后一个扩展记录存储的数据块索引是否达到该指定数量; 若该最后一个扩展记录存储的数据块索引达到该指定数量,则再创建一个与该索引主记录关联的扩展记录,并将该待存储的数据块索引存入所创建的该扩展记录; 若该最后一个扩展记录存储的数据块索引未达到该指定数量,则将该待存储的数据块索引存入该最后一个扩展记录。
25.如权利要求19所述的文件索引存储装置,其特征在于,该索引主记录包括头部和所述数据段,该头部包括结构标志和数据段长度信息; 该结构标志指示该索引主记录是否关联有扩展记录。
26.如权利要求25所述的文件索引存储装置,其特征在于,所述判断该文件对应的索引主记录是否关联有扩展记录包括: 从该头部中读取该结构标志; 根据该结构标志判断该索引主记录是否关联有扩展记录。
27.如权利要求25所述的文件索引存储装置,其特征在于,还包括第二判断模块,用于: 当判断该索引主记录未关联有扩展记录时,从该头部中读取该数据段长度信息; 根据该数据段长度信息判断该数据长度是否达到该预设阈值。
28.如权利要求25所述的文件索引存储装置,其特征在于,所述创建若干个与该索引主记录关联的扩展记录包括: 创建若干个扩展记录,并分别为每个扩展记录分配一个ID ; 将各扩展记录的ID记录在该数据段中; 将该结构标志更新为指示索引主记录关联有扩展记录。
29.如权利要求28所述的文件索引存储装置,其特征在于,所述第一存储模块、第二存储模块和第三存储模块分别还包括: 第一存储子模块,用于在该待存储的数据块索引存入数据段或相应的扩展记录时,若该待存储的数据块索引对应该文件中的空洞,则在数据段或相应的扩展记录中将该待存储的数据块索引的字节设为O。
30.如权利要求29所述的文件索引存储装置,其特征在于,所述第一存储模块和第三存储模块分别还包括: 第二存储子模块,用于当一扩展记录中存储的所有数据块索引的字节都为O时,将数据段中该扩展记录的ID更新为预设值。
31.如权利要求25所述的文件索引存储装置,其特征在于,所述第二存储模块,还用于: 当将所述待存储的数据块索引存入数据段后,更新该头部中的数据段长度。
32.如权利要求28所述的文件索引存储装置,其特征在于,还包括修改模块,用于: 当需要修改一目标扩展记录时,生成该目标扩展记录的备份扩展记录,并为该备份扩展记录分配一个ID ;根据修改操作修改该备份扩展记录;当该修改操作结束后,将该数据段中该目标扩展记录的ID替换为该备份扩展记录的
ID0
【文档编号】G06F17/30GK104424224SQ201310375596
【公开日】2015年3月18日 申请日期:2013年8月26日 优先权日:2013年8月26日
【发明者】娄继冰, 李博, 黄伟, 黄楚加 申请人:深圳市腾讯计算机系统有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1