CN115905115A - 文件存储方法、读取方法及装置、电子设备与存储介质 - Google Patents

文件存储方法、读取方法及装置、电子设备与存储介质 Download PDF

Info

Publication number
CN115905115A
CN115905115A CN202110902609.8A CN202110902609A CN115905115A CN 115905115 A CN115905115 A CN 115905115A CN 202110902609 A CN202110902609 A CN 202110902609A CN 115905115 A CN115905115 A CN 115905115A
Authority
CN
China
Prior art keywords
file
address information
storage
stream
files
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
Application number
CN202110902609.8A
Other languages
English (en)
Inventor
高建龙
毛颖
李永超
朱二夫
齐向东
吴云坤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Qianxin Technology Group Co Ltd
Secworld Information Technology Beijing Co Ltd
Original Assignee
Qianxin Technology Group Co Ltd
Secworld Information Technology Beijing Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Qianxin Technology Group Co Ltd, Secworld Information Technology Beijing Co Ltd filed Critical Qianxin Technology Group Co Ltd
Priority to CN202110902609.8A priority Critical patent/CN115905115A/zh
Publication of CN115905115A publication Critical patent/CN115905115A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明提供一种文件存储方法、读取方法及装置、电子设备与存储介质,文件存储方法包括:接收待存储的第一文件;其中,第一文件是容量小于或等于第一阈值的文件;将第一文件的数据写入目标文件流,并记录第一文件的地址信息;其中,第一文件的地址信息描述了第一文件在目标文件流中的写入位置;判断目标文件流的当前容量是否大于或等于预设的第二阈值,在大于或等于第二阈值的情况下,关闭目标文件流,并基于已关闭的目标文件流生成第二文件;对第二文件进行分布式存储,并记录第二文件的地址信息;根据第一文件的地址信息与第二文件的地址信息生成索引信息,存储索引信息。

Description

文件存储方法、读取方法及装置、电子设备与存储介质
技术领域
本发明涉及数据存储技术领域,尤其涉及一种文件存储方法、读取方法及装置、电子设备与存储介质。
背景技术
目前在互联网上,每时每刻都会产生大量的数据。这些数据中有很大一部分比例的数据为小容量的文件(简称小文件),如容量小于10kb的文件。PCAP文件就是一种典型的小文件。
小文件的特点是单个文件容量较小,但文件的整体规模庞大。例如,按照一个互联网站一天产生的数据为1TB计算,若小文件的大小平均为10KB,那么这些数据大约对应1亿个文件。
小文件所包含的信息在网络安全领域具有重要的作用。如可从小文件所包含的信息中分析出网络安全事件发生的原始信息。因此,需要对小文件进行存储。
在现有技术中,可通过磁盘存储的方式存储小文件。
但鉴于小文件所存在的前述特点,采用现有技术中的文件存储方法存储小文件时会面临一些问题,例如,若将小文件直接进行磁盘存储,由于小文件的数据量过于庞大,因此在对小文件进行数据读写的过程中会频繁地对磁盘进行IO操作,导致磁盘IO开销过大;在对已存储的小文件进行备份时,需要对各个文件依次执行备份操作,这就导致备份时间过长。
发明内容
针对现有技术存在的问题,本发明提供一种文件存储方法、读取方法及装置、电子设备与存储介质。
本发明提供一种文件存储方法,包括:
接收待存储的第一文件;其中,所述第一文件是容量小于或等于第一阈值的文件;
将所述第一文件的数据写入目标文件流,并记录所述第一文件的地址信息;其中,所述第一文件的地址信息描述了第一文件在所述目标文件流中的写入位置;
判断所述目标文件流的当前容量是否大于或等于预设的第二阈值,在大于或等于所述第二阈值的情况下,关闭目标文件流,并基于已关闭的所述目标文件流生成第二文件;
对所述第二文件进行分布式存储,并记录所述第二文件的地址信息;
根据所述第一文件的地址信息与所述第二文件的地址信息生成索引信息,存储所述索引信息。
根据本发明提供的一种文件存储方法,所述对所述第二文件进行分布式存储,包括:
将预设的第一时间段内所生成的第二文件在本地缓存,并在所述第一时间段结束后将所述第一时间段内所生成的所有第二文件一并进行分布式存储。
根据本发明提供的一种文件存储方法,所述接收待存储的第一文件,包括:
从预设的文件生成系统获取文件;
从所获取的文件中滤除容量大于第一阈值的文件,得到待存储的第一文件。
根据本发明提供的一种文件存储方法,所述从预设的文件生成系统获取文件,包括:
从预设的文件生成系统获取文件,并计算单位时间内已获取文件的数量或已获取文件的容量之和;
在所述单位时间内已获取文件的数量大于第三阈值或已获取文件的容量之和大于第四阈值的情况下,在从当前时刻开始的第二时间段内停止从预设的文件生成系统获取文件的过程。
根据本发明提供的一种文件存储方法,所述对所述第二文件进行分布式存储,包括:
根据所述第二文件的类型和/或所述第二文件的创建时间,确定所述第二文件的存储路径;
根据所述第二文件的存储路径将所述第二文件存储在分布式文件系统HDFS中。
根据本发明提供的一种文件存储方法,所述存储所述索引信息包括:
根据所述索引信息的创建时间,确定所述索引信息的存储路径;
根据所述索引信息的存储路径将所述索引信息存储在搜索与数据分析引擎ElasticSearch中。
根据本发明提供的一种文件存储方法,所述索引信息包括第一Key-Value值和第二Key-Value值;
相应的,所述根据所述第一文件的地址信息与所述第二文件的地址信息生成索引信息,包括:
根据第一文件的名称与第二文件的地址信息生成第一Key-Value值;
根据第二文件的名称与第一文件的地址信息生成第二Key-Value值。
本发明还提供了一种文件读取方法,包括;
确定待读取的第一文件的名称;其中,所述第一文件是采用所述的文件存储方法存储的;
根据所述第一文件的名称以及索引信息中所包含的第一文件的名称与第二文件的地址信息之间的映射关系,读取第二文件;
根据第二文件的名称以及索引信息中所包含的第二文件的名称与第一文件的地址信息之间的映射关系,读取第一文件的地址信息;
根据第一文件的地址信息,从所述第二文件中读取所述第一文件。
本发明还提供了一种文件存储装置,包括:
第一文件接收模块,用于接收待存储的第一文件;其中,所述第一文件是容量小于或等于第一阈值的文件;
第一文件写入模块,用于将所述第一文件的数据写入目标文件流,并记录所述第一文件的地址信息;其中,所述第一文件的地址信息描述了第一文件在所述目标文件流中的写入位置;
第二文件生成模块,用于判断所述目标文件流的当前容量是否大于或等于预设的第二阈值,在大于或等于所述第二阈值的情况下,关闭目标文件流,并基于已关闭的所述目标文件流生成第二文件;
第二文件存储模块,用于对所述第二文件进行分布式存储,并记录所述第二文件的地址信息;
索引信息存储模块,用于根据所述第一文件的地址信息与所述第二文件的地址信息生成索引信息,存储所述索引信息。
本发明还提供了一种文件读取装置,包括;
第一文件名称确定模块,用于确定待读取的第一文件的名称;其中,所述第一文件是采用所述的文件存储装置存储的;
第二文件读取模块,用于根据所述第一文件的名称以及索引信息中所包含的第一文件的名称与第二文件的地址信息之间的映射关系,读取第二文件;
第一文件地址信息读取模块,用于根据第二文件的名称以及索引信息中所包含的第二文件的名称与第一文件的地址信息之间的映射关系,读取第一文件的地址信息;
第一文件读取模块,用于根据第一文件的地址信息,从所述第二文件中读取所述第一文件。
本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述文件存储方法的步骤,或实现如上述任一种所述文件读取方法的步骤。
本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述文件存储方法的步骤,或实现如上述任一种所述文件读取方法的步骤。
本发明还提供了一种计算机程序产品,所述计算机程序产品包括计算机可执行指令,所述指令在被执行时用于实现如上述任一种所述文件存储方法的步骤,或实现如上述任一种所述文件读取方法的步骤。
本发明提供的文件存储方法、读取方法及装置、电子设备与存储介质,通过合并小容量的文件,然后将合并后的文件进行分布式存储,避免了直接存储小容量文件容易造成磁盘IO次数过高、影响系统整体效率的问题,也能降低海量文件备份的难度,降低了单点故障带来的数据安全风险。
附图说明
为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明提供的文件存储方法的流程示意图;
图2是本发明提供的文件存储方法的应用示意图;
图3是本发明提供的文件存储装置的结构示意图;
图4是本发明提供的文件读取方法的流程示意图;
图5是本发明提供的文件读取装置的结构示意图;
图6是本发明提供的电子设备的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
下面结合图1-图6描述本发明的文件存储方法、读取方法及装置、电子设备与存储介质。
图1为本发明提供的文件存储方法的流程图,如图1所示,本发明提供的文件存储方法包括:
步骤101、接收待存储的第一文件。
在本申请中,文件是指计算机文件,它是存储在计算机上的一段数据流。
第一文件是指需要存储的文件。第一文件的来源可以是多样的,如来自网络、数据库、FTP(File Transfer Protocol,文件传输协议)传输设备、NFS(Network File System,网络文件系统)、Kafka(分布式发布消息订阅系统)等,在本实施例中,不对第一文件的来源进行限制。
本发明提供的文件存储方法主要针对小文件的存储,因此可对第一文件的容量(即文件大小)进行限制。如第一文件的容量应当小于或等于第一阈值,例如所述第一阈值为10KB。
步骤102、将所述第一文件的数据写入目标文件流,并记录所述第一文件的地址信息。
文件流是程序操作文件的二进制对象,文件通过文件流的形式被程序读取,修改与使用。在本实施例中,将写入第一文件数据的文件流记为目标文件流。
作为一种优选实现方式,用于存储数据的文件流可以有多个(如文件流的数目为本地磁盘个数的整数倍),在接收到第一文件后,可从多个文件流中选取一个作为目标文件流,然后将第一文件的数据写入目标文件流。
具体的说,从多个文件流中选取一个作为目标文件流时,可按照多个文件流的顺序选取。例如,按照文件流的创建时间为文件流排序。在选取文件流时,可按照创建时间从远到近的顺序依次选取。
在后续的描述中将会提到,若文件流中被写入数据的大小达到预设的第二阈值,则该文件流将会被关闭,文件流所存储的数据将会以单一文件的形式加以保存。同时,还会打开一个新的文件流继续保存新接收到的第一文件的数据。上述文件流关闭、文件流打开、上传文件的操作都需要耗费一定的时间,因此,设置多个文件流并从多个文件流中选取目标文件流的方式有助于降低整体的运行时间。
将第一文件的数据写入目标文件流时,需要为第一文件封装一个文件头,所述文件头描述了第一文件的数据长度。
在将第一文件的数据写入目标文件流后,能得到第一文件的地址信息,第一文件的地址信息描述了第一文件在目标文件流中的写入位置。
在本实施例中,所述地址信息为地址偏移量。地址偏移量描述了第一文件的起始写入位置与目标文件流的起始位置之间的差值。在之后的描述中将会提到,根据目标文件流可以生成合并后文件(即后文中提到的第二文件),因此第一文件在目标文件流中的位置与第一文件在合并后文件中的位置是一样的,即地址偏移量实际上也反映了第一文件在合并后文件中的写入位置。例如,名称为xxx.pacp的第一文件在名称为ewrwe_20210302的合并后文件中的地址偏移量为21212,这意味着xxx.pacp文件在ewrwe_20210302中从21212bytes位开始读取文件流信息。
步骤103、判断所述目标文件流的当前容量是否大于或等于预设的第二阈值,在大于或等于所述第二阈值的情况下,关闭目标文件流,并基于已关闭的所述目标文件流生成第二文件。
在将第一文件的数据写入目标文件流之后,目标文件流的大小会发生变化。此时,需要对目标文件流的当前容量是否大于或等于第二阈值进行判断。如果大于或等于第二阈值,说明目标文件流已经合并了足够数量的第一文件,继续合并第一文件将不利于合并后文件的存储,因此,关闭目标文件流。
需要说明的是,目标文件流被关闭后,通常情况下还会有新的第一文件被实时输入以进行合并,因此同时还需要创建一个新的文件流,以代替已关闭的目标文件流。后续新输入的第一文件的数据可写入新创建的文件流。
在本实施例中,第二阈值的大小为128M。在其他实施例中,可对第二阈值的大小进行调整。
目标文件流被关闭,说明已经有多个第一文件被合并在一起,此时需要根据这些合并后的数据生成第二文件。
在生成第二文件时,需要为第二文件命名。在本实施例中,在为第二文件命名时可采用“合并文件生成时间+随机数”的方式。例如,某一第二文件的名称为“abicq90u23-20210415”,其中的“abicq90u23”为随机数,“20210415”为合并文件生成时间。
步骤104、对所述第二文件进行分布式存储,并记录所述第二文件的地址信息。
在对第二文件进行存储时,可采用按照文件的类型进行分区存储,和/或按照时间进行分区存储的存储方式。例如,PCAP文件是一种小文件,window日志是另一种小文件。对这两类小文件需要在不同的区域进行存储。又如,以“天”为时间粒度单位对第二文件进行分区存储,2021年1月1日生成的第二文件与2021年1月2日生成的第二文件存储在不同的区域内。两种分区存储方式可以同时实现,或者择一实现。例如,若不同类型的第一文件写入同一第二文件,那么在存储该第二文件时,由于无法确定第二文件的文件类型,因此一般只按照时间进行分区存储。但若相同类型的第一文件写入同一第二文件,那么在存储该第二文件时,既可以只按照时间进行分区存储,也可以只按照文件类型进行分区存储,还可以同时按照文件类型和时间进行分区存储。
根据上述存储方式,可得到第二文件在存储时的存储路径。例如,某一第二文件同时按照文件类型和时间进行分区存储,其路径为C:/pcap/20210415/abicq90u23-20210415。其中,“pcap”代表文件类型,“20210415”代表时间信息,“abicq90u23-20210415”代表第二文件的名称。
将第二文件进行分布式存储是指将第二文件存储在分布式文件系统中。所述的分布式文件系统是指文件系统所管理的物理存储资源分布在多个通过计算机网络连接的节点上。在本实施例中,分布式文件系统为HDFS(Hadoop Distributed File System)。
采用HDFS存储第二文件时,可利用HDFS的副本放置策略实现对第二文件的备份。具体的说,可为第二文件复制三个副本,将第一个副本放在本地节点,将第二个副本放到本地机架上的另外一个节点而将第三个副本放到不同机架上的节点。这种方式提高了写的性能,并且不影响数据的可靠性和读性能,有助于解决小文件备份困难的问题。此外,由于HDFS为分布式存储系统,数据存储于多个节点,因此单点故障不影响数据安全。HDFS中的节点可根据需要扩展,可以方便地增加文件的存储容量。
步骤105、根据所述第一文件的地址信息与所述第二文件的地址信息生成索引信息,存储所述索引信息。
将第一文件合并为第二文件,并在分布式文件系统上存储第二文件的同时,还需要生成对应的用于描述第一文件与第二文件之间对应关系的索引信息,以便于读取第一文件。
所述索引信息应当包含第二文件的地址信息,从而可以从分布式文件系统中读取第二文件。所述索引信息还应当包含第一文件的地址信息,由于第一文件的地址信息描述了第一文件在第二文件中的写入位置,因此可以根据第一文件的地址信息从第二文件中读取第一文件。
在存储索引数据时,可按照索引数据的创建时间对索引数据进行分区存储,进而确定索引信息的存储路径。例如,以“天”为时间粒度单位对索引数据进行分区存储,2021年1月1日生成的索引数据与2021年1月2日生成的索引数据存储在不同的区域内。所对应的存储路径分别为D:/20210101,以及D:/20210102。
索引数据的数据量级和第一文件的数据量级是对等的,数据量十分巨大。为了实现大数据量的快速查找,在本实施例中,将索引数据存储到ElasticSearch中。ElasticSearch是一个分布式、高扩展、高实时的搜索与数据分析引擎。利用ElasticSearch,可实现对索引数据的快速查找。
本发明提供的文件存储方法通过合并小容量的文件,然后将合并后的文件进行分布式存储,避免了直接存储小容量文件容易造成磁盘IO次数过高、影响系统整体效率的问题,也能降低海量文件备份的难度,降低了单点故障带来的数据安全风险。
基于上述任一实施例,在本实施例中,所述对所述第二文件进行分布式存储,包括:
将预设的第一时间段内所生成的第二文件在本地缓存,并在所述第一时间段结束后将所述第一时间段内所生成的所有第二文件一并进行分布式存储。
在一些应用场景中,第一文件的采集量十分庞大,若第二文件一生成就进行分布式存储,将会使得系统频繁地进行存储操作,影响系统的总体性能。因此在本实施例中,当生成第二文件时,并不立即将第二文件进行分布式存储,而是先在本地缓存,待预设的第一时间段结束后,将第一时间段内所生成的所有第二文件一并进行分布式存储。这样做有助于减少IO操作的次数,提升系统的总体效率。
需要说明的是,所生成的第二文件在本地缓存将占据本地的存储资源,若缓存的第二文件的数据量大于本地空余存储空间的规模,将会导致数据溢出的风险。因此,需要合理设置第一时间段的长度,保证在第一时间段内所缓存的第二文件的数据量小于本地空余存储空间的规模。在本实施例中,可将第一时间段的长度设置为30秒。在其他实施例中,基于性能、稳定性等多方面因素的考虑,也可对第一时间段的长度进行调整。
此外,将第二文件进行存储与生成对应的索引数据是一个同步的过程,因此,在第一时间段结束后将第一时间段内所生成的所有第二文件一并进行分布式存储,也就意味着索引数据的生成与存储也会间隔第一时间段。
本发明提供的文件存储方法通过将合并后的文件定时上传,能够减少IO操作的次数,提升系统的总体效率。
基于上述任一实施例,在本实施例中,所述接收待存储的第一文件,包括:
从预设的文件生成系统获取文件;
从所获取的文件中滤除容量大于第一阈值的文件,得到待存储的第一文件。
本发明提供的文件存储方法可应用于多种类型的文件生成系统,如可从网络、数据库、FTP(File Transfer Protocol,文件传输协议)传输设备、NFS(Network FileSystem,网络文件系统)、Kafka(分布式发布消息订阅系统)等多种文件生成系统获取文件。
这些文件生成系统所生成的文件有多种类型,不同类型文件的容量各不相同。鉴于本发明的文件存储方法的目的是要将小容量的文件进行合并存储,因此还需要对从文件生成系统所获取的文件进行容量过滤,即从所获取的文件中滤除容量大于第一阈值的文件。
第一阈值的大小可根据实际需要确定,如第一阈值的大小可设定为10KB。
本发明提供的文件存储方法通过对所获取的文件进行容量过滤,实现了对小容量文件的获取,能够避免小容量文件与大容量文件的混杂,有助于实现对小容量文件的后续存储。
基于上述任一实施例,在本实施例中,所述从预设的文件生成系统获取文件,包括:
从预设的文件生成系统获取文件,并计算单位时间内已获取文件的数量或已获取文件的容量之和;
在所述单位时间内已获取文件的数量大于第三阈值或已获取文件的容量之和大于第四阈值的情况下,在从当前时刻开始的第二时间段内停止从预设的文件生成系统获取文件的过程。
本发明提供的文件存储方法需要运行在物理设备上。本领域技术人员所公知,物理设备的资源,如计算处理能力、存储能力,都是有限的。为物理设备配置无限的资源,需要耗费极大的成本。
但本发明的文件存储方法所对应的文件生成系统所生成文件的数量可能是无限的,如文件生成系统为网络的情况。为了避免从文件生成系统所获取文件的数量或所获取文件的容量之和过于庞大,超出物理设备的处理能力,在本实施例中,需要对所获取的文件进行限流。
即:首先计算单位时间内已获取文件的数量或已获取文件的容量之和;一旦发现单位时间内已获取文件的数量大于第三阈值或已获取文件的容量之和大于第四阈值,那么就需要暂停从文件生成系统获取文件的过程,如在从当前时刻开始的第二时间段内停止从预设的文件生成系统获取文件的过程。所述第二时间段的长度可根据物理设备的处理能力而定,如第二时间段可设置为5秒。
本发明提供的文件存储方法通过对获取文件的过程进行流量限制,能够避免因为本地设备存储空间有限而造成的溢出风险。
基于上述任一实施例,在本实施例中,所述索引信息包括第一Key-Value值和第二Key-Value值;
相应的,所述根据所述第一文件的地址信息与所述第二文件的地址信息生成索引信息,包括:
根据第一文件的名称与第二文件的地址信息生成第一Key-Value值;
根据第二文件的名称与第一文件的地址信息生成第二Key-Value值。
在之前的实施例中,对索引信息的作用以及存储过程做了描述。在本实施例中,对索引信息的一种具体实现方式进行说明。
在本实施例中,索引信息可采用Key-Value值的形式。具体的说,索引信息包括第一Key-Value值和第二Key-Value值。
在第一Key-Value值中,Key描述第一文件的名称,Value描述第二文件的地址信息。第一文件的名称也就是第一文件被合并前的原始名称,第二文件的地址信息是第二文件存储在分布式文件系统中的路径信息。在之前的实施例中,已经对第二文件的地址信息的生成过程做了详细说明。基于第一Key-Value值以及第一文件的名称,可查找到第二文件的存储地址。
在第二Key-Value值中,Key描述第二文件的名称,Value描述第一文件的地址信息。例如,名称为xxx.pacp的第一文件被合并到名称为ewrwe_20210302的第二文件,且地址偏移量为21212。该第一文件对应的Key-Value值为ewrwe_20210302-21212。利用该Key-Value值,可以知道:若要读取名称为xxx.pacp的第一文件,可从名称为ewrwe_20210302的第二文件的起始位置开始的第21212个bytes位开始。
综合前述的第一Key-Value值和第二Key-Value值,可实现对第一文件的查找。
可选的,索引信息除了前述的第一Key-Value值和第二Key-Value值,还可包括第一文件的长度、第一文件的合并日期、第一文件的类型等信息。通过这些信息可实现对第一文件多种方式的查找。
本发明提供的文件存储方法通过Key-Value值的形式表示索引信息,有助于加快索引信息的查找速度,提高文件的读取效率。
下面结合具体的实例,对本发明的文件存储方法进行说明。
图2为本发明提供的文件存储方法的应用示意图。如图2所示,在一个文件管理器中可采用本发明提供的文件存储方法。该文件管理器中的文件接收适配器从诸如网络、数据库、文件系统、FTP传输设备、NFS、Kafka等设备获取文件。文件接收适配器在接收文件的同时,可对文件进行过滤,滤除容量大于第一阈值的文件,保留小文件;还可对文件的接收过程进行流量控制,避免本地存储资源不足而产生溢出风险。
文件接收适配器在接收小文件的同时,还会在本地初始化多个文件流,这些文件流用于存储所接收到的小文件的数据包。每个文件流对应一个文件IO进程,文件IO进程的并发数建议为磁盘个数的整数倍。
文件接收适配器每接收到一个小文件,给小文件封装一个文件头,然后写入其中一个文件流中,同时返回用于描述小文件在被写入文件流中的写入位置的地址偏移量。
将小文件的数据写入文件流后,判断文件流的容量是否达到阈值(可配置,默认为128M),若达到则关闭文件流,生成合并后文件并提交分布式存储系统(HDFS);同时创建一个新的文件流。合并后文件的命名规则可以是时间+随机数;合并后文件的存储路径为:/业务分区/时间分区。时间分区默认按天,可根据实际情况配置。
在将合并后文件提交分布式存储系统存储的同时,还会生成索引数据,索引数据可采用ES存储。索引数据在存储时可按照时间进行分区存储。
合并后文件可实时上传分布式存储系统,也可定时上传分布式存储系统。
若定时上传分布式存储系统,则合并后文件上传至HDFS的操作由定时任务触发,目前设计上传间隔为30s(可配置,在配置时需要考虑性能、稳定性等因素)。到达时间间隔即触发文件上传至HDFS的操作、索引数据批量入库的操作以及本地已上传缓存数据删除等操作。
为了降低对系统稳定性的影响,小文件在本地(文件管理器)当前只保留近三天(支持后台配置)的数据,每天会定时删除过期数据,删除顺序为:ES索引数据、HDFS文件、本地残留临时文件。
下面对本发明提供的文件存储装置进行描述,下文描述的文件存储装置与上文描述的文件存储方法可相互对应参照。
图3为本发明提供的文件存储装置的示意图,如图3所示,本发明提供的文件存储装置包括:
第一文件接收模块301,用于接收待存储的第一文件;其中,所述第一文件是容量小于或等于第一阈值的文件;
第一文件写入模块302,用于将所述第一文件的数据写入目标文件流,并记录所述第一文件的地址信息;其中,所述第一文件的地址信息描述了第一文件在所述目标文件流中的写入位置;
第二文件生成模块303,用于判断所述目标文件流的当前容量是否大于或等于预设的第二阈值,在大于或等于所述第二阈值的情况下,关闭目标文件流,并基于已关闭的所述目标文件流生成第二文件;
第二文件存储模块304,用于对所述第二文件进行分布式存储,并记录所述第二文件的地址信息;
索引信息存储模块305,用于根据所述第一文件的地址信息与所述第二文件的地址信息生成索引信息,存储所述索引信息。
本发明提供的文件存储装置通过合并小容量的文件,然后将合并后的文件进行分布式存储,避免了直接存储小容量文件容易造成磁盘IO次数过高、影响系统整体效率的问题,也能降低海量文件备份的难度,降低了单点故障带来的数据安全风险。
基于上述任一实施例,在本实施例中,第二文件存储模块304具体用于:
将预设的第一时间段内所生成的第二文件在本地缓存,并在所述第一时间段结束后将所述第一时间段内所生成的所有第二文件一并进行分布式存储。
本发明提供的文件存储装置通过将合并后的文件定时上传,能够减少IO操作的次数,提升系统的总体效率。
基于上述任一实施例,在本实施例中,所述第一文件接收模块301具体用于:
从预设的文件生成系统获取文件;
从所获取的文件中滤除容量大于第一阈值的文件,得到待存储的第一文件。
本发明提供的文件存储装置通过对所获取的文件进行容量过滤,实现了对小容量文件的获取,能够避免小容量文件与大容量文件的混杂,有助于实现对小容量文件的后续存储。
基于上述任一实施例,在本实施例中,所述从预设的文件生成系统获取文件,包括:
从预设的文件生成系统获取文件,并计算单位时间内已获取文件的数量或已获取文件的容量之和;
在所述单位时间内已获取文件的数量大于第三阈值或已获取文件的容量之和大于第四阈值的情况下,在从当前时刻开始的第二时间段内停止从预设的文件生成系统获取文件的过程。
本发明提供的文件存储装置通过对获取文件的过程进行流量限制,能够避免因为本地设备存储空间有限而造成的溢出风险。
基于上述任一实施例,在本实施例中,第二文件存储模块304具体用于:
根据所述第二文件的类型和/或所述第二文件的创建时间,确定所述第二文件的存储路径;
根据所述第二文件的存储路径将所述第二文件存储在分布式文件系统HDFS中。
本发明提供的文件存储装置通过将合并后的文件存储在分布式存储系统,有助于利用分布式存储系统中的副本功能降低备份难度,有助于降低因为故障导致的数据安全风险,有助于实现容量的扩展。
基于上述任一实施例,在本实施例中,所述索引信息存储模块305具体用于:
根据所述索引信息的创建时间,确定所述索引信息的存储路径;
根据所述索引信息的存储路径将所述索引信息存储在搜索与数据分析引擎ElasticSearch中。
本发明提供的文件存储装置通过将索引信息存储在搜索与数据分析引擎ElasticSearch中,有助于实现索引信息的快速查找,提高文件读取的效率。
基于上述任一实施例,在本实施例中,所述索引信息包括第一Key-Value值和第二Key-Value值;
相应的,所述索引信息存储模块305具体用于:
根据第一文件的名称与第二文件的地址信息生成第一Key-Value值;
根据第二文件的名称与第一文件的地址信息生成第二Key-Value值。
本发明提供的文件存储装置通过Key-Value值的形式表示索引信息,有助于加快索引信息的查找速度,提高文件的读取效率。
本发明的另一实施例还提供了一种文件读取方法,图4为本发明提供的文件读取方法的流程图,如图4所示,本发明提供的文件读取方法,包括;
步骤401、确定待读取的第一文件的名称;其中,所述第一文件是采用所述的文件存储方法存储的;
步骤402、根据所述第一文件的名称以及索引信息中所包含的第一文件的名称与第二文件的地址信息之间的映射关系,读取第二文件;
步骤403、根据第二文件的名称以及索引信息中所包含的第二文件的名称与第一文件的地址信息之间的映射关系,读取第一文件的地址信息;
步骤404、根据第一文件的地址信息,从所述第二文件中读取所述第一文件。
在之前的实施例中,已经对小容量的第一文件进行合并,生成第二文件,然后存储第二文件的过程做了说明。在本实施例中,将对第一文件的读取过程进行说明。
由于第一文件已经被合并到第二文件中,因此显然无法直接读取第一文件。需要借助索引信息,首先得到与所要读取的第一文件所对应的第二文件,然后再从第二文件中读取第一文件。
以索引信息包括第一Key-Value值、第二Key-Value值为例。在第一Key-Value值中,Key描述第一文件的名称(即第一文件被合并前的原始名称),Value描述第二文件的地址信息。在读取第一文件时,一般已知第一文件的名称,因此可根据第一Key-Value值与第一文件的名称,得到第二文件的存储地址。
根据第二文件的存储地址,可得到第二文件。在第二Key-Value值中,Key描述第二文件的名称,Value描述第一文件的地址信息。在已知第二文件的名称的前提下,可得到第一文件的地址信息。由于第一文件的地址信息描述了第一文件在第二文件中的写入位置,因此在第二文件已知的前提下,可根据第一文件的地址信息从第二文件中读取出第一文件。
例如,名称为xxx.pacp的第一文件被合并到名称为ewrwe_20210302的第二文件,且地址偏移量为21212。第二文件的存储地址为C:/pacp/20210302/ewrwe_20210302。
对应的第一Key-Value值为:xxx.pacp-C:/pacp/20210302/ewrwe_20210302,第二Key-Value值为:ewrwe_20210302-21212。由第一Key-Value值可知道第一文件xxx.pacp所对应的存储地址为C:/pacp/20210302/ewrwe_20210302。根据这一存储地址可得到第二文件ewrwe_20210302。进而根据第二Key-Value值,可从名称为ewrwe_20210302的第二文件的起始位置开始的第21212个bytes位开始,读取第一文件xxx.pacp。
可选的,索引信息除了前述的第一Key-Value值和第二Key-Value值,还可包括第一文件的长度、第一文件的合并日期等信息。通过这些信息可通过文件长度、文件的合并日期等其他方式查找并读取第一文件。
本发明提供的文件读取方法通过索引数据能够从合并后文件中快速查找出合并前的小文件,实现对小文件的快速读取。
下面对本发明提供的文件读取装置进行描述,下文描述的文件读取装置与上文描述的文件读取方法可相互对应参照。
图5为本发明提供的文件读取装置的示意图,如图5所示,本发明提供的文件读取装置包括:
第一文件名称确定模块501,用于确定待读取的第一文件的名称;其中,所述第一文件是采用所述文件存储装置存储的;
第二文件读取模块502,用于根据所述第一文件的名称以及索引信息中所包含的第一文件的名称与第二文件的地址信息之间的映射关系,读取第二文件;
第一文件地址信息读取模块503,用于根据第二文件的名称以及索引信息中所包含的第二文件的名称与第一文件的地址信息之间的映射关系,读取第一文件的地址信息;
第一文件读取模块504,用于根据第一文件的地址信息,从所述第二文件中读取所述第一文件。
本发明提供的文件读取装置通过索引数据能够从合并后文件中快速查找出合并前的小文件,实现对小文件的快速读取。
图6示例了一种电子设备的实体结构示意图,如图6所示,该电子设备可以包括:处理器(processor)610、通信接口(Communications Interface)620、存储器(memory)630和通信总线640,其中,处理器610,通信接口620,存储器630通过通信总线640完成相互间的通信。处理器610可以调用存储器630中的逻辑指令,以执行文件存储方法,该方法包括:
接收待存储的第一文件;其中,所述第一文件是容量小于或等于第一阈值的文件;
将所述第一文件的数据写入目标文件流,并记录所述第一文件的地址信息;其中,所述第一文件的地址信息描述了第一文件在所述目标文件流中的写入位置;
判断所述目标文件流的当前容量是否大于或等于预设的第二阈值,在大于或等于所述第二阈值的情况下,关闭目标文件流,并基于已关闭的所述目标文件流生成第二文件;
对所述第二文件进行分布式存储,并记录所述第二文件的地址信息;
根据所述第一文件的地址信息与所述第二文件的地址信息生成索引信息,存储所述索引信息。
或执行文件读取方法,该方法包括:
确定待读取的第一文件的名称;其中,所述第一文件是采用所述的文件存储方法存储的;
根据所述第一文件的名称以及索引信息中所包含的第一文件的名称与第二文件的地址信息之间的映射关系,读取第二文件;
根据第二文件的名称以及索引信息中所包含的第二文件的名称与第一文件的地址信息之间的映射关系,读取第一文件的地址信息;
根据第一文件的地址信息,从所述第二文件中读取所述第一文件。
此外,上述的存储器630中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法所提供的文件存储方法,该方法包括:
接收待存储的第一文件;其中,所述第一文件是容量小于或等于第一阈值的文件;
将所述第一文件的数据写入目标文件流,并记录所述第一文件的地址信息;其中,所述第一文件的地址信息描述了第一文件在所述目标文件流中的写入位置;
判断所述目标文件流的当前容量是否大于或等于预设的第二阈值,在大于或等于所述第二阈值的情况下,关闭目标文件流,并基于已关闭的所述目标文件流生成第二文件;
对所述第二文件进行分布式存储,并记录所述第二文件的地址信息;
根据所述第一文件的地址信息与所述第二文件的地址信息生成索引信息,存储所述索引信息。
或执行文件读取方法,该方法包括:
确定待读取的第一文件的名称;其中,所述第一文件是采用所述的文件存储方法存储的;
根据所述第一文件的名称以及索引信息中所包含的第一文件的名称与第二文件的地址信息之间的映射关系,读取第二文件;
根据第二文件的名称以及索引信息中所包含的第二文件的名称与第一文件的地址信息之间的映射关系,读取第一文件的地址信息;
根据第一文件的地址信息,从所述第二文件中读取所述第一文件。
又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各提供的文件存储方法,该方法包括:
接收待存储的第一文件;其中,所述第一文件是容量小于或等于第一阈值的文件;
将所述第一文件的数据写入目标文件流,并记录所述第一文件的地址信息;其中,所述第一文件的地址信息描述了第一文件在所述目标文件流中的写入位置;
判断所述目标文件流的当前容量是否大于或等于预设的第二阈值,在大于或等于所述第二阈值的情况下,关闭目标文件流,并基于已关闭的所述目标文件流生成第二文件;
对所述第二文件进行分布式存储,并记录所述第二文件的地址信息;
根据所述第一文件的地址信息与所述第二文件的地址信息生成索引信息,存储所述索引信息。
或执行文件读取方法,该方法包括:
确定待读取的第一文件的名称;其中,所述第一文件是采用所述的文件存储方法存储的;
根据所述第一文件的名称以及索引信息中所包含的第一文件的名称与第二文件的地址信息之间的映射关系,读取第二文件;
根据第二文件的名称以及索引信息中所包含的第二文件的名称与第一文件的地址信息之间的映射关系,读取第一文件的地址信息;
根据第一文件的地址信息,从所述第二文件中读取所述第一文件。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (13)

1.一种文件存储方法,其特征在于,包括:
接收待存储的第一文件;其中,所述第一文件是容量小于或等于第一阈值的文件;
将所述第一文件的数据写入目标文件流,并记录所述第一文件的地址信息;其中,所述第一文件的地址信息描述了第一文件在所述目标文件流中的写入位置;
判断所述目标文件流的当前容量是否大于或等于预设的第二阈值,在大于或等于所述第二阈值的情况下,关闭目标文件流,并基于已关闭的所述目标文件流生成第二文件;
对所述第二文件进行分布式存储,并记录所述第二文件的地址信息;
根据所述第一文件的地址信息与所述第二文件的地址信息生成索引信息,存储所述索引信息。
2.根据权利要求1所述的文件存储方法,其特征在于,所述对所述第二文件进行分布式存储,包括:
将预设的第一时间段内所生成的第二文件在本地缓存,并在所述第一时间段结束后将所述第一时间段内所生成的所有第二文件一并进行分布式存储。
3.根据权利要求1所述的文件存储方法,其特征在于,所述接收待存储的第一文件,包括:
从预设的文件生成系统获取文件;
从所获取的文件中滤除容量大于第一阈值的文件,得到待存储的第一文件。
4.根据权利要求3所述的文件存储方法,其特征在于,所述从预设的文件生成系统获取文件,包括:
从预设的文件生成系统获取文件,并计算单位时间内已获取文件的数量或已获取文件的容量之和;
在所述单位时间内已获取文件的数量大于第三阈值或已获取文件的容量之和大于第四阈值的情况下,在从当前时刻开始的第二时间段内停止从预设的文件生成系统获取文件的过程。
5.根据权利要求1所述的文件存储方法,其特征在于,所述对所述第二文件进行分布式存储,包括:
根据所述第二文件的类型和/或所述第二文件的创建时间,确定所述第二文件的存储路径;
根据所述第二文件的存储路径将所述第二文件存储在分布式文件系统HDFS中。
6.根据权利要求1所述的文件存储方法,其特征在于,所述存储所述索引信息包括:
根据所述索引信息的创建时间,确定所述索引信息的存储路径;
根据所述索引信息的存储路径将所述索引信息存储在搜索与数据分析引擎ElasticSearch中。
7.根据权利要求1所述的文件存储方法,其特征在于,所述索引信息包括第一Key-Value值和第二Key-Value值;
相应的,所述根据所述第一文件的地址信息与所述第二文件的地址信息生成索引信息,包括:
根据第一文件的名称与第二文件的地址信息生成第一Key-Value值;
根据第二文件的名称与第一文件的地址信息生成第二Key-Value值。
8.一种文件读取方法,其特征在于,包括;
确定待读取的第一文件的名称;其中,所述第一文件是采用权利要求1至7任一项所述的文件存储方法存储的;
根据所述第一文件的名称以及索引信息中所包含的第一文件的名称与第二文件的地址信息之间的映射关系,读取第二文件;
根据第二文件的名称以及索引信息中所包含的第二文件的名称与第一文件的地址信息之间的映射关系,读取第一文件的地址信息;
根据第一文件的地址信息,从所述第二文件中读取所述第一文件。
9.一种文件存储装置,其特征在于,包括:
第一文件接收模块,用于接收待存储的第一文件;其中,所述第一文件是容量小于或等于第一阈值的文件;
第一文件写入模块,用于将所述第一文件的数据写入目标文件流,并记录所述第一文件的地址信息;其中,所述第一文件的地址信息描述了第一文件在所述目标文件流中的写入位置;
第二文件生成模块,用于判断所述目标文件流的当前容量是否大于或等于预设的第二阈值,在大于或等于所述第二阈值的情况下,关闭目标文件流,并基于已关闭的所述目标文件流生成第二文件;
第二文件存储模块,用于对所述第二文件进行分布式存储,并记录所述第二文件的地址信息;
索引信息存储模块,用于根据所述第一文件的地址信息与所述第二文件的地址信息生成索引信息,存储所述索引信息。
10.一种文件读取装置,其特征在于,包括;
第一文件名称确定模块,用于确定待读取的第一文件的名称;其中,所述第一文件是采用权利要求9所述的文件存储装置存储的;
第二文件读取模块,用于根据所述第一文件的名称以及索引信息中所包含的第一文件的名称与第二文件的地址信息之间的映射关系,读取第二文件;
第一文件地址信息读取模块,用于根据第二文件的名称以及索引信息中所包含的第二文件的名称与第一文件的地址信息之间的映射关系,读取第一文件的地址信息;
第一文件读取模块,用于根据第一文件的地址信息,从所述第二文件中读取所述第一文件。
11.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至7任一项所述文件存储方法的步骤,或实现如权利要求8所述文件读取方法的步骤。
12.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述文件存储方法的步骤,或实现如权利要求8所述文件读取方法的步骤。
13.一种计算机程序产品,所述计算机程序产品包括计算机可执行指令,其特征在于,所述指令在被执行时用于实现如权利要求1至7任一项所述文件存储方法的步骤,或实现如权利要求8所述文件读取方法的步骤。
CN202110902609.8A 2021-08-06 2021-08-06 文件存储方法、读取方法及装置、电子设备与存储介质 Pending CN115905115A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110902609.8A CN115905115A (zh) 2021-08-06 2021-08-06 文件存储方法、读取方法及装置、电子设备与存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110902609.8A CN115905115A (zh) 2021-08-06 2021-08-06 文件存储方法、读取方法及装置、电子设备与存储介质

Publications (1)

Publication Number Publication Date
CN115905115A true CN115905115A (zh) 2023-04-04

Family

ID=86488448

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110902609.8A Pending CN115905115A (zh) 2021-08-06 2021-08-06 文件存储方法、读取方法及装置、电子设备与存储介质

Country Status (1)

Country Link
CN (1) CN115905115A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117076387A (zh) * 2023-08-22 2023-11-17 北京天华星航科技有限公司 基于磁带的海量小文件的快速归档恢复系统

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117076387A (zh) * 2023-08-22 2023-11-17 北京天华星航科技有限公司 基于磁带的海量小文件的快速归档恢复系统
CN117076387B (zh) * 2023-08-22 2024-03-01 北京天华星航科技有限公司 基于磁带的海量小文件的快速归档恢复系统

Similar Documents

Publication Publication Date Title
US20210056074A1 (en) File System Data Access Method and File System
US9495379B2 (en) Locality aware, two-level fingerprint caching
US11232073B2 (en) Method and apparatus for file compaction in key-value store system
CN106484906B (zh) 一种分布式对象存储系统闪回方法及装置
CN108255647B (zh) 一种samba服务器集群下的高速数据备份方法
CN111258978B (zh) 一种数据存储的方法
CN110647497A (zh) 一种基于hdfs的高性能文件存储与管理系统
CN107832423B (zh) 一种用于分布式文件系统的文件读写方法
CN104965835B (zh) 一种分布式文件系统的文件读写方法及装置
CN109460345A (zh) 实时数据的计算方法及系统
CN115905115A (zh) 文件存储方法、读取方法及装置、电子设备与存储介质
CN107566341B (zh) 一种基于联邦分布式文件存储系统的数据持久化存储方法及系统
CN110866068B (zh) 一种基于hdfs的公告数据存储方法及其装置
JP2023531751A (ja) 車載データ記憶方法およびシステム
CN110298031B (zh) 一种词典服务系统及模型版本一致性配送方法
CN112000623A (zh) 一种元数据的存取方法、装置和计算机可读存储介质
CN115509440A (zh) 存储系统及数据处理方法
US11886439B1 (en) Asynchronous change data capture for direct external transmission
CN111399753B (zh) 写入图片的方法和装置
CN110737635B (zh) 一种数据分块方法
CN110941591A (zh) 一种文件删除方法、装置、设备及可读存储介质
CN112269763A (zh) 一种文件聚合方法及相关装置
CN117176743B (zh) 数据处理方法、装置、设备、可读存储介质及程序产品
CN109739434A (zh) 文件读取地址获取方法、文件读取方法和终端设备
CN117255101B (zh) 分布式存储系统的数据处理方法、装置、设备及介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination