CN104077409B - 一种基于重组文件元数据实现快速文件切割和合并的方法 - Google Patents
一种基于重组文件元数据实现快速文件切割和合并的方法 Download PDFInfo
- Publication number
- CN104077409B CN104077409B CN201410332471.2A CN201410332471A CN104077409B CN 104077409 B CN104077409 B CN 104077409B CN 201410332471 A CN201410332471 A CN 201410332471A CN 104077409 B CN104077409 B CN 104077409B
- Authority
- CN
- China
- Prior art keywords
- file
- new
- cutting
- merged
- newfilename
- 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
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
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
本发明公开了一种基于重组文件元数据实现快速文件切割和合并的方法,其实施步骤分为:扩展原有的POSIX文件操作接口,新增文件切割和合并接口;这两个扩展接口通过IOCTL的方式与操作系统内核进行交互;SplitFile接口的工作流程以及MergeFile接口的工作流程。本发明给需要进行文件切割、合并的应用带来方便;消除了文件切割和合并过程中的拷贝开销,这对分布式文件系统来说非常有效,消除了大量的I/O操作;大幅度提升了文件切割和合并这类应用的性能。
Description
技术领域
本发明涉及一种文件切割和合并的方法,尤其涉及一种基于重组文件元数据实现快速文件切割和合并的方法,属于分布式文件系统和网络存储系统技术领域。
背景技术
在传统的分布式文件系统或者本地文件系统中,对于文件的切割和合并都是通过数据拷贝来实现的。现有的一些文件合并切割软件本质上都是通过拷贝数据来实现的,唯一不同的地方就是采用了多线程技术,但是这并没有从本质上解决合并切割效率低下的问题。
比如当用户只需要一个文件中的部分内容时,实际上需要进行以下的文件系统操作:
1、打开源文件;
2、创建一个新文件;
3、读取源文件中需要的内容,写入到新文件中;
4、关闭源文件和新文件;
再例如当用户需要将几个文件合并成一个文件时,需要进行以下的文件系统操作:
1、打开第一个源文件;
2、创建一个新文件;
3、读取第一个源文件中的内容,写入到新文件中;
4、关闭第一个源文件,打开第二个源文件;
5、读取第二个源文件的内容,写入到新文件中;
6、依次打开第N个源文件,读取内容,写入到新文件中;
7、最后关闭新文件;
其实面对上述复杂的操作过程,一方面带来很大的I/O开销(I/O开销是指:输入输出流量百分比),另一方面对整个这种类型的应用产生了巨大开销,从而使得该过程成了这个系统中的瓶颈点。
从文件系统的底层实现看,无论是文件的切割还是合并,只需要重新组织一下新文件的元数据信息,即新文件的数据块分部信息即可,因为真正的数据信息已经存在于存储系统中了,完全可以避免掉大量的I/O开销。为此,我们在分布式文件系统中提出一种新的实现文件切割和合并方法,从而革命性的的提高这类应用的性能。
发明内容
为了解决上述技术所存在的不足之处,本发明提供了一种基于重组文件元数据实现快速文件切割和合并的方法。
为了解决以上技术问题,本发明采用的技术方案是:一种基于重组文件元数据实现快速文件切割和合并的方法,其实施步骤如下:
I、扩展原有的POSIX文件操作接口,新增文件切割接口
SplitFile:char*newFileName,char*srcFileName,bool changeSrcFile,uint64offset,uint64length;
参数说明:newFileName:切割后生成新文件的路径
srcFileName:被切割文件的路径
changeSrcFile:是否修改被切割文件的大小
offset:被切割文件的起始位置
length:被切割文件的切割长度
功能说明:将srcFileName文件从位置offset开始,长度为length的部分切割出来生成一个新的文件newFileName,切割后新生成的文件大小为length;
合并接口MergeFile:char*newFileName,bool deleteSubFile,char*subFile1,char*subFile2,char*subFile3,…;
参数说明:newFileName:合并后生成新文件的路径
deleteSubFile:是否删除被合并文件
subFile1:被合并文件1
subFile2:被合并文件2
subFile3:被合并文件3
功能说明:将subFile1、subFile2、subFile3等按照先后顺序合并成新文件newFileName,合并后新文件的大小是这些文件的总和;
II、这两个扩展接口通过IOCTL的方式与操作系统内核进行交互;
III、SplitFile接口的工作流程如下:
a、应用程序调用SplitFile接口,操作系统打开需要切割的源文件;
b、打开成功后,通过IOCTL的方式将新文件名newFileName,以及offset、length参数传到操作系统内核文件系统层;
c、文件系统层根据参数,生成一个新的空文件,然后根据源文件的数据块映射信息中需要切割的部分的块映射信息生成新文件的块映射信息,根据参数如果是直接改变源文件的内容,则修改源文件的块映射信息,如果是不改变源文件的内容,则将OSD中的块映射信息引用计数加1;
d、对于引用计数当修改这类引用计数大于1的数据块时采用CopyOnWrite的方式,生成新的OSD数据块;
e、修改源文件和新文件属性中的大小属性,给应用程序返回成功;
IV、MergeFile接口的工作流程如下:
a、应用程序调用MergeFile接口,先向文件系统中创建一个NewFileName的空文件;
b、创建成功后,通过IOCTL的方式,将需要合并的文件参数发送到操作系统内核文件系统层;
c、文件系统层根据需要合并的文件信息,依次获取它们的数据块分布信息,将这些分部信息写入到新文件的数据块分布信息中,如果deleteSubFile为TRUE,则删除所有的被合并文件的元数据信息;如果deleteSubFile为FALSE,则修改所有的相关OSD的数据块映射信息,使得引用计数加1;
d、设置新文件的大小,给应用程序返回成功。
本发明的有益效果为:
1、给需要进行文件切割、合并的应用带来方便;
2、消除了文件切割和合并过程中的拷贝开销,这对分布式文件系统来说非常有效,消除了大量的I/O操作;
3、大幅度提升了文件切割和合并这类应用的性能。
附图说明
图1为本发明的文件切割SplitFile原理框图。
图2为本发明的文件合并原理框图。
具体实施方式
下面结合附图和具体实施方式对本发明作进一步详细的说明。
如图1、图2所示,本发明提出了一种新的文件切割和合并的实现方法,用来提高分布式文件系统对这类应用支持的效率,已达到不需要拷贝内容的方式实现文件的切割和合并,本方法是基于以下几点来实现的,其实施步骤如下:
1、扩展原有的POSIX文件操作接口,新增文件切接口
SplitFile(char*newFileName,char*srcFileName,bool changeSrcFile,uint64offset,uint64length);
参数说明:newFileName:切割后生成新文件的路径
srcFileName:被切割文件的路径
changeSrcFile:是否修改被切割文件的大小
offset:被切割文件的起始位置
length:被切割文件的切割长度
功能说明:将srcFileName文件从位置offset开始,长度为length的部分切割出来生成一个新的文件newFileName,切割后新生成的文件大小为length。
合并接口MergeFile(char*newFileName,bool deleteSubFile,char*subFile1,char*subFile2,char*subFile3,…);
参数说明:newFileName:合并后生成新文件的路径
deleteSubFile:是否删除被合并文件
subFile1:被合并文件1
subFile2:被合并文件2
subFile3:被合并文件3
功能说明:将subFile1、subFile2、subFile3等按照先后顺序合并成新文件newFileName,合并后新文件的大小是这些文件的总和。
2、这两个扩展接口通过IOCTL的方式与操作系统内核进行交互。
3、SplitFile接口的工作流程如下:
a、应用程序调用SplitFile接口,操作系统打开需要切割的源文件。
b、打开成功后,通过IOCTL的方式将新文件名newFileName,以及offset、length参数传到操作系统内核文件系统层。
c、文件系统层根据参数,生成一个新的空文件,然后根据源文件的数据块映射信息中需要切割的部分的块映射信息生成新文件的块映射信息,根据参数如果是直接改变源文件的内容,则修改源文件的块映射信息,如果是不改变源文件的内容,则将OSD中的块映射信息引用计数加1。
d、对于引用计数当修改这类引用计数大于1的数据块时采用CopyOnWrite的方式,生成新的OSD数据块。
e、修改源文件和新文件属性中的大小属性,给应用程序返回成功。
4、MergeFile接口的工作流程如下:
a、应用程序调用MergeFile接口,先向文件系统中创建一个NewFileName的空文件。
b、创建成功后,通过IOCTL的方式,将需要合并的文件参数发送到操作系统内核文件系统层。
c、文件系统层根据需要合并的文件信息,依次获取它们的数据块分布信息,将这些分部信息写入到新文件的数据块分布信息中,如果deleteSubFile为TRUE,则删除所有的被合并文件的元数据信息;如果deleteSubFile为FALSE,则修改所有的相关OSD的数据块映射信息,使得引用计数加1。
d、设置新文件的大小,给应用程序返回成功。
实施例:
如在视频转码打包应用中,利用集群对多个视频片段进行转码,最终将转码好的多个片段再合并成一个文件,合并文件的过程本质上就是一个拷贝过程,如果在合并过程中文件系统能够提供一个快速的切割和合并的接口,会大大提供整个系统的效率。
实施例1:将某个大的视频文件中,从一个10GB的视屏文件File1中剪辑出两个大小2GB的视频片段且不改变原来的视频文件File1,一个是源文件中的0-2GB的部分File2,另一个是源文件中4-6GB的部分File3。
使用SplitFile(File2,File1,FALSE,0,2GB)切割生成File2,再调用SplitFile(File3,File1,FALSE,4GB,2GB)切割生成File3。通过这样的操作大幅提高了切割性能,将原来需要几分钟完成的事情在一秒钟就可以完成。
实施例2:有两个视频文件File1和File2,需要合成一个视屏文件File3且不改变视频文件File1和File2;
直接使用MergeFile(File3,FALSE,File1,File2)即可。
实施例3:有两个10GB大小的视频文件File1和File2,需要剪辑合成一个视屏文件File3,视屏文件File3,大小为6GB,其中前面2GB来源于File1的0-2GB,后4GB来源于File2的0-4GB,要求修改后保持原来的File1和File2不变;
1、使用SplitFile(subFile1,File1,FALSE,0,2GB)切割生成subFile1;
2、使用SplitFile(subFile2,File2,FALSE,0,4GB)切割生成subFile2;
3、使用MergeFile(File3,TRUE,subFile1,subFile2)合成生成File3。
Claims (1)
1.一种基于重组文件元数据实现快速文件切割和合并的方法,其特征在于:其实施步骤如下:
I、扩展原有的POSIX文件操作接口,新增文件切割接口
SplitFile:char*newFileName,char*srcFileName,bool changeSrcFile,uint64offset,uint64 length;
参数说明:newFileName:切割后生成新文件的路径
srcFileName:被切割文件的路径
changeSrcFile:是否修改被切割文件的大小
offset:被切割文件的起始位置
length:被切割文件的切割长度
功能说明:将srcFileName文件从位置offset开始,长度为length的部分切割出来生成一个新的文件newFileName,切割后新生成的文件大小为length;
合并接口MergeFile:char*newFileName,bool deleteSubFile,char*subFilel,char*subFile2,char*subFile3,…;
参数说明:newFileName:合并后生成新文件的路径
deleteSubFile:是否删除被合并文件
subFile1:被合并文件1
subFile2:被合并文件2
subFile3:被合并文件3
功能说明:将subFile1、subFile2、subFile3…按照先后顺序合并成新文件newFileName,合并后新文件的大小是这些文件的总和;
II、这两个扩展接口通过IOCTL的方式与操作系统内核进行交互;
III、SplitFile接口的工作流程如下:
a、应用程序调用SplitFile接口,操作系统打开需要切割的源文件;
b、打开成功后,通过IOCTL的方式将新文件名newFileName,以及offset、length参数传到操作系统内核文件系统层;
c、文件系统层根据参数,生成一个新的空文件,然后根据源文件的数据块映射信息中需要切割的部分的块映射信息生成新文件的块映射信息,根据参数如果是直接改变源文件的内容,则修改源文件的块映射信息,如果是不改变源文件的内容,则将OSD中的块映射信息引用计数加1;
d、对于引用计数当修改这类引用计数大于1的数据块时采用CopyOnWrite的方式,生成新的OSD数据块;
e、修改源文件和新文件属性中的大小属性,给应用程序返回成功;
IV、MergeFile接口的工作流程如下:
a、应用程序调用MergeFile接口,先向文件系统中创建一个NewFileName的空文件;
b、创建成功后,通过IOCTL的方式,将需要合并的文件参数发送到操作系统内核文件系统层;
c、文件系统层根据需要合并的文件信息,依次获取它们的数据块分布信息,将这些分部信息写入到新文件的数据块分布信息中,如果deleteSubFile为TRUE,则删除所有的被合并文件的元数据信息;如果deleteSubFile为FALSE,则修改所有的相关OSD的数据块映射信息,使得引用计数加1;
d、设置新文件的大小,给应用程序返回成功。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410332471.2A CN104077409B (zh) | 2014-07-14 | 2014-07-14 | 一种基于重组文件元数据实现快速文件切割和合并的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410332471.2A CN104077409B (zh) | 2014-07-14 | 2014-07-14 | 一种基于重组文件元数据实现快速文件切割和合并的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104077409A CN104077409A (zh) | 2014-10-01 |
CN104077409B true CN104077409B (zh) | 2017-12-12 |
Family
ID=51598663
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410332471.2A Active CN104077409B (zh) | 2014-07-14 | 2014-07-14 | 一种基于重组文件元数据实现快速文件切割和合并的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104077409B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108205553B (zh) * | 2016-12-19 | 2021-12-28 | 深圳联友科技有限公司 | 一种基于文本文件的接口处理系统以及方法 |
CN106991021B (zh) * | 2017-03-31 | 2021-02-19 | 联想(北京)有限公司 | 从现有数据文件构建新数据文件的方法及系统 |
CN109195012A (zh) * | 2018-11-07 | 2019-01-11 | 成都索贝数码科技股份有限公司 | 一种基于对象存储分片转码/合成闪拼成mp4文件的方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101996228A (zh) * | 2009-08-18 | 2011-03-30 | 北京艾德斯科技有限公司 | 共享文件数据块的方法及解除共享文件数据块的方法 |
CN102567427A (zh) * | 2010-12-30 | 2012-07-11 | 中国移动通信集团公司 | 一种对象数据处理方法及装置 |
CN102622377A (zh) * | 2011-01-28 | 2012-08-01 | 北京千橡网景科技发展有限公司 | 用于合并文件的方法和设备 |
CN102982151A (zh) * | 2012-11-27 | 2013-03-20 | 南开大学 | 多个物理文件合并为一个逻辑文件的方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080052261A1 (en) * | 2006-06-22 | 2008-02-28 | Moshe Valenci | Method for block level file joining and splitting for efficient multimedia data processing |
US20130262397A1 (en) * | 2012-03-27 | 2013-10-03 | Sap Ag | Secure and reliable remote data protection |
-
2014
- 2014-07-14 CN CN201410332471.2A patent/CN104077409B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101996228A (zh) * | 2009-08-18 | 2011-03-30 | 北京艾德斯科技有限公司 | 共享文件数据块的方法及解除共享文件数据块的方法 |
CN102567427A (zh) * | 2010-12-30 | 2012-07-11 | 中国移动通信集团公司 | 一种对象数据处理方法及装置 |
CN102622377A (zh) * | 2011-01-28 | 2012-08-01 | 北京千橡网景科技发展有限公司 | 用于合并文件的方法和设备 |
CN102982151A (zh) * | 2012-11-27 | 2013-03-20 | 南开大学 | 多个物理文件合并为一个逻辑文件的方法 |
Non-Patent Citations (1)
Title |
---|
一种实现文件分割与组合的方法;戴永彬等;《辽宁工学院学报》;20050430;第25卷(第2期);第88-94页 * |
Also Published As
Publication number | Publication date |
---|---|
CN104077409A (zh) | 2014-10-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104731921B (zh) | Hadoop分布式文件系统针对日志型小文件的存储和处理方法 | |
US10545655B2 (en) | Context-sensitive views | |
US20180287978A1 (en) | Unscripted digital media message generation | |
US20150095882A1 (en) | Method for the utilization of environment media in a computing system | |
US20120198319A1 (en) | Media-Editing Application with Video Segmentation and Caching Capabilities | |
CN104881466B (zh) | 数据分片的处理以及垃圾文件的删除方法和装置 | |
Hurter et al. | Smooth bundling of large streaming and sequence graphs | |
CN104077409B (zh) | 一种基于重组文件元数据实现快速文件切割和合并的方法 | |
CN104714858A (zh) | 数据备份方法及装置、数据恢复方法及装置 | |
CN105808244A (zh) | 一种基于工作流的动态数据可视化分析工具 | |
CN104615710A (zh) | 一种电子地图框架数据更新方法 | |
Widanagamaachchi et al. | Tracking features in embedded surfaces: Understanding extinction in turbulent combustion | |
CN113010612A (zh) | 一种图数据可视化构建方法、查询方法及装置 | |
US20210326307A1 (en) | Synchronizing changes within a collaborative content management system | |
CA2854022C (en) | Artifact correlation between domains | |
CN106020589A (zh) | 文件夹桌面展示的装置及方法 | |
CN105978712A (zh) | 一种云计算管理系统的方法 | |
CN109189801B (zh) | 一种用于多视图联动分析的分析思路可视化方法 | |
CN106126487A (zh) | 一种日志文件拆分方法及装置 | |
CN106598990A (zh) | 一种搜索方法及系统 | |
CN107656908A (zh) | 占位符的实现方法和系统 | |
CN104360851A (zh) | 一种需求预演业务的组合控制方法 | |
US20220206676A1 (en) | Modifying drawing characteristics of digital raster images utilizing stroke properties | |
CN106709979A (zh) | 一种模型网格数据导出Obj文件的方法以及系统 | |
CN111611295A (zh) | 一种基于区块链技术的数据可视化共享平台 |
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 | ||
DD01 | Delivery of document by public notice | ||
DD01 | Delivery of document by public notice |
Addressee: Patent of Beijing Longcun Technology Co.,Ltd. The person in charge Document name: payment instructions |
|
DD01 | Delivery of document by public notice | ||
DD01 | Delivery of document by public notice |
Addressee: Patent of Beijing Longcun Technology Co.,Ltd. The person in charge Document name: Payment Notice |