CN102541869B - 写入文件的方法和装置 - Google Patents
写入文件的方法和装置 Download PDFInfo
- Publication number
- CN102541869B CN102541869B CN201010589798.XA CN201010589798A CN102541869B CN 102541869 B CN102541869 B CN 102541869B CN 201010589798 A CN201010589798 A CN 201010589798A CN 102541869 B CN102541869 B CN 102541869B
- Authority
- CN
- China
- Prior art keywords
- written
- file
- data
- block
- dsb
- 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
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明公开了一种写入文件的方法和装置,属于数据处理领域。该方法包括:接收客户端进程的写文件请求;所述写文件请求携带待写入文件的数据长度;根据所述数据长度,为所述待写入文件分配一个或一个以上数据存储块,所述一个或一个以上数据存储块的总数据长度与所述待写入文件的数据长度相同;将所述待写入文件写入所述一个或一个以上数据存储块。该装置包括:接收模块、分配模块和写入模块。
Description
技术领域
本发明涉及数据处理领域,特别涉及一种写入文件的方法和装置。
背景技术
随着互联网用户的大量增加,许多应用面临海量数据存储的挑战。如何在面对海量数据的时候能够高效,稳定,安全的存取数据是各互联网服务提供商致力研究的方向。分布式文件存储是近几年非常热门的技术,能够以较为廉价的设备满足海量数据存储的需求,目前已在许多公司部署实施。
此类系统文件存储方式模拟操作系统实现,按照固定的块大小分割文件,并由块服务器把块作为linux文件保存在本地硬盘上。
在对现有技术进行分析后,发明人发现现有技术至少具有如下缺点:
现有技术的分布式文件系统在写入文件时,不足一个固定块的文件,或文件中不足一个固定块的部分会单独占用了一个固定大小的空间,使得磁盘碎片多,磁盘空间利用率低,系统性能差。
发明内容
本发明实施例提供了一种写入文件的方法和装置。所述技术方案如下:
一种写入文件的方法包括:
接收客户端进程的写文件请求;所述写文件请求携带待写入文件的数据长度;
根据所述数据长度,为所述待写入文件分配一个或一个以上数据存储块,所述一个或一个以上数据存储块的总数据长度与所述待写入文件的数据长度相同;
将所述待写入文件写入所述一个或一个以上数据存储块;
根据所述数据长度,为所述待写入文件分配一个或一个以上数据存储块,具体包括:
判断所述待写入文件的数据长度是否小于预设数据存储块的数据长度,如果是,为所述待写入文件分配与所述数据长度相同的数据存储块;如果否,计算所述待写入文件所需的所述预设数据存储块的个数,并为计算后所述待写入文件中不足一个预设数据存储块的部分,分配与所述部分数据长度相同的数据存储块。
所述方法还包括:
保存所述待写入文件和所述一个或一个以上数据存储块之间的映射关系,并将所述映射关系发送给客户端。
将所述待写入文件写入所述一个或一个以上数据存储块,具体包括:
根据所述映射关系中的待写入文件的起始偏移量和所述多个数据存储块的文件偏移量和写入数据长度,将所述待写入文件中的数据对应的所述一个或一个以上数据存储块。
所述一个或一个以上数据存储块分布于一个或一个以上块文件服务器上。
一种写入文件的装置,包括:
接收模块,用于接收客户端进程的写文件请求;所述写文件请求携带待写入文件的数据长度;
分配模块,用于根据所述数据长度,为所述待写入文件分配一个或一个以上数据存储块,所述一个或一个以上数据存储块的总数据长度与所述待写入文件的数据长度相同;
写入模块,用于将所述待写入文件写入所述一个或一个以上数据存储块;
所述分配模块具体用于判断所述待写入文件的数据长度是否小于预设数据存储块的数据长度,如果是,为所述待写入文件分配与所述数据长度相同的数据存储块;如果否,计算所述待写入文件所需的所述预设数据存储块的个数,并为计算后所述待写入文件中不足一个预设数据存储块的部分,分配与所述部分数据长度相同的数据存储块。
所述装置还包括:
保存模块,用于保存所述待写入文件和所述一个或一个以上数据存储块之间的映射关系,并将所述映射关系发送给客户端。
所述写入模块具体用于根据所述映射关系中的待写入文件的起始偏移量和所述一个或一个以上数据存储块的文件偏移量和写入数据长度,将所述待写入文件中的数据对应的所述一个或一个以上数据存储块。
所述一个或一个以上数据存储块分布于一个或一个以上块文件服务器上。
本发明实施例提供的技术方案的有益效果是:
通过在为待写入文件分配数据存储块时,使得数据存储块的总数据长度与待写入文件的数据长度相同,充分利用磁盘空间,减少磁盘碎片产生几率,提升了系统性能。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种写入文件的方法的流程图;
图2是本发明实施例提供的一种写入文件的方法的流程图;
图3是本发明实施例提供的一种写入文件的装置的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
在介绍本发明提供的写入文件的方法之前,首先对本发明的基础知识进行简要的介绍:
CL(Client,客户端进程),分布式文件系统客户端接口;
CS(CtrlServer,控制进程),分布式文件系统核心控制进程;
FS(FileServer,块文件服务器进程);
粒度:按数量级划分的文件长度;
chunk:最小数据块单位,文件可分割为多个数据单位,这是一个逻辑单位。
实施例1
为了充分利用磁盘空间,本发明实施例提供了一种写入文件的方法,参见图1,该方法包括:
101:接收客户进程的写文件请求;该写文件请求携带待写入文件的数据长度;
102:根据所述数据长度,为所述待写入文件分配一个或一个以上数据存储块,所述一个或一个以上数据存储块的总数据长度与所述待写入文件的数据长度相同;
103:将所述待写入文件写入所述一个或一个以上数据存储块。
通过在为待写入文件分配数据存储块时,使得数据存储块的总数据长度与待写入文件的数据长度相同,充分利用磁盘空间,减少磁盘碎片产生几率,提升了系统性能。
实施例2
为了充分利用磁盘空间,本发明实施例提供了一种写入文件的方法,参见图2,该方法包括:
201:客户端进程CL向控制进程CS发送写文件请求;
202:CS接收该写文件请求;
在本实施例中,该写文件请求携带待写入文件的文件名、文件偏移量、数据长度和文件属性等。
203:控制进程判断该待写入文件的数据长度是否小于预设数据存储块的数据长度,
如果是,执行步骤204;
如果否,执行步骤205;
204:为该待写入文件分配与该数据长度相同的数据存储块,执行步骤206;
在本实施例中,需根据待写入文件的粒度为为其分配数据存储块,当待写入文件的数据长度小于预设数据存储块(即一个固定chunk)的数据长度时,该待写入文件为小粒度文件,则为该待写入文件分配与该数据长度相同的数据存储块,例如,预设数据存储块(即一个固定chunk)的数据长度为XM,待写入文件的数据长度为YM,Y<X,则只为该待写入数据分配YM的数据存储块,提高了磁盘的利用率,避免了磁盘空间的浪费。
205:计算该待写入文件所需的该预设数据存储块的个数,并为计算后该待写入文件中不足一个预设数据存储块的部分,分配与该部分数据长度相同的数据存储块;
在本实施例中,需根据待写入文件的粒度为为其分配数据存储块,当待写入文件的数据长度大于或等于预设数据存储块(即一个固定chunk)的数据长度时,该待写入文件为大粒度文件,可能会占用多个数据存储块,则计算该待写入文件所需的该预设数据存储块的个数,并为计算后该待写入文件中不足一个预设数据存储块的部分,分配与该部分数据长度相同的数据存储块。
例如,预设数据存储块(即一个固定chunk)的数据长度为XM,待写入文件的数据长度为ZM,Z远远大于X,则预设数据存储块的个数为N=Z÷X的正数部分,不足一个预设数据存储块的部分L=Z-N×X,为该部分分配的数据存储块的数据长度应为L。在现有技术中,不满单个chunk空间的数据将占用整个chunk,而在本实施例中,只为该部分数据分配与其数据长度相同的数据存储块,提高了磁盘的利用率,避免了磁盘空间的浪费。
206:保存该待写入文件和该一个或一个以上个数据存储块之间的映射关系,并将该映射关系发送给CL;
在实施例中,在每个数据存储块创建的时候,服务器进程分配给它一个不变的、全球唯一的64位的块句柄对它进行标识。块服务器把块作为linux文件保存在本地硬盘上,并根据指定的块句柄和字节范围来读写块数据。进一步地,CS在为每个chunk分配全球唯一的64位chunk句柄,将包含起始偏移量,写入数据长度,chunk句柄等字段的信息发送给CL,以便CL根据该chunk句柄对文件进行写入。
207:将该待写入文件写入该一个或一个以上个数据存储块。
在本发明实施例中,根据该映射关系中的待写入文件的起始偏移量和该一个或一个以上个数据存储块的文件偏移量和写入数据长度,将该待写入文件中的数据对应的该多个数据存储块。
本领域技术人员可以获知,chunk内部文件偏移量为起始偏移量与该chunk中写入数据长度的和,例如,待写入文件为(a+b)kb,而预设数据存储块(固定chunk)为akb,则在本实施例中,需一个预设数据存储块和一个数据长度为bkb的数据存储块,chunk的起始偏移量为1000,则该chunk的内部文件偏移量为(1000+a)kb。
进一步地,为待写入文件分配的映射关系中的数据存储块可分布于映射关系中的块文件服务器上。
本领域技术人员可以获知,当保存了所述待写入文件和所述多个数据存储块之间的映射关系后,可通过该映射关系读写文件,所以一个文件可以分割存储于锁个块文件服务器上。
通过在为待写入文件分配数据存储块时,使得数据存储块的总数据长度与待写入文件的数据长度相同,充分利用磁盘空间,减少磁盘碎片产生几率,提升了系统性能。
实施例3
为了充分利用磁盘空间,本发明实施例提供了一种写入文件的装置,参见图3,该装置包括:
接收模块301,用于接收客户端进程的写文件请求;该写文件请求携带待写入文件的数据长度;
分配模块302,用于根据该数据长度,为该待写入文件分配一个或一个以上数据存储块,该一个或一个以上数据存储块的总数据长度与该待写入文件的数据长度相同;
写入模块303,用于将该待写入文件写入该一个或一个以上数据存储块。
该分配模块302具体用于判断该待写入文件的数据长度是否小于预设数据存储块的数据长度,如果是,为该待写入文件分配与该数据长度相同的数据存储块;如果否,计算该待写入文件所需的该预设数据存储块的个数,并为计算后该待写入文件中不足一个预设数据存储块的部分,分配与该部分数据长度相同的数据存储块。
该装置还包括:
保存模块304,用于保存该待写入文件和该一个或一个以上数据存储块之间的映射关系,并将该映射关系发送给客户端。
该写入模块303具体用于根据该映射关系中的待写入文件的起始偏移量和该一个或一个以上数据存储块的文件偏移量和写入数据长度,将该待写入文件中的数据对应的该一个或一个以上数据存储块。
该一个或一个以上数据存储块分布于一个或一个以上块文件服务器上。
本实施例提供的装置,与方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
本发明实施例提供的上述技术方案的全部或部分可以通过程序指令相关的硬件来完成,所述程序可以存储在可读取的存储介质中,该存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (8)
1.一种写入文件的方法,其特征在于,包括:
接收客户端进程的写文件请求;所述写文件请求携带待写入文件的数据长度;
根据所述数据长度,为所述待写入文件分配一个或一个以上数据存储块,所述一个或一个以上数据存储块的总数据长度与所述待写入文件的数据长度相同;
将所述待写入文件写入所述一个或一个以上数据存储块;
根据所述数据长度,为所述待写入文件分配一个或一个以上数据存储块,具体包括:
判断所述待写入文件的数据长度是否小于预设数据存储块的数据长度,如果是,为所述待写入文件分配与所述数据长度相同的数据存储块;如果否,计算所述待写入文件所需的所述预设数据存储块的个数,并为计算后所述待写入文件中不足一个预设数据存储块的部分,分配与所述部分数据长度相同的数据存储块。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
保存所述待写入文件和所述一个或一个以上数据存储块之间的映射关系,并将所述映射关系发送给客户端。
3.根据权利要求2所述的方法,其特征在于,将所述待写入文件写入所述一个或一个以上数据存储块,具体包括:
根据所述映射关系中的待写入文件的起始偏移量和多个数据存储块的文件偏移量和写入数据长度,将所述待写入文件中的数据对应的所述一个或一个以上数据存储块。
4.根据权利要求1所述的方法,其特征在于,所述一个或一个以上数据存储块分布于一个或一个以上块文件服务器上。
5.一种写入文件的装置,其特征在于,包括:
接收模块,用于接收客户端进程的写文件请求;所述写文件请求携带待写入文件的数据长度;
分配模块,用于根据所述数据长度,为所述待写入文件分配一个或一个以上数据存储块,所述一个或一个以上数据存储块的总数据长度与所述待写入文件的数据长度相同;
写入模块,用于将所述待写入文件写入所述一个或一个以上数据存储块;
所述分配模块具体用于判断所述待写入文件的数据长度是否小于预设数据存储块的数据长度,如果是,为所述待写入文件分配与所述数据长度相同的数据存储块;如果否,计算所述待写入文件所需的所述预设数据存储块的个数,并为计算后所述待写入文件中不足一个预设数据存储块的部分,分配与所述部分数据长度相同的数据存储块。
6.根据权利要求5所述的装置,其特征在于,所述装置还包括:
保存模块,用于保存所述待写入文件和所述一个或一个以上数据存储块之间的映射关系,并将所述映射关系发送给客户端。
7.根据权利要求6所述的装置,其特征在于,所述写入模块具体用于根据所述映射关系中的待写入文件的起始偏移量和所述一个或一个以上数据存储块的文件偏移量和写入数据长度,将所述待写入文件中的数据对应的所述一个或一个以上数据存储块。
8.根据权利要求5所述的装置,其特征在于,所述一个或一个以上数据存储块分布于一个或一个以上块文件服务器上。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010589798.XA CN102541869B (zh) | 2010-12-07 | 2010-12-07 | 写入文件的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010589798.XA CN102541869B (zh) | 2010-12-07 | 2010-12-07 | 写入文件的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102541869A CN102541869A (zh) | 2012-07-04 |
CN102541869B true CN102541869B (zh) | 2016-08-10 |
Family
ID=46348791
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201010589798.XA Active CN102541869B (zh) | 2010-12-07 | 2010-12-07 | 写入文件的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102541869B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103778149A (zh) * | 2012-10-23 | 2014-05-07 | 腾讯科技(深圳)有限公司 | 文件系统及其对文件进行存储管理的方法 |
CN105528371B (zh) * | 2014-09-30 | 2019-06-07 | 北京金山云网络技术有限公司 | 一种执行写任务的方法、装置及系统 |
CN106527958B (zh) * | 2015-09-09 | 2020-03-10 | 阿里巴巴集团控股有限公司 | 用于分布式存储系统的写入数据、获取数据的方法和设备 |
CN105718530B (zh) * | 2016-01-15 | 2020-02-04 | 上海磁宇信息科技有限公司 | 文件存储系统及其文件存储控制方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101217571A (zh) * | 2008-01-18 | 2008-07-09 | 清华大学 | 用于多副本数据网格系统中的写/读文件操作的方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101419828B (zh) * | 2008-11-20 | 2011-02-09 | 杭州海康威视数字技术股份有限公司 | 一种模拟磁带串行模式的硬盘视频记录及检索方法 |
CN101446976A (zh) * | 2008-12-26 | 2009-06-03 | 中兴通讯股份有限公司 | 一种分布式文件系统中的文件存储方法 |
JP4599450B2 (ja) * | 2009-04-24 | 2010-12-15 | 株式会社東芝 | 電子機器、ファイルシステムの記憶領域割当法、および記憶領域割当プログラム |
-
2010
- 2010-12-07 CN CN201010589798.XA patent/CN102541869B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101217571A (zh) * | 2008-01-18 | 2008-07-09 | 清华大学 | 用于多副本数据网格系统中的写/读文件操作的方法 |
Non-Patent Citations (1)
Title |
---|
谭子军等.分布式存储系统中用户磁盘空间分配策略.《计算机工程》.2010,第36卷(第9期),第46页. * |
Also Published As
Publication number | Publication date |
---|---|
CN102541869A (zh) | 2012-07-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102240557B1 (ko) | 데이터 저장 방법, 장치 및 시스템 | |
CN106662981B (zh) | 存储设备、程序和信息处理方法 | |
US8590050B2 (en) | Security compliant data storage management | |
CN103136243B (zh) | 基于云存储的文件系统去重方法及装置 | |
CN103019962B (zh) | 数据缓存处理方法、装置以及系统 | |
CN110291509A (zh) | 在分散存储网络的区域中顺序地存储数据 | |
CN104503708B (zh) | 数据散列存储的方法及装置 | |
US8924353B1 (en) | Systems and methods for copying database files | |
CN107436725A (zh) | 一种数据写、读方法、装置及分布式对象存储集群 | |
CN103064797B (zh) | 数据处理方法和虚拟机管理平台 | |
CN103562914B (zh) | 节约资源型扩展文件系统 | |
US7979394B2 (en) | Method of managing storage and retrieval of data objects | |
CN101488924B (zh) | 一种元数据的修改方法和元数据服务器 | |
CN110134338B (zh) | 一种分布式存储系统及其数据冗余保护方法和相关设备 | |
CN109144406A (zh) | 分布式存储系统中元数据存储方法、系统及存储介质 | |
CN102541869B (zh) | 写入文件的方法和装置 | |
US10346066B2 (en) | Efficient erasure coding of large data objects | |
CN103324533A (zh) | 分布式数据处理方法、装置及系统 | |
CN103399823A (zh) | 业务数据的存储方法、设备和系统 | |
CN109471843A (zh) | 一种元数据缓存方法、系统及相关装置 | |
CN105653209A (zh) | 一种对象存储数据传输方法及装置 | |
CN107506154A (zh) | 一种元数据的读取方法、装置及计算机可读存储介质 | |
US8549223B1 (en) | Systems and methods for reclaiming storage space on striped volumes | |
CN107205024A (zh) | 一种云存储系统中数据去重方法及系统 | |
CN104079600A (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 | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20180906 Address after: 100191 Beijing Haidian District Zhichun Road 49 No. 3 West 309 Patentee after: Tencent cloud computing (Beijing) limited liability company Address before: 518000 East 403 room, Sai Ge science and Technology Park, Futian District, Shenzhen, Guangdong, 403 Patentee before: Tencent Technology (Shenzhen) Co., Ltd. |