CN106326292B - 数据结构和文件聚合、读取方法及装置 - Google Patents
数据结构和文件聚合、读取方法及装置 Download PDFInfo
- Publication number
- CN106326292B CN106326292B CN201510377701.1A CN201510377701A CN106326292B CN 106326292 B CN106326292 B CN 106326292B CN 201510377701 A CN201510377701 A CN 201510377701A CN 106326292 B CN106326292 B CN 106326292B
- Authority
- CN
- China
- Prior art keywords
- file
- data
- length
- unit
- small
- 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/16—File or folder operations, e.g. details of user interfaces specifically adapted to file systems
-
- 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
-
- 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/16—File or folder operations, e.g. details of user interfaces specifically adapted to file systems
- G06F16/164—File meta data generation
-
- 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/178—Techniques for file synchronisation in file systems
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)
- Human Computer Interaction (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种数据结构和文件聚合、读取方法及装置。该聚合方法包括:将小文件的数据、数据的长度信息、至少一个元数据、标识信息以及同步块聚合为小文件单元;将至少一个小文件单元合并为大文件,其中,所述同步块位于相邻的小文件单元之间。该读取方法包括:根据所述同步块确定所述小文件单元在所述大文件中的起始位置;根据所述小文件单元在所述大文件中的起始位置、所述数据的长度信息的长度、所述至少一个元数据的长度以及所述标识信息的长度,确定所述数据在所述大文件中的起始位置;根据所述数据在所述大文件中的起始位置以及数据的长度信息,读取所述小文件的数据。本发明中每个小文件单元均具有完备的描述系统,不必依赖聚合文件即可完成自解析。
Description
技术领域
本发明涉及文件存储技术领域,具体地说,涉及一种数据结构和文件聚合、读取方法及装置。
背景技术
在互联网、云计算和大数据等技术高速发展的大环境下,数据呈现爆炸式增长。在社会化网络、移动通信、网络视频音频、电子商务、传感器网络和科学实验等各种应用产生的数据,不仅存储容量巨大,而且还具有数据类型繁多、数据大小变化大、流动快等显著特点,往往能够产生千万级、亿级甚至十亿、百亿级的海量小文件,而且更多地是海量大小文件混合存储。由于在元数据管理、访问性能、存储效率等方面面临巨大的挑战性,因此海量小文件(LOSF,lots of small files)问题成为了工业界和学术界公认的难题。
现有技术中对于LOSF问题的整体解决思路是,将小文件合并成大文件集中存储,针对小文件建立索引信息,通过索引信息来操纵对小文件的读取。
如图1所示,现有的小文件聚合方案,对于每个小文件建立从文件名到文件编号、从文件编号到文件信息的关联关系,其中文件信息包括该小文件的文件大小以及其在对应大文件中的文件位置信息。而读取小文件的主要过程是,根据小文件的文件名获取其文件编号,然后根据该文件编号获取其在大文件中的位置与大小信息,最后通过大文件的IO接口读出该小文件的文件数据。图1中,n表示小文件的序号,S_n表示第n个小文件在大文件中的位置。
然而,对于图1所示的小文件聚合方案,读取小文件时,只能通过文件名、文件编号以及文件信息等的关联关系才能实现。而且,由于大文件本身并没有提供足够的信息供外界读取其中的小文件,如果丢失了某个小文件对应的文件名、文件编号、文件信息中的部分数据,或者丢失了这三者之间的关联关系,则均无法顺利地从大文件中读取出该小文件的文件数据。现有的这些小文件的聚合方案,存在着可靠性较差等诸多不足。
发明内容
本发明所要解决的技术问题是克服现有的文件聚合方案只能通过文件名、文件编号以及文件信息等的关联关系才能从大文件中读取小文件而存在着可靠性较差的不足。
为此,本发明的实施例首先提供一种小文件的聚合方法,该方法包括:
获取所述小文件的数据;
获取所述数据的长度信息以及至少一个元数据;
为所述小文件分配标识信息;
将所述数据、所述数据的长度信息、所述至少一个元数据、所述标识信息以及同步块聚合为小文件单元;
将至少一个小文件单元合并为大文件,其中,所述同步块位于相邻的小文件单元之间。
在一个实施例中,所述数据的长度信息的长度、所述标识信息的长度以及每个所述元数据的长度均是固定的。
在一个实施例中,所述元数据包括小文件的名称、小文件的类型、创建时间和小文件所有者中的至少一种。
在一个实施例中,将所述数据、所述数据的长度信息、所述至少一个元数据、所述标识信息以及同步块聚合为小文件单元,包括:
将所述数据的长度信息、所述至少一个元数据和所述标识信息组合为描述信息段;
在描述信息段之后追加所述数据;
在描述信息段之前设置同步块,或者在所述数据之后设置同步块。
本发明的实施例还提供一种小文件的读取方法,所述小文件以单元的形式聚合在大文件中,所述单元中包含有所述小文件的数据、所述数据的长度信息、所述数据的至少一个元数据、所述小文件的标识信息以及同步块,其中,所述同步块位于相邻单元之间;该方法包括:
根据所述同步块确定所述单元在所述大文件中的起始位置;
根据所述单元在所述大文件中的起始位置、所述数据的长度信息的长度、所述至少一个元数据的长度以及所述标识信息的长度,确定所述数据在所述大文件中的起始位置;
根据所述数据在所述大文件中的起始位置以及数据的长度信息,读取所述小文件的数据。
在一个实施例中,所述数据的长度信息的长度、所述标识信息的长度以及每个所述元数据的长度是固定的。
在一个实施例中,所述元数据包括小文件的名称、小文件的类型、创建时间和小文件所有者中的至少一种。
在一个实施例中,根据所述同步块确定所述单元在所述大文件中的起始位置,包括:
在大文件中识别所述同步块;
以所述同步块的头部作为所述单元在所述大文件中的起始位置;或者,
以相邻两个同步块之间的描述信息段的头部作为所述单元在所述大文件中的起始位置,其中,所述描述信息段为所述数据的长度信息、所述至少一个元数据和所述标识信息的组合。
本发明的实施例还提供一种小文件的聚合装置,该装置包括:
数据获取模块,其获取所述小文件的数据;
长度获取模块,其获取所述数据的长度信息;
元数据获取模块,其获取所述数据的至少一个元数据;
标识分配模块,其为所述小文件分配标识信息;
数据聚合模块,其将所述数据、所述数据的长度信息、所述至少一个元数据、所述标识信息以及同步块聚合为小文件单元;
单元合并模块,其将至少一个小文件单元合并为大文件,其中,所述同步块位于相邻的小文件单元之间。
在一个实施例中,所述数据的长度信息的长度、所述标识信息的长度以及每个所述元数据的长度均是固定的。
在一个实施例中,所述元数据包括小文件的名称、小文件的类型、创建时间和小文件所有者中的至少一种。
在一个实施例中,所述数据聚合模块还用于:
将所述数据的长度信息、所述至少一个元数据和所述标识信息组合为描述信息段;
在描述信息段之后追加所述数据;
在描述信息段之前设置同步块,或者在所述数据之后设置同步块。
本发明的实施例还提供一种小文件的读取装置,所述小文件以单元的形式聚合在大文件中,所述单元中包含有所述小文件的数据、所述数据的长度信息、所述数据的至少一个元数据、所述小文件的标识信息以及同步块,其中,所述同步块位于相邻单元之间;该装置包括:
单元位置确定模块,其根据所述同步块确定所述单元在所述大文件中的起始位置;
数据位置确定模块,其根据所述单元在所述大文件中的起始位置、所述数据的长度信息的长度、所述至少一个元数据的长度以及所述标识信息的长度,确定所述数据在所述大文件中的起始位置;
读取模块,其根据所述数据在所述大文件中的起始位置以及数据的长度信息,读取所述小文件的数据。
在一个实施例中,所述数据的长度信息的长度、所述标识信息的长度以及每个所述元数据的长度是固定的。
在一个实施例中,所述元数据包括小文件的名称、小文件的类型、创建时间和小文件所有者中的至少一种。
在一个实施例中,所述单元位置确定模块还用于:
在大文件中识别所述同步块;
以所述同步块的头部作为所述单元在所述大文件中的起始位置;或者,
以相邻两个同步块之间的描述信息段的头部作为所述单元在所述大文件中的起始位置,其中,所述描述信息段为所述数据的长度信息、所述至少一个元数据和所述标识信息的组合。
本发明的实施例还提供一种大文件的数据结构,所述大文件包含有多个小文件单元,每个小文件单元包括:
数据段,记录小文件的数据;
元数据段,记录所述数据的至少一个元数据;
数据长度段,记录所述数据的长度信息;
标识信息段,记录所述数据所在小文件单元的标识信息;
同步块,将所述数据所在的小文件单元与所述大文件中的其他小文件单元进行隔离。
在一个实施例中,所述数据的长度信息的长度、所述标识信息的长度以及每个所述元数据的长度均是固定的。
在一个实施例中,所述元数据包括小文件的名称、小文件的类型、创建时间和小文件所有者中的至少一种。
在一个实施例中,在所述小文件单元中,
将所述数据的长度信息、所述至少一个元数据和所述标识信息组合为描述信息段;
在描述信息段之后追加所述数据;
在描述信息段之前设置同步块,或者在所述数据之后设置同步块。
与现有技术相比,本发明的实施例在合成大文件的的文件单元中,不仅保存原始文件本身的文件数据(Value),还保存原始文件对应的唯一标识(ID)、数据长度(Size)和原始文件自身的元数据信息(Meta)这些额外信息,使得每个文件单元具备一个完备的描述系统,每一文件单元均能自解析,从而不必依赖聚合文件。
另一方面,本发明的实施例通过预先规定文件单元中各部分的长度,便于读取原始文件数据及其相关元数据(属性)。通过引入原始文件数据长度(Size)字段,在同一个聚合文件内部的所有文件单元构成一个虚拟链表,可以从当前文件单元读取下一个文件单元,这为在整个聚合文件内部提供遍历读取成为可能,同时整个聚合文件作为一个整体也是一个完备的自描述系统。
此外,本发明的实施例还引入同步块,在逻辑上隔离了每个文件单元。当某一小文件单元内部因为某种原因被破坏,通过同步块的逻辑隔离,可避免对其他文件单元的污染。
附图说明
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例共同用于解释本发明,并不构成对本发明的限制。在附图中:
图1是现有技术中文件聚合的原理性示意图;
图2是根据本发明实施例一的小文件单元的数据结构示意图;
图3是在另一个示例中的小文件单元的数据结构示意图;
图4是在另一个示例中的小文件单元的数据结构示意图;
图5是根据本发明实施例二的小文件的聚合方法的步骤流程图;
图6是根据本发明实施例三的小文件的读取方法的步骤流程图;
图7是根据本发明实施例四的小文件的聚合装置的结构示意图;
图8是根据本发明实施例五的小文件的读取装置的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,以下结合附图对本发明作进一步地详细说明。
下面对本发明实施例中涉及到的用语进行说明。
本发明实施例中的小文件是指文件大小相对较小的文件,例如视频片段、图像、pdf文档等。小文件的大小没有具体阈值,在普通文件系统中,大小低于兆(MB)级别的文件为小文件;而在分布式文件系统中,文件一般都是分块存储,则大小低于块的大小的文件为小文件。而大文件是指通过某种方式把很多小文件聚合而成的一个文件。
典型地,在视频监控领域中,需要在原始的监控视频文件中截取部分视频片段或者提取部分监控图像,并将这些数据量较小的文件聚合生成大文件保存下来。另外,为便于后期的数据整理,还需要在大文件中聚合诸如txt文档、pdf文档等的文本文件,来对视频或者图像进行必要描述。因此,在本发明的实施例中,所存储的小文件可以是文本、图像或视频,或上述各类文件的组合。
“自解析”是指文件通过自身存储的固定格式的描述信息进行自动识别,常见的具备自解析能力的文档例如为XML文档。“元数据”是描述文件属性的数据,包括对小文件的数据资源的描述性信息,例如,小文件的文件类型和创建日期等。对于视频监控中聚合生成的大文件来说,大文件具备“自解析”能力是指可根据自身保存的元数据的描述信息对视频片段、图像和文档等小文件进行识别。
实施例一
具体来说,本发明的实施例为小文件生成描述其属性的描述信息,包括小文件的内容数据的长度、小文件的名称、类型、创建时间和小文件的所有者等等。将这些额外的描述信息和小文件的内容数据按照设定的单元结构生成小文件单元,将多个小文件单元合并到大文件中。其中,在设定的单元结构中,额外信息占用固定长度的字节以便于读取。
图2为本实施例的小文件单元的数据结构示意图。该小文件单元包括数据段(Value)、元数据段(Meta)、数据长度段(Size)和标识信息段(ID)。为了便于小文件单元的读取,元数据段(Meta)、数据长度段(Size)和标识信息段(ID)分别具有固定的长度。
其中,数据段(Value)用于记录小文件的数据。具体而言,数据段的长度由小文件中存储的视频片段、图像或者文本的数据量决定。
元数据段(Meta)用于记录小文件数据的至少一个元数据。元数据段(Meta)由若干个元数据(属性)构成,这些元数据可以是(但不限于)如下信息:小文件名称(Name)、小文件数据类型(Type)、小文件创建时间(CreateTime)、小文件所有者(Owner)等等。元数据段具体包括哪些或者包括多少元数据根据应用中的具体情况和需求确定,但每个元数据在元数据段内部所占的长度是固定的。也就是说每个元数据段下包括哪些元数据,所包括的元数据各自所占的长度,在所有的小文件单元内都是相同的。
数据长度段(Size)用于记录小文件数据的长度信息,小文件数据的长度信息在小文件单元内部占有的长度固定。
标识信息段(ID)用于记录数据所在小文件单元的标识信息,在大文件的全局范围内唯一标识一个小文件单元。标识信息在小文件单元内部占有的字节长度固定。
此外,图2中的小文件单元还包括同步块(Sync),用于将所述数据所在的小文件单元与所述大文件中的其他小文件单元进行隔离。
同步块(Sync)由全局设定唯一的字节序列组成,长度固定。比如可以设定“>||<”四个字符组成的字节序列为全局的同步块,则在一个大文件的字节流中可以通过此同步块识别并分割出一系列的小文件单元。
由于元数据段(Meta)、数据长度段(Size)和标识信息段(ID)和同步块(Sync)这些额外的数据与小文件数据(Value)本身相比非常小,因此,这些额外的数据在小文件单元中并不会占用过多的空间。但是保留这些信息可使每一小文件单元形成完备的描述系统,在读取到小文件单元的数据后能进行自我解析,识别小文件中的数据。
上述标识信息段(ID)、数据长度段(Size)、元数据段(Meta)以及数据段(Value)按顺序存储在小文件单元中,并可依照不同顺序先后进行存储。其中,将标识信息段(ID)、数据长度段(Size)和元数据段(Meta)组合为描述信息段。由于这些数据段别具有固定的长度,可依照任意设定的顺序进行组合。
例如,在图2的示例中,依次按照标识信息段(ID)、数据长度段(Size)和元数据段(Meta)的先后顺序进行组合,得到描述信息段。在描述信息段结束位置之后追加数据段(Value),随后,从数据段(Value)的尾部开始存储同步块(Sync),从而,图2示出的同步块(Sync)位于小文件单元_i和小文件单元_i+1之间。这样在大文件中,小文件单元_i-1的同步块和小文件单元_i的同步块之间的描述信息段的头部作为小文件单元_i在大文件中的起始位置。
类似的,图3和图4为小文件单元结构的其他示例。
在图3中,描述信息段中各个数据段的组合顺序与图2相同。不同之处在于,先在描述信息段之前设置同步块(Sync),随后,在描述信息段之后追加数据段(Value)。从而,同步块(Sync)位于小文件单元_i和小文件单元_i-1之间。这样,小文件单元_i的同步块(Sync)的头部作为小文件单元_i在大文件中的起始位置。
在图4中同样首先存储同步块(Sync),随后存储描述信息段,最后存储数据段(Value),但是数据长度段(Size)和元数据段(Meta)的先后位置与图3不同。
实施例二
图5是本实施例的小文件的聚合方法的步骤流程图。首先获取小文件的数据(步骤S510),再基于小文件中的数据量获取数据的长度信息,以及至少一个元数据(步骤S520)。其中,元数据的类型如上文所述,不再赘述。为小文件分配标识信息(S530),以便于在聚合生成的大文件中识别小文件。将小文件的数据、小文件数据的长度信息、至少一个元数据、标识信息以及同步块聚合为小文件单元(S540),最后将至少一个小文件单元合并为大文件(S550),且同步块位于相邻的小文件单元之间。
其中,在步骤S540中,标识信息段(ID)、数据长度段(Size)、元数据段(Meta)、数据段(Value)和同步块(Sync),可依照不同的先后顺序聚合在小文件单元中。例如,可依照图2至图4中示意的先后顺序进行存储。
本实施例的小文件聚合方法能够将原始小文件的描述信息同时保存在聚合文件中,可以为后续的读取操作提供更丰富的基于原始文件属性的过滤、查询等等读取方式。
另外,通过引入数据长度段(Size),在同一个大文件内部的所有小文件单元构成一个链表,可以从当前小文件单元读取下一小文件单元,这为在大文件内部提供遍历读取成为可能,同时整个大文件作为一个整体也是一个完备的自描述系统。
实施例三
图6是本实施例提供的小文件的读取方法的步骤流程图。如上文所述,小文件以单元的形式聚合在大文件中,小文件单元中包含有小文件的数据、小文件数据的长度信息、小文件数据的至少一个元数据、小文件的标识信息以及同步块。
在图6中,首先根据同步块确定小文件单元在大文件中的起始位置(S610),然后根据小文件单元在大文件中的起始位置、小文件数据的长度信息的长度、至少一个元数据的长度以及标识信息的长度,确定小文件数据在大文件中的起始位置(S620)。最后,根据小文件数据在大文件中的起始位置以及数据的长度信息,读取小文件的数据(S630)。
其中,在步骤S610中,首先在大文件中识别同步块,以同步块的头部作为小文件单元在大文件中的起始位置;或者,以相邻两个同步块之间的描述信息段的头部作为小文件单元在大文件中的起始位置。
具体来说,对于图3和图4所示的小文件单元,在大文件中识别确定同步块,以同步块的头部作为小文件单元在大文件中的起始位置。而对于图2所示的小文件单元,在大文件中识别确定同步块,以相邻两个同步块之间的描述信息段的头部作为小文件单元在大文件中的起始位置。
正如上文所述,为了便于小文件单元的读取,元数据段(Meta)、数据长度段(Size)和标识信息段(ID)分别具有固定的长度。并且,数据长度段(Size)中的数值确定了小文件中存储的数据量的大小,也就是小文件数据的长度。因此,根据小文件单元的起始位置可读取原始的小文件的数据。
以下根据图2所示的小文件单元的数据结构说明读取过程。在本示例中,小文件的数据长度以字节长度来进行统计,则数据长度段(Size)用于记录小文件的字节长度。类似的,元数据段(Meta)、标识信息段(ID)和同步块(Sync)的长度同样按照字节长度来计算。
对于小文件单元_i,以小文件单元_i-1的同步块之后的第一字节作为小文件单元_i的起始位置。假设Pc为小文件单元_i的起始位置,Pv为小文件数据的起始位置,LID为小文件的标识信息段(ID)的长度,Lsize为数据长度段(Size)的长度,Lmeta为元数据段(Meta)的长度,则有:
Pv=Pc+LID+Lsize+Lmeta (1)
则在大文件中从Pv开始读取Size长度的字节流为文件单元_i的小文件数据。
类似的,由于元数据段(Meta)部分长度固定,也可以读取文件单元_i中元数据段的元数据,例如小文件名称(Name)、小文件数据类型(Type)、小文件创建时间(CreateTime)、小文件所有者(Owner)等等。
对于大文件中的任意小文件单元_n,假设Pn为小文件单元_n的起始位置,Size(n)为文件单元_n中Size字段的值,Lsync为同步块的长度,Pn+1为同一大文件内下一小文件单元_n+1的起始位置,则有:
Pn+1=Pn+LID+Lsize+Lmeta+Size(n)+Lsync (2)
定位出小文件单元_n+1的起始位置后,依据表达式(1)的逻辑可以读取小文件单元_n+1的小文件数据。也就是说,大文件内部的所有小文件单元通过相对位置关系构成一个虚拟链表。根据这个虚拟链表定位到其中一个小文件单元后,可以从当前小文件单元读取下一小文件单元,这为在大文件内部提供遍历读取成为可能。
下文以图3所示的小文件单元的结构为例,说明读取过程。与图2不同的是,图3中同步块位于小文件单元的头部。
对于小文件单元_i,以小文件单元_i的同步块的第一字节作为小文件单元_i的起始位置。假设Pc为小文件单元_i的起始位置,Pv为小文件数据的起始位置,LID为小文件的标识信息段(ID)的长度,Lsize为数据长度段(Size)的长度,Lmeta为元数据段(Meta)长度,Lsync为同步块的长度,则有:
Pv=Pc+Lsync+LID+Lsize+Lmeta (3)
则在大文件中从Pv开始读取Size长度的字节流为小文件单元_i的数据。
对于大文件中的任意小文件单元_n,假设Pn为小文件单元_n的起始位置,Size(n)为小文件单元_n中Size字段的值,Lsync为同步块的长度,Pn+1为同一大文件内下一小文件单元_n+1的起始位置,则有:
Pn+1=Pn+Lsync+LID+Lsize+Lmeta+Size(n) (4)
定位出小文件单元_n+1的起始位置后,依据表达式(3)的逻辑可以读取文件单元_n+1的原始文件数据。
如此以来,可以读取大文件中某个小文件单元或者所有小文件单元的原始文件数据。由上述的读取过程看出,本发明的实施例在文件单元中设置引入同步块(Sync),在逻辑上隔离了每个文件单元。当某个文件单元内部因为某种原因被破坏,通过同步块(Sync)的逻辑隔离,避免了对其他文件单元的污染。这为在大文件中的“盲读”提供可能。比如当前文件单元数据格式已破坏,则可向下寻找最近的一个同步块,从此同步块开始向后依据正常的逻辑识别读取后续文件单元。
以上为在聚合文件中根据文件单元存储的先后顺序依次读取的过程,另一方面,由于在文件单元中保存了原始文件的唯一标识(ID)、小文件名称(Name)、小文件数据类型(Type)、小文件创建时间(CreateTime)、小文件所有者(Owner)等等,因此可遍历聚合文件中的文件单元,根据原始文件的数据长度段、标识信息段和元数据段的内容查询文件单元。
现有技术中的文件合并方式在把小文件写入大文件的过程中需要对小文件建立相关索引,后续通过这些索引访问小文件。而本申请实施例中的聚合方式,可以仅仅批量写入小文件而无须同时在外部建立索引。后续根据使用需要,也可通过从头遍历扫描对其内的小文件在外部建立索引,一旦建立索引后,既可通过外部索引定位访问某一特定小文件,又可通过对大文件本身的遍历读取某个特定的小文件。
现有技术中的文件合并方式存在外部索引信息与大文件之间的数据一致性问题,为了避免数据的一致性问题,大文件封存后,很少修改,这损失了灵活性。另一个问题是,一旦外部的索引信息错误,则访问其对应的小文件非常困难甚至不可能。而本申请实施例提供的方案,当存在数据一致性问题时,或者外部索引信息错误后,通过扫描特定的大文件重建索引得到修复,这也为后续对大文件本身的修改,小文件重组提供灵活性。
实施例四
图7是小文件的聚合装置的结构示意图。如图7所示,该聚合装置700的实施例包括接收模块710、数据获取模块720、长度获取模块730、元数据获取模块740、标识分配模块750、数据聚合模块760以及写入模块770。
接收模块710,接收待聚合的小文件。
数据获取模块720,其与接收模块710相连,获取待聚合的小文件的数据。
长度获取模块730,其与接收模块710相连,获取该小文件的数据的长度信息。
元数据获取模块740,其与接收模块710相连,获取该小文件的至少一个元数据。
标识分配模块750,其与接收模块710相连,为所述小文件分配标识信息。
数据聚合模块760,其与数据获取模块720、长度获取模块730、元数据获取模块740以及标识分配模块750相连,将小文件的数据、数据的长度信息、该数据的至少一个元数据、标识分配模块750所分配的标识信息以及同步块聚合为小文件单元。
单元合并模块770,其与数据聚合模块760相连,其将至少一个小文件单元合并为大文件,其中,所述同步块位于相邻的小文件单元之间。从而,成功地将小文件聚合到大文件中。
需要说明的是,长度获取模块730所获取的数据的长度的信息以及标识信息的长度是固定的。在一个优选的示例中,每个元数据的长度也是固定的。从而使得在将来进行读取操作时,对小文件数据的读取,以及对小文件的相关元数据的读取非常方便。大文件内部的所有小文件单元通过相对位置关系构成一个虚拟链表。根据这个虚拟链表定位到其中一个小文件单元后,可以从当前小文件单元读取下一小文件单元,这为在大文件内部提供遍历读取成为可能。
数据聚合模块760在对小文件的数据、该数据的长度、该数据的至少一个元数据、该标识信息和同步块聚合为小文件单元时,将这些数据段按预定的顺序记录在小文件单元中。
小文件单元中的各个元素均基于预定的先后顺序进行存储,为顺利进行数据读取提供基础。如果当前小文件单元中部分信息出现缺失或者损坏,还能通过同步块定位到其他小文件单元,并按照预定的顺序读取其他小文件单元中的数据。
实施例五
图8是小文件的读取装置的结构示意图。该读取装置800的实施例中,小文件以单元的形式聚合在大文件中,小文件单元中包含有小文件的数据、该数据的长度信息、该数据的至少一个元数据以及该小文件的标识信息。如图8所示,该读取装置800的实施例包括有单元位置确定模块810、数据位置确定模块820以及读取模块830。
单元位置确定模块810,其确定小文件单元在大文件中的起始位置。
数据位置确定模块820,其与单元位置确定模块相连,根据小文件单元在该大文件中的起始位置、小文件数据的长度信息的长度、该数据至少一个元数据的长度以及该标识信息的长度,确定小文件的数据在该大文件中的起始位置。
读取模块830,其与数据位置确定模块相连,根据小文件的数据在该大文件中的起始位置以及该数据的长度信息,读取该小文件的数据。
其中,数据的长度信息的长度以及该标识信息的长度是固定的。在一个优选的示例中,每个元数据的长度也是固定的。正如上文所述,大文件内部的所有小文件单元通过相对位置关系构成一个虚拟链表。根据这个虚拟链表定位到其中一个小文件单元后,可以从当前小文件单元读取下一小文件单元,这为在大文件内部提供遍历读取成为可能。
图8所示的小文件的读取装置的实施例中,单元位置确定模块810还用于在大文件中识别同步块,以同步块的头部作为小文件单元在大文件中的起始位置;或者,以相邻两个同步块之间的描述信息段的头部作为小文件单元在大文件中的起始位置,其中,所述描述信息段为所述数据的长度信息、所述至少一个元数据和所述标识信息的组合。其中,该同步块用于对小文件单元与该大文件中的其他单元进行隔离。
这样当某个文件单元内部因为某种原因被破坏时,通过同步块(Sync)的逻辑隔离,能够避免对其他文件单元的污染。这为在大文件中的“盲读”提供可能。比如当前文件单元数据格式已破坏,则可向下寻找最近的一个同步块,从此同步块开始向后依据正常的逻辑识别读取后续文件单元。
虽然本发明所公开的实施方式如上,但所述的内容只是为了便于理解本发明而采用的实施方式,并非用以限定本发明。任何本发明所属技术领域内的技术人员,在不脱离本发明所公开的精神和范围的前提下,可以在实施的形式上及细节上作任何的修改与变化,但本发明的专利保护范围,仍须以所附的权利要求书所界定的范围为准。
Claims (10)
1.一种小文件的聚合方法,其特征在于,该方法包括:
获取所述小文件的数据;
获取所述数据的长度信息以及至少一个元数据;
为所述小文件分配标识信息;
通过将所述长度信息、所述至少一个元数据和所述标识信息组合为描述信息段,在所述描述信息段之后追加所述数据,在所述描述信息段之前设置同步块,或者在所述数据之后设置所述同步块,将所述数据、所述长度信息、所述至少一个元数据、所述标识信息以及同步块聚合为小文件单元,所述长度信息的长度、所述标识信息的长度以及每个所述元数据的长度均是固定的;
将至少一个所述小文件单元合并为大文件,其中,所述同步块位于相邻的所述小文件单元之间,在同一个大文件内部的所有文件单元构成一个虚拟链表,所述虚拟链表用于从当前文件单元读取下一个文件单元,所述聚合方法无需建立索引。
2.根据权利要求1所述的聚合方法,其特征在于:所述元数据包括小文件的名称、小文件的类型、创建时间和小文件所有者中的至少一种。
3.一种小文件的读取方法,其特征在于,所述小文件以单元的形式聚合在大文件中,所述单元中包含有所述小文件的数据、长度信息、所述数据的至少一个元数据、所述小文件的标识信息以及同步块,其中,所述长度信息、所述至少一个元数据和所述标识信息组合为所述单元中的描述信息段,所述描述信息段之后追加有所述数据,所述描述信息段之前设置所述同步块,或者所述数据之后设置有所述同步块,所述长度信息的长度、所述标识信息的长度以及每个所述元数据的长度均是固定的,所述同步块位于相邻单元之间;该方法包括:
根据所述同步块确定所述单元在所述大文件中的起始位置;
根据所述单元在所述大文件中的起始位置、所述长度信息的长度、所述至少一个元数据的长度以及所述标识信息的长度,确定所述数据在所述大文件中的起始位置;
根据所述数据在所述大文件中的起始位置以及所述长度信息,读取所述小文件的数据;
其中,在同一个大文件内部的所有文件单元构成一个虚拟链表,所述虚拟链表用于从当前文件单元读取下一个文件单元,所述读取方法无需建立索引。
4.根据权利要求3所述的读取方法,其特征在于:所述元数据包括小文件的名称、小文件的类型、创建时间和小文件所有者中的至少一种。
5.根据权利要求3或4所述的读取方法,其特征在于,根据所述同步块确定所述单元在所述大文件中的起始位置,包括:
在大文件中识别所述同步块;
以所述同步块的头部作为所述单元在所述大文件中的起始位置;或者,
以相邻两个同步块之间的描述信息段的头部作为所述单元在所述大文件中的起始位置,其中,所述描述信息段为所述长度信息、所述至少一个元数据和所述标识信息的组合。
6.一种小文件的聚合装置,其特征在于,该装置包括:
数据获取模块,其获取所述小文件的数据;
长度获取模块,其获取所述数据的长度信息;
元数据获取模块,其获取所述数据的至少一个元数据;
标识分配模块,其为所述小文件分配标识信息;
数据聚合模块,其通过将所述长度信息、所述至少一个元数据和所述标识信息组合为描述信息段,在所述描述信息段之后追加所述数据,在所述描述信息段之前设置同步块,或者在所述数据之后设置所述同步块,将所述数据、所述长度信息、所述至少一个元数据、所述标识信息以及同步块聚合为小文件单元,所述长度信息的长度、所述标识信息的长度以及每个所述元数据的长度均是固定的;
单元合并模块,其将至少一个所述小文件单元合并为大文件,其中,所述同步块位于相邻的所述小文件单元之间,在同一个大文件内部的所有文件单元构成一个虚拟链表,所述虚拟链表用于从当前文件单元读取下一个文件单元,所述聚合方法无需建立索引。
7.根据权利要求6所述的聚合装置,其特征在于:所述元数据包括小文件的名称、小文件的类型、创建时间和小文件所有者中的至少一种。
8.一种小文件的读取装置,其特征在于,所述小文件以单元的形式聚合在大文件中,所述单元中包含有所述小文件的数据、所述数据的长度信息、所述数据的至少一个元数据、所述小文件的标识信息以及同步块,其中,所述长度信息、所述至少一个元数据和所述标识信息组合为所述单元中的描述信息段,所述描述信息段之后追加有所述数据,所述描述信息段之前设置所述同步块,或者所述数据之后设置有所述同步块,所述长度信息的长度、所述标识信息的长度以及每个所述元数据的长度均是固定的,所述同步块位于相邻单元之间;该装置包括:
单元位置确定模块,其根据所述同步块确定所述单元在所述大文件中的起始位置;
数据位置确定模块,其根据所述单元在所述大文件中的起始位置、所述长度信息的长度、所述至少一个元数据的长度以及所述标识信息的长度,确定所述数据在所述大文件中的起始位置;
读取模块,其根据所述数据在所述大文件中的起始位置以及长度信息,读取所述小文件的数据;
其中,在同一个大文件内部的所有文件单元构成一个虚拟链表,所述虚拟链表用于从当前文件单元读取下一个文件单元,所述读取方法无需建立索引。
9.根据权利要求8所述的读取装置,其特征在于:所述元数据包括小文件的名称、小文件的类型、创建时间和小文件所有者中的至少一种。
10.根据权利要求8或9所述的读取装置,其特征在于,所述单元位置确定模块还用于:
在所述大文件中识别所述同步块;
以所述同步块的头部作为所述单元在所述大文件中的起始位置;或者,
以相邻两个同步块之间的描述信息段的头部作为所述单元在所述大文件中的起始位置,其中,所述描述信息段为所述长度信息、所述至少一个元数据和所述标识信息的组合。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510377701.1A CN106326292B (zh) | 2015-06-29 | 2015-06-29 | 数据结构和文件聚合、读取方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510377701.1A CN106326292B (zh) | 2015-06-29 | 2015-06-29 | 数据结构和文件聚合、读取方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106326292A CN106326292A (zh) | 2017-01-11 |
CN106326292B true CN106326292B (zh) | 2020-05-19 |
Family
ID=57726648
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510377701.1A Active CN106326292B (zh) | 2015-06-29 | 2015-06-29 | 数据结构和文件聚合、读取方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106326292B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108319625B (zh) * | 2017-01-17 | 2019-10-25 | 广州市动景计算机科技有限公司 | 文件合并方法和装置 |
WO2018133762A1 (zh) * | 2017-01-17 | 2018-07-26 | 广州市动景计算机科技有限公司 | 文件合并方法和装置 |
CN108319602B (zh) * | 2017-01-17 | 2020-10-16 | 阿里巴巴(中国)有限公司 | 数据库管理方法及数据库系统 |
CN106951529A (zh) * | 2017-03-21 | 2017-07-14 | 郑州云海信息技术有限公司 | 一种海量小文件的管理方法及系统 |
US11206627B2 (en) | 2017-04-27 | 2021-12-21 | Beijing Xiaomi Mobile Software Co., Ltd. | System information transmission method and device |
CN108958653A (zh) * | 2018-06-26 | 2018-12-07 | 郑州云海信息技术有限公司 | 一种基于底层聚合文件的空间回收方法、系统及相关装置 |
CN109391787A (zh) * | 2018-09-30 | 2019-02-26 | 武汉中科通达高新技术股份有限公司 | 文件格式、图像聚合及读取方法 |
CN111258955B (zh) * | 2018-11-30 | 2023-09-19 | 北京白山耘科技有限公司 | 一种文件读取方法和系统、存储介质、计算机设备 |
CN111400302B (zh) * | 2019-11-28 | 2023-09-19 | 杭州海康威视系统技术有限公司 | 连续存储数据的修改方法、装置和系统 |
CN111176574B (zh) * | 2019-12-27 | 2022-03-22 | 浪潮电子信息产业股份有限公司 | 一种小文件存储方法、装置、设备及介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102364458A (zh) * | 2011-11-23 | 2012-02-29 | 赵树乔 | 一种文件摘要的提取方法 |
CN103605726A (zh) * | 2013-11-15 | 2014-02-26 | 中安消技术有限公司 | 一种小文件的存取方法、系统及控制节点和存储节点 |
CN104133882A (zh) * | 2014-07-28 | 2014-11-05 | 四川大学 | 一种基于hdfs的小文件处理方法 |
CN104346384A (zh) * | 2013-07-31 | 2015-02-11 | 上海云端广告有限公司 | 一种小文件处理方法及装置 |
CN104462563A (zh) * | 2014-12-26 | 2015-03-25 | 浙江宇视科技有限公司 | 一种文件存储方法和系统 |
-
2015
- 2015-06-29 CN CN201510377701.1A patent/CN106326292B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102364458A (zh) * | 2011-11-23 | 2012-02-29 | 赵树乔 | 一种文件摘要的提取方法 |
CN104346384A (zh) * | 2013-07-31 | 2015-02-11 | 上海云端广告有限公司 | 一种小文件处理方法及装置 |
CN103605726A (zh) * | 2013-11-15 | 2014-02-26 | 中安消技术有限公司 | 一种小文件的存取方法、系统及控制节点和存储节点 |
CN104133882A (zh) * | 2014-07-28 | 2014-11-05 | 四川大学 | 一种基于hdfs的小文件处理方法 |
CN104462563A (zh) * | 2014-12-26 | 2015-03-25 | 浙江宇视科技有限公司 | 一种文件存储方法和系统 |
Also Published As
Publication number | Publication date |
---|---|
CN106326292A (zh) | 2017-01-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106326292B (zh) | 数据结构和文件聚合、读取方法及装置 | |
CN110764706B (zh) | 存储系统、数据管理方法及存储介质 | |
US8825598B2 (en) | Media file synchronization | |
US8099421B2 (en) | File system, and method for storing and searching for file by the same | |
CN104537076A (zh) | 一种文件读写方法及装置 | |
CN109542330B (zh) | 数据存储方法、数据查询方法及装置 | |
CN107092686B (zh) | 一种基于云存储平台的文件管理方法及装置 | |
CN104348859B (zh) | 文件同步方法、装置、服务器、终端及系统 | |
EP3125501A1 (en) | File synchronization method, server, and terminal | |
CN102495777B (zh) | 硬盘故障处理方法及处理装置 | |
CN109240607B (zh) | 一种文件读取方法和装置 | |
CN109885577B (zh) | 数据处理方法、装置、终端及存储介质 | |
CN104462096A (zh) | 舆情监测分析方法和装置 | |
CN107391769B (zh) | 一种索引查询方法及装置 | |
CN112597348A (zh) | 一种大数据存储优化的方法及装置 | |
CN110381128B (zh) | 一种适用于流媒体文件的上传方法和云存储模型 | |
CN110196841B (zh) | 文件的存储方法和装置、查询方法和装置及服务器 | |
CN105912540A (zh) | 文件系统同步的方法及装置 | |
CN113448946B (zh) | 数据迁移方法及装置、电子设备 | |
CN103761194A (zh) | 一种内存管理方法及装置 | |
KR20150089598A (ko) | 요약정보 생성 장치 및 방법, 그리고 컴퓨터 프로그램이 기록된 기록매체 | |
Lu et al. | Research on Cassandra data compaction strategies for time-series data | |
CN106294709B (zh) | 云存储文件的展示方法及装置 | |
CN104135666A (zh) | 一种屏幕图像的插值存储方法、系统及回放方法 | |
CN103886028A (zh) | 从存储设备拷贝文件到广告机的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |