CN103279531A - 一种分布式文件系统中基于内容的文件分块方法 - Google Patents
一种分布式文件系统中基于内容的文件分块方法 Download PDFInfo
- Publication number
- CN103279531A CN103279531A CN2013102118342A CN201310211834A CN103279531A CN 103279531 A CN103279531 A CN 103279531A CN 2013102118342 A CN2013102118342 A CN 2013102118342A CN 201310211834 A CN201310211834 A CN 201310211834A CN 103279531 A CN103279531 A CN 103279531A
- Authority
- CN
- China
- Prior art keywords
- piece
- block
- breakpoint
- piecemeal
- file
- 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
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开一种分布式文件系统中基于内容的文件分块方法,主要解决现有技术中因固定分块引起的并发访问效率低的问题。其实现方案是:根据Rabinfingerprint算法,对文件按内容分块,当对数据块进行数据操作时,a)此数据块是文件的初始块,并且新增的数据没有导致块大小超过最小块限制,即使包含breakpoint也不分块;b)不是文件的初始块,如果新增数据破坏了当前块的breakpoint则进行此块和下一块的重新分块;如果新增数据没有破坏当前块的breakpoint,但是数据块超出最大块限制或者新增数据中包含breakpoint,则对数据块进行强制分块。采用本发明所述的方案,在修改某一块内容的时候能尽量不影响相邻块的分块,从而可以提高并发访问的效率。
Description
技术领域
本发明涉及存储技术领域,特别是涉及到一种分布式文件系统中文件按内容分块的分块方法。
背景技术
现在的分布式存储系统大都采用了固定大小的文件分块的分块策略,google文件系统和hadoop文件系统就是使用的这种文件存储方式。在google file system(GFS,Google分布式文件系统)中,文件一般是以大文件的方式存储,文件都被分割成固定大小的chunk(64M),对于小文件的操作,不需要做过多的优化;文件读取方式分为大的字节流读取和小的随机读取;文件写入方式主要为末尾追加,并且文件存在是固定的,一旦写入,很少有修改操作。
但是在其他的一些分布式文件系统中,情况和GFS会有很大的不同:文件不是以末尾追加为主要的写入方式,这样对于随机写入的情况,如果增加或者删除了文件的内容,导致文件的大小发生了变化,那么就需要向前或者向后移动文件内容,这无疑给分布式文件系统带来了很大的开销,影响了其性能,所以如果在修改某一块内容的时候能尽量不影响相邻块的分块,从而可以提高并发访问的效率。
发明内容
针对以上问题,本发明要解决的技术问题是提供一种分布式文件系统中基于内容的文件分块方法,采用拉宾指纹方法分块,块的界限为Breakpoint,设文件有相邻的两块,记为块K和块K+1;对块K操作时,分块过程包括如下步骤,
步骤1,在用户请求下对块K进行数据操作;
步骤2,若块K是文件的起始块,且大小小于预设的最小块长,则进入步骤6,否则进入步骤3;
步骤3,若块K大于预设的最大块长或者新增的数据中包含有Breakpoint,则进入步骤107,否则进入步骤104;
步骤4,若新增的数据破坏了块K的 Breakpoint,则进入步骤5,否则结束流程;
步骤5,把块K和下一块K+1进行重新分块,结束流程;
步骤6,不进行分块操作,结束流程;
步骤7,进行块K的拆分操作,结束流程。
而且,所述步骤5包括如下子步骤,
步骤5.1,进入把块K和下一块K+1进行重新分块的操作;
步骤5.2,判断块K的新的Breakpoint是否出现在块K+1的前窗口大小范围以内,是则进入步骤5.7,否则进入步骤5.3;
步骤5.3,把块K和块K+1合并为块K3;
步骤5.4,判断块K3是否大于预设的最大块长,是则进入步骤5.5,否则结束操作;
步骤5.5,对块K3进行强制分块,分别记为块K4和块K5;
步骤5.6,判断块K4是否截断了块K5的Breakpoint,是则进入步骤5.1继续执行,否则结束操作;
步骤5.7,把块K和块K+1重新分块为块K1和块K2,并结束操作。
而且,所述步骤7包括如下子步骤,
步骤7.1,把块K拆分为块K6和块K7;
步骤7.2,判断块K拆分是否影响到原块K的 Breakpoint,是则进入步骤7.3,否则结束操作;
步骤7.3,把块K7和下一块K+1进行重新分块;
步骤7.4,判断块K7的Breakpoint是否出现在块K+1的前窗口大小范围以内,是则把块K7和块K+1重新分块为块K11和块K12,然后结束操作,否则进入步骤7.5;
步骤7.5,把块K+1合并到块K7,形成块K8;
步骤7.6,判断块K8是否大于预设的最大块长,是则进入步骤7.7,否则结束操作;
步骤7.7,对K8进行强制分块,结果记为块K9和块K10;
步骤7.8,判断块K9是否截断了块K10的Breakpoint,如果截断了块K10的Breakpoint,则进返回步骤7.3继续执行,否则结束操作。
为解决上述技术问题,本发明是通过以下技术方案实现的:
综上所述,本发明通过使用基于LBFS采用的Rabin fingerprint 方法,将文件按照内容划分为不同大小的块,使得在修改某一块内容的情况下,尽量不影响相邻块的分块,减少文件内容向前向后的移动,从而提高并发访问的效率,提高分布式文件系统的性能。
附图说明
图1是本发明实施例的分块方法执行流程图;
图2 是本发明实施例中对单个块的操作无新增分块流程图;
图3 是本发明实施例中对单个块的操作有新增分块流程图。
具体实施方式
以下结合附图和实施例详细说明本发明技术方案。
本发明实施例使用基于LBFS采用的Rabin fingerprint(拉宾指纹)方法,在此基础上改进了具体分块处理流程,具体实施时,本领域技术人员可采用计算机软件技术实现为相应的软件系统。Rabin fingerprint方法的工作原理为:选取一个Rabin fingerprint窗口;对窗口中的数据进行运算,将结果的低n位与选定的值进行比较。如果相等,则表示这个窗口是一个Breakpoint。即一个块的界限,下一次运算的窗口从Breakpoint的后面的字节开始,直到文件末尾;若不相等,则窗口向后滑动一位,重新进行运算。
所述LBFS(A Low-bandwidth Network File System)是一个低带宽的网络文件系统;
所述Rabin fingerprint 窗口大小可以按需求由本领域技术人员预先取定,比如48字节;
所述结果的低n位中的n小于Rabin fingerprint 窗口大小,可由本领域技术人员预先设定比如n=13;
所述选定的值是在预先定义的一个常量,可由本领域技术人员预先设定;
所述一个块的界限指的是整个窗口区域。
为了提高性能并且简化传输,实施例定义了最小与最大的块长,具体实施时,可由本领域技术人员预先设定最大块长和最小块长的取值。一般情况下,在文件开始时小于最小块长的范围中,即使有Breakpoint出现,系统也会忽略掉而不进行分块;如果文件大小大于最大的块长,即使没有出现Breakpoint,则系统会进行强制地分块。
假设有相邻的两块,记为块K和块K+1,对块K进行操作,则块K可称为操作块。本发明进行分析如下:
1. 对单个块的操作,操作块K没有被拆分:
对块K进行加锁,然后进行数据操作:
(1)如果新增的数据对块K的Breakpoint没有影响,则不会导致重新分块;块K+1也不会受到影响。
(2)如果对块K进行操作,结果新数据影响了块K的Breakpoint,则要重新分块。此时要对紧接着块K的块K+1进行加锁,然后进行分块操作。此时又会出现三种情况:
1) 如果新的Breakpoint出现在块K+1的前窗口大小范围以内,则对块K和块K+1以此新的Breakpoint进行新的分块,记为块K1和块K2;块K+1的前窗口即对块K操作前块K+1原来的Breakpoint。
2)如果块K+1的前窗口大小范围内没有出现新的Breakpoint,则块K与块K+1将合并为一个新块,记为块K3;
3)与2)中情况类似,只是块K与块K+1合并后的块K3的长度超过了约定的最大块长,因此系统对块K3进行了强制分块,分别记为块K4和块K5。这种情况下还有一种可能,即块K5的Breakpoint被块K4截断,于是块K5又要和紧邻其后的块进行重新分块,其情况与1)、2)、3)中提到的一样
2.对单个块的操作,操作块K被拆分
一般来说,对一个块进行操作后,会出现新增分块的情况有两种:
新增的数据中包含有Breakpoint;新增的数据量很大,使得原始块超过了约定的最大块的限制,因此系统要进行强制分块。
对块K进行加锁,然后进行数据操作,结果块K被拆分为两部分块K6以及块K7。具体可分为以下几种情况:
(1)如果发生在原始块K上的拆分没有影响到块K的Breakpoint。因此仅仅是原始的块K被拆分,而块K后面的块K+1没有受到影响,这是最一般的情况;
(2)如果发生在原始块K上的拆分影响到了块K的Breakpoint(也是块K7的Breakpoint)。因此要重新进行分块;且同时新的Breakpoint出现在块K+1的前窗口大小范围中。于是只要对块K+1进行加锁,分块即可。
(3)如果对块K+1进行加锁分块的时候,在该块的第一个窗口范围中没有出现新的Breakpoint,因此原始块K+1的末尾成为新块K7的末尾。原始块K+1被合并到了新块K7中,合并结果记为块K8。
(4)与(3)中类似,只是在合并的时候块K8的大小超过了最大块限制,对块K8进行分块,分别记为块K9和块K10。这种情况下,还有一种可能,即块K10的Breakpoint被破坏了。因此块K10又要和后面的块进行重新划分,这个过程与(2)、(3)、(4)中的情况一样,只是简单的重复。
根据以上分析,本发明实施例提供了分块方法。图1是本发明实施例的分块方法,包括如下步骤:
步骤101:在用户请求下对块K进行数据操作;
步骤102:若块K是文件的起始块,且其大小小于预设的最小块长,则进入步骤106,否则进入步骤103;
步骤103:若块K大于预设的最大块长或者新增的数据中包含有Breakpoint,则进入步骤107,否则进入步骤104;
步骤104:若新增的数据破坏了块K的Breakpoint,则进入步骤105,否则进入步骤108;
步骤105:把块K和下一块K+1进行重新分块,结束流程。
步骤 106:因为块K是文件的起始块,且其大小小于预设的最小块长,那么即使在文件中出现了Breakpoint,也不进行分块操作,结束流程。
步骤107:因为块K大于预设的最大块长或者新增的数据中包含有Breakpoint,则进行块K的拆分操作,然后结束流程。
步骤108:结束流程。
为便于实施参考起见,提供了实施例的步骤105具体实现方式,参见图2。图2是本发明中对单个块的操作无新增分块流程图,由于对块K进行操作,结果新数据影响了块K的Breakpoint,因此要重新分块,此时要对紧接着块K的块K+1进行加锁,然后进行分块操作。包括如下步骤:
步骤201:因为块K的Breakpoint被破坏,进入把块K和下一块K+1进行重新分块的操作;
步骤202:判断块K的新的Breakpoint是否出现在块K+1的前窗口大小范围以内,如果没有出现在块K+1的前窗口大小范围以内,进入步骤203,出现则进入步骤207;
步骤203:把块K和块K+1合并为块K3;
步骤204:判断块K3是否大于预设的最大块长,如果大于预设的最大块长,则进入步骤205,否则进入步骤208;
步骤205:对块K3进行强制分块,分别记为块K4和块K5;
步骤206:判断块K4是否截断了块K5的Breakpoint,如果截断了块K5的Breakpoint,则进入步骤201继续执行(块K5代替步骤201中的块K,块K5的下一块K+2代替步骤201中的块K+1,以后循环均以此类推),否则进入步骤209;
步骤207:因为块K的新的Breakpoint出现在块K+1的前窗口大小范围以内,把块K和块K+1重新分块为块K1和块K2,并结束操作。
步骤208:因为块K3不大于预设的最大块长,则结束操作。
步骤209:因为块K4没有截断块K5的Breakpoint,则结束操作。
为便于实施参考起见,提供了实施例的步骤107具体实现方式,参见图3。图3是本发明中对单个块的操作有新增分块流程图,一般来说,对一个块进行操作后,会出现新增分块的情况有两种:
1)新增的数据中包含有Breakpoint;
2)新增的数据量很大,使得原始块超过了预设的最大块的限制,因此系统要进行强制分块。此过程包括如下步骤:
步骤301:把块K拆分为块K6和块K7;
步骤302:判断块K拆分是否影响到原块K的 Breakpoint,如果原块K的Breakpoint受到影响,进入步骤303,否则进入步骤309;
步骤303:把Breakpoint被破坏的块K7和下一块K+1进行重新分块;
步骤304:判断块K7的Breakpoint是否出现在块K+1的前窗口大小范围以内,如果没有出现在块K+1的前窗口大小范围以内,进入步骤305,出现则进入步骤310;
步骤305:把块K+1合并到块K7,形成块K8;
步骤306:判断块K8是否大于预设的最大块长,如果大于预设的最大块长,则进入步骤307,否则进入步骤311;
步骤307:对K8进行强制分块,记为块K9和块K10;
步骤308:判断块K9是否截断了块K10的Breakpoint,如果截断了块K10的Breakpoint,则进入步骤303继续执行(用块K10代替步骤303中的块K7,块K10的下一块K+2代替步骤303中的块K+1,以后的循环均以此类推),否则进入步骤312。
步骤309:因为块K拆分没有影响到原块K的 Breakpoint,则结束操作。
步骤310:因为块K7的Breakpoint出现在块K+1的前窗口大小范围以内,则把块K7和块K+1重新分块为块K11和块K12,然后结束操作。
步骤311:因为块K8不大于预设的最大块长,则结束操作。
步骤312:因为块K9没有截断块K10的Breakpoint,则结束操作。
实施例及附图中为便于表达程序走向起见,将结束操作作为单独的步骤标号,以利本领域技术人员参考理解。
本文中所描述的具体实施例仅仅是对本发明精神作举例说明。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,但并不会偏离本发明的精神或者超越所附权利要求书所定义的范围。
Claims (3)
1.一种分布式文件系统中基于内容的文件分块方法,采用拉宾指纹方法分块,块的界限为Breakpoint,其特征在于:设文件有相邻的两块,记为块K和块K+1;对块K操作时,分块过程包括如下步骤,
步骤1,在用户请求下对块K进行数据操作;
步骤2,若块K是文件的起始块,且大小小于预设的最小块长,则进入步骤6,否则进入步骤3;
步骤3,若块K大于预设的最大块长或者新增的数据中包含有Breakpoint,则进入步骤107,否则进入步骤104;
步骤4,若新增的数据破坏了块K的 Breakpoint,则进入步骤5,否则结束流程;
步骤5,把块K和下一块K+1进行重新分块,结束流程;
步骤6,不进行分块操作,结束流程;
步骤7,进行块K的拆分操作,结束流程。
2.根据权利要求1所述分布式文件系统中基于内容的文件分块方法,其特征在于:所述步骤5包括如下子步骤,
步骤5.1,进入把块K和下一块K+1进行重新分块的操作;
步骤5.2,判断块K的新的Breakpoint是否出现在块K+1的前窗口大小范围以内,是则进入步骤5.7,否则进入步骤5.3;
步骤5.3,把块K和块K+1合并为块K3;
步骤5.4,判断块K3是否大于预设的最大块长,是则进入步骤5.5,否则结束操作;
步骤5.5,对块K3进行强制分块,分别记为块K4和块K5;
步骤5.6,判断块K4是否截断了块K5的Breakpoint,是则进入步骤5.1继续执行,否则结束操作;
步骤5.7,把块K和块K+1重新分块为块K1和块K2,并结束操作。
3.根据权利要求1所述分布式文件系统中基于内容的文件分块方法,其特征在于:所述步骤7包括如下子步骤,
步骤7.1,把块K拆分为块K6和块K7;
步骤7.2,判断块K拆分是否影响到原块K的 Breakpoint,是则进入步骤7.3,否则结束操作;
步骤7.3,把块K7和下一块K+1进行重新分块;
步骤7.4,判断块K7的Breakpoint是否出现在块K+1的前窗口大小范围以内,是则把块K7和块K+1重新分块为块K11和块K12,然后结束操作,否则进入步骤7.5;
步骤7.5,把块K+1合并到块K7,形成块K8;
步骤7.6,判断块K8是否大于预设的最大块长,是则进入步骤7.7,否则结束操作;
步骤7.7,对K8进行强制分块,结果记为块K9和块K10;
步骤7.8,判断块K9是否截断了块K10的Breakpoint,如果截断了块K10的Breakpoint,则进返回步骤7.3继续执行,否则结束操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310211834.2A CN103279531B (zh) | 2013-05-31 | 2013-05-31 | 一种分布式文件系统中基于内容的文件分块方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310211834.2A CN103279531B (zh) | 2013-05-31 | 2013-05-31 | 一种分布式文件系统中基于内容的文件分块方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103279531A true CN103279531A (zh) | 2013-09-04 |
CN103279531B CN103279531B (zh) | 2016-06-08 |
Family
ID=49062050
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310211834.2A Active CN103279531B (zh) | 2013-05-31 | 2013-05-31 | 一种分布式文件系统中基于内容的文件分块方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103279531B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111177106A (zh) * | 2019-12-30 | 2020-05-19 | 嘉联支付有限公司 | 一种分布式数据计算系统及方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080133561A1 (en) * | 2006-12-01 | 2008-06-05 | Nec Laboratories America, Inc. | Methods and systems for quick and efficient data management and/or processing |
CN101788976A (zh) * | 2010-02-10 | 2010-07-28 | 北京播思软件技术有限公司 | 一种基于内容的文件分割方法 |
CN103078709A (zh) * | 2013-01-05 | 2013-05-01 | 中国科学院深圳先进技术研究院 | 数据冗余识别方法 |
-
2013
- 2013-05-31 CN CN201310211834.2A patent/CN103279531B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080133561A1 (en) * | 2006-12-01 | 2008-06-05 | Nec Laboratories America, Inc. | Methods and systems for quick and efficient data management and/or processing |
CN101788976A (zh) * | 2010-02-10 | 2010-07-28 | 北京播思软件技术有限公司 | 一种基于内容的文件分割方法 |
CN103078709A (zh) * | 2013-01-05 | 2013-05-01 | 中国科学院深圳先进技术研究院 | 数据冗余识别方法 |
Non-Patent Citations (2)
Title |
---|
徐旦等: "高效的两轮远程文件快速同步算法", 《计算机科学与探索》, no. 1, 31 January 2011 (2011-01-31) * |
王树鹏: "重复数据删除技术的发展及应用", 《中兴通讯技术》, vol. 16, no. 5, 31 October 2010 (2010-10-31) * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111177106A (zh) * | 2019-12-30 | 2020-05-19 | 嘉联支付有限公司 | 一种分布式数据计算系统及方法 |
CN111177106B (zh) * | 2019-12-30 | 2023-10-17 | 嘉联支付有限公司 | 一种分布式数据计算系统及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103279531B (zh) | 2016-06-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102098548B1 (ko) | 블록체인에서 블록 데이터를 검증하기 위한 방법 및 장치 | |
KR102034833B1 (ko) | 플래시 저장장치의 내부 병렬성을 이용하는 키 값 기반의 데이터 액세스 장치 및 방법 | |
US9164688B2 (en) | Sub-block partitioning for hash-based deduplication | |
US9851917B2 (en) | Method for de-duplicating data and apparatus therefor | |
CN107038206B (zh) | Lsm树的建立方法、lsm树的数据读取方法和服务器 | |
CA2843922C (en) | Data processing method and apparatus in cluster system | |
KR102050725B1 (ko) | 컴퓨팅 시스템 및 컴퓨팅 시스템의 데이터 관리 방법 | |
US9965196B2 (en) | Resource reservation for storage system metadata updates | |
US8001273B2 (en) | Parallel processing of input data to locate landmarks for chunks | |
CN105183839A (zh) | 一种基于Hadoop的小文件分级索引的存储优化方法 | |
WO2014184857A1 (ja) | 重複排除システム及びその方法 | |
EP3316150B1 (en) | Method and apparatus for file compaction in key-value storage system | |
CN104361068B (zh) | 一种数据去重过程中的并行分块方法与系统 | |
CN101968796B (zh) | 一种双向并发执行的文件级可变长数据分块方法 | |
WO2022134128A1 (zh) | 多版本数据存储方法、装置、计算机设备及存储介质 | |
US9069478B2 (en) | Controlling segment size distribution in hash-based deduplication | |
US20150088840A1 (en) | Determining segment boundaries for deduplication | |
CN109033295A (zh) | 超大数据集的合并方法及装置 | |
US11755540B2 (en) | Chunking method and apparatus | |
CN111061690A (zh) | 一种基于rac的数据库日志文件读取方法和装置 | |
CN108829345B (zh) | 日志文件的数据处理方法和终端设备 | |
Kwon et al. | DeNOVA: Deduplication extended nova file system | |
Kim et al. | Design and implementation of binary file similarity evaluation system | |
CN103279531A (zh) | 一种分布式文件系统中基于内容的文件分块方法 | |
US20150186549A1 (en) | Tiered Index Management |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |