CN104123280A - 文件比对方法和设备 - Google Patents
文件比对方法和设备 Download PDFInfo
- Publication number
- CN104123280A CN104123280A CN201310144068.2A CN201310144068A CN104123280A CN 104123280 A CN104123280 A CN 104123280A CN 201310144068 A CN201310144068 A CN 201310144068A CN 104123280 A CN104123280 A CN 104123280A
- Authority
- CN
- China
- Prior art keywords
- data
- index
- file
- comparison
- indexes
- 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.)
- Granted
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)
Abstract
本发明公开了一种文件比对方法,包括:对所述文件中的数据进行分块读取;对于已经分块读取的数据,按照适当的方式进行数据比对;如果所述数据之间的索引不匹配,则在索引数组中进行二次匹配,其中,所述索引数组用于存放比对过程中没有匹配的索引记录,以及将比对的结果输出到结果文件中。本发明还公开了一种用于对文件进行比对的设备。
Description
技术领域
本发明涉及文件处理领域,尤其涉及文件比对方法和设备。
背景技术
目前,在比对文件时通常需要将对比的文件全部读入内存中来进行处理,这往往会大量占用系统资源,导致效率较低。
为了解决该问题,在现有技术,例如公开号为CN102693302A、发明名称为“快速文件比对方法、系统及客户端”的发明专利中,提出了一种基于标识树的文件系统比对方法。在该发明专利中,发明人提出对本地文件目录进行扫描分析,并根据本地文件系统的变化来更新客户端维护的标识树。标识树中的各个节点与客户端的本地文件系统结构中的各个目录相对应。通过标识树中逐个节点之间的比较,可以快速发现差异节点,找出变化文件。
这种方案或许对找出变化文件有效,但并不能解决文件比对时效率低下的问题,更不能解决遇到大文件或超大文件(例如单个文件大小超过1GB的文件)比较时,内存出现瓶颈,甚至出现程序崩溃的问题。
发明内容
为解决上述问题,根据本发明的一个方面,提供了一种文件比对方法,包括:对所述文件中的数据进行分块读取;对于已经分块读取的数据,按照适当的方式进行数据比对;如果所述数据之间的索引不匹配,则在索引数组中进行二次匹配,其中,所述索引数组用于存放比对过程中没有匹配的索引记录,以及将比对的结果输出到结果文件中。
在上述方法中,分块读取的数据为固定大小的数据块。
在上述方法中,对所述文件中的数据进行分块读取包括:读入固定大小的数据块;判断读入的数据块中末位是否为行结束符或文件结束符;以及如果读入的数据块中末尾既不是行结束符也不是文件结束符,则删除最后一个行结束符后的数据,并将下一次读取起始位置设置为最后一个行结束符位置。
在上述方法中,所述分块读取与所述数据比对并行执行。
在上述方法中,对于已经分块读取的数据,按照适当的方式进行数据比对包括:提取两边对比数据的索引;以及如果索引匹配的话,则对所述数据按行进行拆分比对。
在上述方法中,在索引数组中进行二次匹配包括:遍历所述索引数组;以及如果存在匹配的索引,则对该索引指定的行数据进行比较,并在所述索引数组中删除该索引;如果不存在匹配的索引,则将与该索引对应的信息写入所述索引数组中。
根据本发明的另一个方面,提供了一种用于对文件进行比对的设备,包括:文件块读取装置,用于对所述文件中的数据进行分块读取;文件数据比对装置,用于对于已经分块读取的数据,按照适当的方式进行数据比对;二次匹配装置,用于在所述数据之间的索引不匹配时在索引数组中进行二次匹配,其中,所述索引数组用于存放比对过程中没有匹配的索引记录,以及结果输出装置,用于将比对的结果输出到结果文件中。
在上述设备中,分块读取的数据为固定大小的数据块。
在上述设备中,所述文件块读取装置配置成读入固定大小的数据块;判断读入的数据块中末位是否为行结束符或文件结束符;以及在读入的数据块中末尾既不是行结束符也不是文件结束符时删除最后一个行结束符后的数据,并将下一次读取起始位置设置为最后一个行结束符位置。
在上述设备中,所述文件块读取装置与所述文件数据比对装置并行执行。
在上述设备中,所述文件数据比对装置配置成提取两边对比数据的索引;以及如果索引匹配的话,则对所述数据按行进行拆分比对。
在上述设备中,所述二次匹配装置配置成遍历所述索引数组;以及在存在匹配的索引时对该索引指定的行数据进行比较,并在所述索引数组中删除该索引,而在不存在匹配的索引时将与该索引对应的信息写入所述索引数组中。
本发明提出了一种文件比较的分块处理机制,针对大型文件(单个文件大小超过1G的文件)的比对,不直接将文件读入内存,而是预设一个的最大读入字节量,按照最大读入字节量对文件进行分块读入。分块时不需要对文件进行预处理,不需要遍历文件,只需按照字节偏移量读入。文件全部读取完毕前,不关闭文件句柄,减少IO消耗。针对读取的块数据,依照索引,按行对文件内容进行比对,极大的减小内存和CPU的压力。
在分块文件比对过程中,会在内存中保留两边没有匹配上的数据索引数组。在对下一块数据进行比对时,若没有匹配到索引,则去没有匹配上的索引数组中去匹配。若存在,则进行比对后对索引数组中该条记录进行释放;若不存在,则将该条索引存入索引数组。这种方法解决了乱序文件在分块比对时容易匹配出错的问题。
与现有的文件比对机制相比,本发明提出的方法和设备在保证了中小型文件比较时的高效率的同时,解决了大型文件和超大型文件比较时效率低下及内存瓶颈的问题。
附图说明
在参照附图阅读了本发明的具体实施方式以后,本领域技术人员将会更清楚地了解本发明的各个方面。本领域技术人员应当理解的是:这些附图仅仅用于配合具体实施方式说明本发明的技术方案,而并非意在对本发明的保护范围构成限制。
图1是根据本发明的一个实施例的文件比对方法的示意图;
图2是根据本发明的一个实施例的文件比对方法的流程图;
图3是根据本发明的一个实施例、文件块大小确定的流程图;
图4是根据本发明的一个实施例、文件块数据读入的流程图。
具体实施方式
下面介绍的是本发明的多个可能实施例中的一些,旨在提供对本发明的基本了解,并不旨在确认本发明的关键或决定性的要素或限定所要保护的范围。容易理解,根据本发明的技术方案,在不变更本发明的实质精神下,本领域的一般技术人员可以提出可相互替换的其它实现方式。因此,以下具体实施方式以及附图仅是对本发明的技术方案的示例性说明,而不应当视为本发明的全部或者视为对本发明技术方案的限定或限制。
现有的文件比对方法/工具需要将比对的整个文件装入内存才能进行比较,占用内存较大,这就造成一个普遍性的问题就是小中型文件的比较很快,但大型文件和超大型文件的比较却效率低下,而随着社会高度的信息化,文件所包含的信息量也越来越大,所要处理的文件也越来越大,导致现有工具无法满足人们的实际需求。
为了解决上述问题,本发明提出了一种基于分块处理的文件比对方法。参考图1,图1示出一种基于分块处理的文件比对方法的示意图。如图1所示,分块处理是一个循环处理的过程,每一个循环的处理过程又由文件数据读取、数据比对、文件索引二次比对、结果输出四部分组成。
具体来说,在本发明的一个实施方式中,该文件比对方法包括:对所述文件中的数据进行分块读取;对于已经分块读取的数据,按照适当的方式进行数据比对;如果所述数据之间的索引不匹配,则在索引数组中进行二次匹配,其中,所述索引数组用于存放比对过程中没有匹配的索引记录,以及将比对的结果输出到结果文件中。
在一个优选的实施例中,每次只读入固定大小的数据块(以字节为单位)。为了防止读入截断数据,对后续比对造成影响,故在每次截取时需要判断判断记录中的结束符。若读入的数据中末位非行结束符或者文件结束符,则回退到上一个行结束符截止,并记录数据指针,并将截至上一个行结束符的数据读入内存。
在一个优选的实施例中,对于已读入的文件数据,就类似于一个小文件,以适当的方法对其进行比较即可。文件分块进程与比对进程并行运行,文件分块进程在内存中产生一个队列,队列中每个结构体存放文件名、数据块起始位置信息,按照先进先出的顺序依照数据块结构信息将文件数据导入内存供比对。比对过程中,新建两个索引数组,分别将两边文件没有匹配的索引记录存放在其中。
在一个优选的实施例中,在对读入的文件块数据进行比对时,没有匹配到的索引,会到上一步生成的索引数组中进行二次匹配。若存在,则进行比对后对索引数组中该条记录进行释放;若不存在,则将该条索引存入索引数组。
参考图2,图2示出了根据本发明的一个实施例的文件比对方法的整体流程图。在步骤1,按照块文件的阀值读入两个文件同样大小的一块数据文件。在步骤2,对块文件的数据进行比较,提取两边比对数据的索引。在步骤3,判定索引是否匹配。如果索引匹配的话,则进行行数据比较,否则的话就到配有匹配的索引数组中进行匹配。如步骤4至6所示,在待比对数据的索引不匹配时,选择在索引数组中进行二次匹配。例如,可遍历没有匹配的索引数组,如果存在匹配的索引,则对索引指定的行进行数据比较,并在索引数组中删除该索引值;如果不存在,则将索引信息写入索引数组保存。接着,如步骤7至11所示,对索引匹配的行数据进行拆分比较。如果行数据不一致,则写入结果文件;如果行数据一致则依次判断是否块文件或整个文件的结尾。如果不是块文件的结尾则跳转到下一条数据进行比较;如果是块文件结尾但不是整个文件结尾,则读取下一块文件数据进行比较;如果是整个文件结尾则停止比较。
图3示出了根据本发明的一个实施例、文件块大小确定的流程图。如图3所示,在分块读入文件数据时,先从配置文件中读取预设的分块大小阀值(步骤1)并将读取的起始位置设置为文件开始的字节(步骤2),然后将文件开始的字节到偏移阀值量的数据导入内存(步骤3),在内存中判断最后一个行结束符的位置,记录该行结束符在文本中的偏移量(步骤4),并在内存中删除最后一个行结束符后的数据(步骤5)。当块文件数据处理完毕后,则对后续数据进行判断,若读入数据达文件尾,则结束读入;若不为文件尾则继续从上一次读入的结束位置开始读入偏移阀值量的数据继续处理。
图4示出了根据本发明的一个实施例、文件块数据读入的流程图。如图4所示,在文件分块大小确定(步骤1)后,将文件导入内存,逐行读取文件数据(步骤2),并计算剩余未读取的文件块数据的大小记录到内存中(步骤3),若读入的内存块数据已处理完或到达文件尾,则结束读入(步骤4)。
本领域技术人员容易理解的是,本发明前述的方法可采用软件编程或硬件电路的方式来实现。因而,根据本发明的另一个方面,提供了一种用于对文件进行比对的设备,包括:文件块读取装置,用于对所述文件中的数据进行分块读取;文件数据比对装置,用于对于已经分块读取的数据,按照适当的方式进行数据比对;二次匹配装置,用于在所述数据之间的索引不匹配时在索引数组中进行二次匹配,其中,所述索引数组用于存放比对过程中没有匹配的索引记录,以及结果输出装置,用于将比对的结果输出到结果文件中。
通过采用本发明所述的方法和设备,可在保证了中小型文件比较时的高效率的同时,解决了大型文件和超大型文件比较时效率低下及内存瓶颈的问题。
上文中,参照附图描述了本发明的具体实施方式。但是,本领域中的普通技术人员能够理解,在不偏离本发明的精神和范围的情况下,还可以对本发明的具体实施方式作各种变更和替换。这些变更和替换都落在本发明权利要求书所限定的范围内。
Claims (12)
1. 一种文件比对方法,其特征在于,包括:
对所述文件中的数据进行分块读取;
对于已经分块读取的数据,按照适当的方式进行数据比对;
如果所述数据之间的索引不匹配,则在索引数组中进行二次匹配,其中,所述索引数组用于存放比对过程中没有匹配的索引记录,以及
将比对的结果输出到结果文件中。
2. 如权利要求1所述的方法,其中,分块读取的数据为固定大小的数据块。
3. 如权利要求1所述的方法,其中,对所述文件中的数据进行分块读取包括:
读入固定大小的数据块;
判断读入的数据块中末位是否为行结束符或文件结束符;以及
如果读入的数据块中末尾既不是行结束符也不是文件结束符,则删除最后一个行结束符后的数据,并将下一次读取起始位置设置为最后一个行结束符位置。
4. 如权利要求1所述的方法,其中,所述分块读取与所述数据比对并行执行。
5. 如权利要求1所述的方法,其中,对于已经分块读取的数据,按照适当的方式进行数据比对包括:
提取两边对比数据的索引;以及
如果索引匹配的话,则对所述数据按行进行拆分比对。
6. 如权利要求1所述的方法,其中,在索引数组中进行二次匹配包括:
遍历所述索引数组;以及
如果存在匹配的索引,则对该索引指定的行数据进行比较,并在所述索引数组中删除该索引;如果不存在匹配的索引,则将与该索引对应的信息写入所述索引数组中。
7. 一种用于对文件进行比对的设备,包括:
文件块读取装置,用于对所述文件中的数据进行分块读取;
文件数据比对装置,用于对于已经分块读取的数据,按照适当的方式进行数据比对;
二次匹配装置,用于在所述数据之间的索引不匹配时在索引数组中进行二次匹配,其中,所述索引数组用于存放比对过程中没有匹配的索引记录,以及
结果输出装置,用于将比对的结果输出到结果文件中。
8. 如权利要求7所述的设备,其中,分块读取的数据为固定大小的数据块。
9. 如权利要求7所述的设备,其中,所述文件块读取装置配置成读入固定大小的数据块;判断读入的数据块中末位是否为行结束符或文件结束符;以及在读入的数据块中末尾既不是行结束符也不是文件结束符时删除最后一个行结束符后的数据,并将下一次读取起始位置设置为最后一个行结束符位置。
10. 如权利要求7所述的设备,其中,所述文件块读取装置与所述文件数据比对装置并行执行。
11. 如权利要求7所述的设备,其中,所述文件数据比对装置配置成提取两边对比数据的索引;以及如果索引匹配的话,则对所述数据按行进行拆分比对。
12. 如权利要求7所述的设备,其中,所述二次匹配装置配置成遍历所述索引数组;以及在存在匹配的索引时对该索引指定的行数据进行比较,并在所述索引数组中删除该索引,而在不存在匹配的索引时将与该索引对应的信息写入所述索引数组中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310144068.2A CN104123280B (zh) | 2013-04-24 | 2013-04-24 | 文件比对方法和设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310144068.2A CN104123280B (zh) | 2013-04-24 | 2013-04-24 | 文件比对方法和设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104123280A true CN104123280A (zh) | 2014-10-29 |
CN104123280B CN104123280B (zh) | 2017-08-25 |
Family
ID=51768693
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310144068.2A Active CN104123280B (zh) | 2013-04-24 | 2013-04-24 | 文件比对方法和设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104123280B (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104462343A (zh) * | 2014-12-08 | 2015-03-25 | 北京庆世昌明科技有限公司 | 一种大数据比对碰撞系统 |
CN105808783A (zh) * | 2016-03-31 | 2016-07-27 | 中国互联网络信息中心 | 一种不同域名格式的大文件数据差异性分析方法 |
CN106844306A (zh) * | 2016-12-30 | 2017-06-13 | 江苏天联信息科技发展有限公司 | 文件比较方法及装置 |
CN106844305A (zh) * | 2016-12-30 | 2017-06-13 | 上海帝联信息科技股份有限公司 | 文件中的数据行比较方法及装置 |
CN107329846A (zh) * | 2017-07-11 | 2017-11-07 | 深圳市信义科技有限公司 | 基于大数据技术的大指数据比对方法 |
CN107615271A (zh) * | 2015-12-30 | 2018-01-19 | 深圳配天智能技术研究院有限公司 | 字符串检索方法及装置 |
CN107704342A (zh) * | 2017-09-26 | 2018-02-16 | 郑州云海信息技术有限公司 | 一种快照拷贝方法、系统、装置及可读存储介质 |
CN108874994A (zh) * | 2018-06-12 | 2018-11-23 | 北京奇虎科技有限公司 | 一种分块读取数据的方法、装置及计算机存储介质 |
CN109815452A (zh) * | 2018-12-25 | 2019-05-28 | 东软集团股份有限公司 | 文本比较方法、装置、存储介质及电子设备 |
CN117573620A (zh) * | 2024-01-10 | 2024-02-20 | 中电数据产业有限公司 | 一种大文件拆分并发读取方法和系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080183771A1 (en) * | 2007-01-26 | 2008-07-31 | Hong Fu Precision Industry (Shenzhen) Co., Ltd. | System and method for managing files |
CN101290628A (zh) * | 2008-06-17 | 2008-10-22 | 中兴通讯股份有限公司 | 一种数据文件更新存储方法 |
CN101957858A (zh) * | 2010-09-27 | 2011-01-26 | 中兴通讯股份有限公司 | 数据比对方法和装置 |
CN102236586A (zh) * | 2010-04-21 | 2011-11-09 | 雷州 | 一种计算机本地及网络多次增量的数据备份、恢复方法 |
-
2013
- 2013-04-24 CN CN201310144068.2A patent/CN104123280B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080183771A1 (en) * | 2007-01-26 | 2008-07-31 | Hong Fu Precision Industry (Shenzhen) Co., Ltd. | System and method for managing files |
CN101290628A (zh) * | 2008-06-17 | 2008-10-22 | 中兴通讯股份有限公司 | 一种数据文件更新存储方法 |
CN102236586A (zh) * | 2010-04-21 | 2011-11-09 | 雷州 | 一种计算机本地及网络多次增量的数据备份、恢复方法 |
CN101957858A (zh) * | 2010-09-27 | 2011-01-26 | 中兴通讯股份有限公司 | 数据比对方法和装置 |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104462343A (zh) * | 2014-12-08 | 2015-03-25 | 北京庆世昌明科技有限公司 | 一种大数据比对碰撞系统 |
CN104462343B (zh) * | 2014-12-08 | 2018-12-25 | 北京庆世昌明科技有限公司 | 一种大数据比对碰撞系统 |
CN107615271A (zh) * | 2015-12-30 | 2018-01-19 | 深圳配天智能技术研究院有限公司 | 字符串检索方法及装置 |
CN105808783B (zh) * | 2016-03-31 | 2019-08-20 | 中国互联网络信息中心 | 一种不同域名格式的大文件数据差异性分析方法 |
CN105808783A (zh) * | 2016-03-31 | 2016-07-27 | 中国互联网络信息中心 | 一种不同域名格式的大文件数据差异性分析方法 |
CN106844306A (zh) * | 2016-12-30 | 2017-06-13 | 江苏天联信息科技发展有限公司 | 文件比较方法及装置 |
CN106844305A (zh) * | 2016-12-30 | 2017-06-13 | 上海帝联信息科技股份有限公司 | 文件中的数据行比较方法及装置 |
CN107329846A (zh) * | 2017-07-11 | 2017-11-07 | 深圳市信义科技有限公司 | 基于大数据技术的大指数据比对方法 |
CN107329846B (zh) * | 2017-07-11 | 2020-06-12 | 深圳市信义科技有限公司 | 基于大数据技术的大指数据比对方法 |
CN107704342A (zh) * | 2017-09-26 | 2018-02-16 | 郑州云海信息技术有限公司 | 一种快照拷贝方法、系统、装置及可读存储介质 |
CN108874994A (zh) * | 2018-06-12 | 2018-11-23 | 北京奇虎科技有限公司 | 一种分块读取数据的方法、装置及计算机存储介质 |
CN109815452A (zh) * | 2018-12-25 | 2019-05-28 | 东软集团股份有限公司 | 文本比较方法、装置、存储介质及电子设备 |
CN109815452B (zh) * | 2018-12-25 | 2023-04-07 | 东软集团股份有限公司 | 文本比较方法、装置、存储介质及电子设备 |
CN117573620A (zh) * | 2024-01-10 | 2024-02-20 | 中电数据产业有限公司 | 一种大文件拆分并发读取方法和系统 |
CN117573620B (zh) * | 2024-01-10 | 2024-04-02 | 中电数据产业有限公司 | 一种大文件拆分并发读取方法和系统 |
Also Published As
Publication number | Publication date |
---|---|
CN104123280B (zh) | 2017-08-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104123280A (zh) | 文件比对方法和设备 | |
CN111444196B (zh) | 块链式账本中全局状态的哈希的生成方法、装置及设备 | |
US8291058B2 (en) | High speed network data extractor | |
CN111444192B (zh) | 块链式账本中全局状态的哈希的生成方法、装置及设备 | |
CN103593440B (zh) | 日志文件的读写方法及装置 | |
CN112395300B (zh) | 基于区块链的数据处理方法、装置、设备及可读存储介质 | |
CN104199888B (zh) | 弹性文件系统的数据恢复方法和装置 | |
US11151144B2 (en) | Sorting tables in analytical databases | |
CN104036187B (zh) | 计算机病毒类型确定方法及其系统 | |
US20160246799A1 (en) | Policy-based, multi-scheme data reduction for computer memory | |
CN102508880A (zh) | 一种文件合并方法及分解方法 | |
CN110019873B (zh) | 人脸数据处理方法、装置及设备 | |
CN106874348A (zh) | 文件存储和索引方法、装置及读取文件的方法 | |
CN106970929A (zh) | 数据导入方法及装置 | |
CN106407442B (zh) | 一种海量文本数据处理方法及装置 | |
CN109040191A (zh) | 文件下载方法、装置、计算机设备和存储介质 | |
CN105068885A (zh) | 一种jpg碎片文件恢复与重组的方法 | |
CN105447168A (zh) | Mp4格式的碎片文件恢复与重组的方法 | |
CN105677579B (zh) | 缓存系统中的数据访问方法和系统 | |
CN105159820A (zh) | 一种系统日志数据传输方法及装置 | |
CN112379835B (zh) | 一种oob区数据提取方法、终端设备及存储介质 | |
US20220083507A1 (en) | Trust chain for official data and documents | |
CN106909623B (zh) | 一种支持高效海量数据分析和检索的数据装置及数据存储方法 | |
CN107748705B (zh) | 系统evt日志碎片恢复的方法、终端设备及存储介质 | |
CN109241058A (zh) | 一种向b+树批量插入键值对的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |