CN111190537A - 一种追加写场景下顺序存储磁盘管理的方法及系统 - Google Patents
一种追加写场景下顺序存储磁盘管理的方法及系统 Download PDFInfo
- Publication number
- CN111190537A CN111190537A CN201911278697.8A CN201911278697A CN111190537A CN 111190537 A CN111190537 A CN 111190537A CN 201911278697 A CN201911278697 A CN 201911278697A CN 111190537 A CN111190537 A CN 111190537A
- Authority
- CN
- China
- Prior art keywords
- block
- chunk
- chunkmeta
- list
- size
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
- G06F3/0607—Improving or facilitating administration, e.g. storage management by facilitating the process of upgrading existing storage systems, e.g. for improving compatibility between host and storage device
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/0644—Management of space entities, e.g. partitions, extents, pools
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0674—Disk device
- G06F3/0676—Magnetic disk device
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Signal Processing For Digital Recording And Reproducing (AREA)
Abstract
本发明公开了一种追加写场景下顺序存储磁盘管理的方法及系统,方法包括:首先定义磁盘结构,对磁盘初始化,在首次写入数据时,ChunkServer申请chunk,初始化chunk的ChunkMeta信息;在申请chunk的同时,为该chunk申请一个block,作为chunk的起始block;将chunk的数据偏移和大小转成block的内的写入偏移和大小;当写入数据大小超过一个block的大小,分配一个新的block给ChunkServer;当分配block成功,将block的id写入到ChunkMeta的有序列表block_list中,同时,将下一个block的id写入前一个block的末尾数据段,完成落盘操作。本发明能够有效的对裸盘按照块的方式进行管理,灵活定义块的大小,利用追加写的办法提升存储速度。
Description
技术领域
本发明涉及磁盘管理技术领域,尤其涉及一种追加写场景下顺序存储磁盘管理的方法及系统。
背景技术
随着SSD(Solid State Disk,固态硬盘)等存储介质的出现,磁盘IO效率得到巨大突破,存储方式已经成了云存储瓶颈优化的重点。顺序读写是提升存储速度的一种重要方式,追加写是实现顺序读写的一种方式。在现有技术中,对于单机磁盘数据管理通常由两种方式,一种是使用本地文件系统进行数据管理;另外一种是对数据块进行数据管理,在系统初始化时,将磁盘划分成固定的大小块(通常被称为chunk),系统在存储文件数据时,通过算法分配磁盘上多个chunk(分布式存储系统对外开放提供的最小存储单位)来存储该文件,记录chunk与文件的对应关系,最后,将对应的关系持久化到数据盘或者数据库中。
现有分布式存储场景下的单机磁盘处理技术的主要缺陷有以下几点:
1、若chunk设置过大,系统事先会为每个chunk分配出固定大小,当存储小文件的时候,就会造成很大的浪费。例如,对于一个1G的chunk,实际未写满1GB,仍然会占用1GB的空间。
2、若chunk设置过小,系统为了快速索引chunk,会缓存chunk的上下文信息,导致chunk上下文信息占据较多的内存空间,而且每一次分配一个chunk需要持久化一次元数据,持久化操作的开销较大,不适合高性能的存储系统。
3、若使用本地文件系统存储,在IO路径上需要对文件元数据进行读写,导致写放大,耗费大量的CPU和磁盘IO资源,并且本地文件系统在某些场景下存在断电丢数据的风险。
4、数据文件存储的位置靠文件维持,元数据丢失的情况下,数据存储的位置无法恢复。
因此,如何有效的对追加写场景下顺序存储磁盘进行管理,是一项亟待解决的问题。
发明内容
有鉴于此,本发明提供了一种追加写场景下顺序存储磁盘管理的方法,能够有效的对裸盘按照块的方式进行管理,灵活定义块的大小,利用追加写的办法提升存储速度。
本发明提供了一种追加写场景下顺序存储磁盘管理的方法,包括:
将磁盘划分为DiskMeta、ChunkMeta和BlockData;其中,所述BlockData由固定大小磁盘块组成,通过磁盘物理偏移进行区分;
从磁盘加载DiskMeta和ChunkMeta数据信息;
基于所述ChunkMeta中起始block_id,按照块加载该chunk所有的block_id到所述ChunkMeta的有序列表block_list中;
扫描所述ChunkMeta的有序列表block_list,得到空闲的block的队列和block的分配位图block_bit_map;
在首次写入数据时,ChunkServer申请chunk,初始化chunk的ChunkMeta信息;
在申请chunk的同时,为该chunk申请一个block,作为chunk的起始block;
将chunk的数据偏移和大小转成block的内的写入偏移和大小;
当写入数据大小超过一个block的大小,分配一个新的block给ChunkServer;
当分配block成功,将block的id写入到所述ChunkMeta的有序列表block_list中,同时,将下一个block的id写入前一个block的末尾数据段,完成落盘操作。
优选地,所述当写入数据大小超过一个block的大小,分配一个新的block给ChunkServer,包括:
判断空闲block队列free_block_list是否为空,若是,则返回磁盘满的状态码,若否,则:
从所述空闲block队列free_block_list中获取第一个block;
通过所述block的分配位图block_bit_map判断该block是否被使用,若否,则:
该block分配成功,将所述block的分配位图block_bit_map的分配的位置置1。
优选地,所述方法还包括:
按照chunk上的偏移计算读取数据在chunk的第几个block上;
基于计算结果,在所述ChunkMeta中的有序列表block_list中,获取block的id;
按照block的id计算磁盘上的偏移地址,按照偏移读取数据;
判断读取数据大小是否超过当前的block,若否,则读取结束返回数据,若是,则从所述ChunkMeta中的有序列表block_list中获取下一个block。
优选地,所述方法还包括:
删除ChunkMeta元数据;
当删除所述ChunkMeta元数据成功时,释放block块。
优选地,当删除所述ChunkMeta元数据成功时,释放block块,包括:
将block的id加入空闲block队列free_block_list末尾;
将所述block的分配位图block_bit_map的分配位置置0。
一种追加写场景下顺序存储磁盘管理的系统,包括:
定义模块,用于将磁盘划分为DiskMeta、ChunkMeta和BlockData;其中,所述BlockData由固定大小磁盘块组成,通过磁盘物理偏移进行区分;
第一加载模块,用于从磁盘加载DiskMeta和ChunkMeta数据信息;
第二加载模块,用于基于所述ChunkMeta中起始block_id,按照块加载该chunk所有的block_id到所述ChunkMeta的有序列表block_list中;
扫描模块,用于扫描所述ChunkMeta的有序列表block_list,得到空闲的block的队列和block的分配位图block_bit_map;
初始化模块,用于在首次写入数据时,ChunkServer申请chunk,初始化chunk的ChunkMeta信息;
申请模块,用于在申请chunk的同时,为该chunk申请一个block,作为chunk的起始block;
转换模块,用于将chunk的数据偏移和大小转成block的内的写入偏移和大小;
分配模块,用于当写入数据大小超过一个block的大小,分配一个新的block给ChunkServer;
写入模块,用于当分配block成功,将block的id写入到所述ChunkMeta的有序列表block_list中,同时,将下一个block的id写入前一个block的末尾数据段,完成落盘操作。
优选地,所述分配模块在执行当写入数据大小超过一个block的大小,分配一个新的block给ChunkServer时,包括:
第一判断单元,用于判断空闲block队列free_block_list是否为空;
返回单元,用于当空闲block队列free_block_list为空时,返回磁盘满的状态码;
获取单元,用于当空闲block队列free_block_list不为空时,从所述空闲block队列free_block_list中获取第一个block;
第二判断单元,用于通过所述block的分配位图block_bit_map判断该block是否被使用;
设置单元,用于当通过所述block的分配位图block_bit_map判断该block未被使用时,该block分配成功,将所述block的分配位图block_bit_map的分配的位置置1。
优选地,所述系统还包括:
计算模块,用于按照chunk上的偏移计算读取数据在chunk的第几个block上;
第一获取模块,用于基于计算结果,在所述ChunkMeta中的有序列表block_list中,获取block的id;
读取模块,用于按照block的id计算磁盘上的偏移地址,按照偏移读取数据;
判断模块,用于判断读取数据大小是否超过当前的block;
返回模块,用于当读取数据大小未超过是否当前的block时,读取结束返回数据;
第二获取模块,用于当读取数据大小未超过当前的block时,从所述ChunkMeta中的有序列表block_list中获取下一个block。
优选地,所述系统还包括:
删除模块,用于删除ChunkMeta元数据;
释放模块,用于当删除所述ChunkMeta元数据成功时,释放block块。
优选地,所述释放模块具体用于:
将block的id加入空闲block队列free_block_list末尾;
将所述block的分配位图block_bit_map的分配位置置0。
综上所述,本发明公开了一种追加写场景下顺序存储磁盘管理的方法,当需要对追加写场景下顺序存储的磁盘进行管理时,首先从磁盘加载DiskMeta和ChunkMeta数据信息,然后基于ChunkMeta中起始block_id,按照块加载该chunk所有的block_id到ChunkMeta的有序列表block_list中;扫描ChunkMeta的有序列表block_list,得到空闲的block的队列和block的分配位图block_bit_map;在首次写入数据时,ChunkServer申请chunk,初始化chunk的ChunkMeta信息;在申请chunk的同时,为该chunk申请一个block,作为chunk的起始block;将chunk的数据偏移和大小转成block的内的写入偏移和大小;当写入数据大小超过一个block的大小,分配一个新的block给ChunkServer;当分配block成功,将block的id写入到所述ChunkMeta的有序列表block_list中,同时,将下一个block的id写入前一个block的末尾数据段,完成落盘操作。本发明能够有效的对裸盘按照块的方式进行管理,灵活定义块的大小,利用追加写的办法提升存储速度。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明公开的一种追加写场景下顺序存储磁盘管理的方法实施例1的方法流程图;
图2为本发明公开的一种追加写场景下顺序存储磁盘管理的方法实施例2的方法流程图;
图3为本发明公开的一种追加写场景下顺序存储磁盘管理的方法实施例3的方法流程图;
图4为本发明公开的一种追加写场景下顺序存储磁盘管理的系统实施例1的结构示意图;
图5为本发明公开的一种追加写场景下顺序存储磁盘管理的系统实施例2的结构示意图;
图6为本发明公开的一种追加写场景下顺序存储磁盘管理的系统实施例3的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,为本发明公开的一种追加写场景下顺序存储磁盘管理的方法实施例1的方法流程图,所述方法可以包括以下步骤:
S101、将磁盘划分为DiskMeta、ChunkMeta和BlockData;其中,BlockData由固定大小磁盘块组成,通过磁盘物理偏移进行区分;
当需要实现对追加写场景下顺序存储的磁盘进行管理时,在本实施例中,磁盘被划分层磁盘元数据段(DiskMeta),chunk原数据段(ChunkMetas)和BlockData段;其中,BlockData是由固定大小磁盘块组成,通过磁盘物理偏移进行区分。具体的,一个文件由多个chunk组成,一个chunk由多个block组成,chunk中需要存储的BlockData的有序列表(block_list),每一个BlockData依次使用一个blockId表示。
其中,chunk为自定义名称,表示分布式存储系统对外开放提供的最小存储单位;Block为自定义名称,表示分布式存储系统的单机上会将磁盘均匀划分成N个块,每一个块称之为一个Block。BlockData为自定义名称,表示Block的数据块叫做BlockData;DiskMeta为存放磁盘的元数据信息,包括磁盘的大小,磁盘中的Block个数等等。ChunkMeta为存储chunk的元信息,包括chunk的index,chunk已经使用的长度,可使用的长度,已经分配的磁盘的block的id。
S102、从磁盘加载DiskMeta和ChunkMeta数据信息;
然后对磁盘初始化,按照预先约定的DiskMeta大小、ChunkMeta大小和BlockData大小对磁盘的进行初始化。具体的,在对磁盘进行初始化时,首先从磁盘加载DiskMeta和ChunkMeta数据信息。
S103、基于ChunkMeta中起始block_id,按照块加载该chunk所有的block_id到ChunkMeta的有序列表block_list中;
然后,按照ChunkMeta中的起始block_id,按照块加载该chunk所有的block_id到ChunkMeta的有序列表block_list中。
S104、扫描ChunkMeta的有序列表block_list,得到空闲的block的队列和block的分配位图block_bit_map;
然后,扫描ChunkMeta的有序列表block_list,得到空闲的Block的队列(free_block_list)和block的分配位图。其中,Block分配位图是一个二字节的位图block_bit_map,通过0,1标识block是否被使用。
S105、在首次写入数据时,ChunkServer申请chunk,初始化chunk的ChunkMeta信息;
在数据写入过程中,在首次写入时,通过ChunkServer申请chunk,初始化chunk的ChunkMeta信息。其中,Chunkserver为自定义名称,是一种服务,管理chunk、ChunkMeta、Block的服务,负责接收和处理Client的文件存储请求。
S106、在申请chunk的同时,为该chunk申请一个block,作为chunk的起始block;
然后,在申请chunk的同时,需要为该chunk申请一个block,该block作为chunk的起始block。
S107、将chunk的数据偏移和大小转成block的内的写入偏移和大小;
然后,将chunk的数据偏移和大小转换成block的内的写入偏移和大小。
S108、当写入数据大小超过一个block的大小,分配一个新的block给ChunkServer;
若写入大小超过一个block的大小,ChunkServer会尝试分配一个新的block给ChunkServer。
S109、当分配block成功,将block的id写入到ChunkMeta的有序列表block_list中,同时,将下一个block的id写入前一个block的末尾数据段,完成落盘操作。
若分配block成功,将block的id写入到ChunkMeta的block_list中,同时,将下一个block的id写入前一个block的末尾数据段。之后,完成落盘操作。
综上所述,在上述实施例中,当需要对追加写场景下顺序存储的磁盘进行管理时,首先从磁盘加载DiskMeta和ChunkMeta数据信息,然后基于ChunkMeta中起始block_id,按照块加载该chunk所有的block_id到ChunkMeta的有序列表block_list中;扫描ChunkMeta的有序列表block_list,得到空闲的block的队列和block的分配位图block_bit_map;在首次写入数据时,ChunkServer申请chunk,初始化chunk的ChunkMeta信息;在申请chunk的同时,为该chunk申请一个block,作为chunk的起始block;将chunk的数据偏移和大小转成block的内的写入偏移和大小;当写入数据大小超过一个block的大小,分配一个新的block给ChunkServer;当分配block成功,将block的id写入到所述ChunkMeta的有序列表block_list中,同时,将下一个block的id写入前一个block的末尾数据段,完成落盘操作。本发明能够有效的对裸盘按照块的方式进行管理,灵活定义块的大小,利用追加写的办法提升存储速度。
具体的,在上述实施例1中,当写入数据大小超过一个block的大小,分配一个新的block给ChunkServer的其中一种实现方式如图2所示,可以包括以下步骤:
S201、判断空闲block队列free_block_list是否为空,若是,则进入S202,若否,则进入S203:
在分配新block
S202、返回磁盘满的状态码;
S203、从空闲block队列free_block_list中获取第一个block;
S204、通过block的分配位图block_bit_map判断该block是否被使用,若否,则进入S205:
S205、该block分配成功,将block的分配位图block_bit_map的分配的位置置1。
具体的,在上述实施例1的基础上还可以进一步实现对数据的处理,如图3所示,可以包括以下步骤:
S301、按照chunk上的偏移计算读取数据在chunk的第几个block上;
S302、基于计算结果,在ChunkMeta中的有序列表block_list中,获取block的id;
S303、按照block的id计算磁盘上的偏移地址,按照偏移读取数据;
S304、判断读取数据大小是否超过当前的block,若否,则进入S305,若是,则进入S306:
S305、读取结束返回数据;
S306、从ChunkMeta中的有序列表block_list中获取下一个block;
S307、删除ChunkMeta元数据;
S308、当删除ChunkMeta元数据成功时,释放block块。
具体的,可以通过将block的id加入空闲block队列free_block_list末尾,将block的分配位图block_bit_map的分配位置置0,实现block块的释放。
需要说明的是,本发明提供的追加写场景下顺序存储磁盘管理的方法,能够适用的磁盘存储介质包括但不限于SSD、HDD盘等存储介质。
综上所述,本发明将下一个block的id写入上一个block的数据末尾,减少了ChunkMeta持久化操作的次数。同时,能够在ChunkMeta元数据丢失的情况下,将数据存储的位置进行恢复。通过block_bit_map和free_block_list管理空闲的block,能够完成block的快速的分配和回收,简化了块管理的上下文信息,减少缓存管理的空间。block的大小可以灵活定义,减小了顺序存储的场景下的块管理的磁盘空间浪费。在追加读写情况下,能够动态分配灵活定义大小的磁盘块提供给用户使用。
如图4所示,为本发明公开的一种追加写场景下顺序存储磁盘管理的系统实施例1的结构示意图,所述系统可以包括:
定义模块401,用于将磁盘划分为DiskMeta、ChunkMeta和BlockData;其中,所述BlockData由固定大小磁盘块组成,通过磁盘物理偏移进行区分;
当需要实现对追加写场景下顺序存储的磁盘进行管理时,在本实施例中,磁盘被划分层磁盘元数据段(DiskMeta),chunk原数据段(ChunkMetas)和BlockData段;其中,BlockData是由固定大小磁盘块组成,通过磁盘物理偏移进行区分。具体的,一个文件由多个chunk组成,一个chunk由多个block组成,chunk中需要存储的BlockData的有序列表(block_list),每一个BlockData依次使用一个blockId表示。
其中,chunk为自定义名称,表示分布式存储系统对外开放提供的最小存储单位;Block为自定义名称,表示分布式存储系统的单机上会将磁盘均匀划分成N个块,每一个块称之为一个Block。BlockData为自定义名称,表示Block的数据块叫做BlockData;DiskMeta为存放磁盘的元数据信息,包括磁盘的大小,磁盘中的Block个数等等。ChunkMeta为存储chunk的元信息,包括chunk的index,chunk已经使用的长度,可使用的长度,已经分配的磁盘的block的id。
第一加载模块402,用于从磁盘加载DiskMeta和ChunkMeta数据信息;
然后对磁盘初始化,按照预先约定的DiskMeta大小、ChunkMeta大小和BlockData大小对磁盘的进行初始化。具体的,在对磁盘进行初始化时,首先从磁盘加载DiskMeta和ChunkMeta数据信息。
第二加载模块403,用于基于ChunkMeta中起始block_id,按照块加载该chunk所有的block_id到ChunkMeta的有序列表block_list中;
然后,按照ChunkMeta中的起始block_id,按照块加载该chunk所有的block_id到ChunkMeta的有序列表block_list中。
扫描模块404,用于扫描ChunkMeta的有序列表block_list,得到空闲的block的队列和block的分配位图block_bit_map;
然后,扫描ChunkMeta的有序列表block_list,得到空闲的Block的队列(free_block_list)和block的分配位图。其中,Block分配位图是一个二字节的位图block_bit_map,通过0,1标识block是否被使用。
初始化模块405,用于在首次写入数据时,ChunkServer申请chunk,初始化chunk的ChunkMeta信息;
在数据写入过程中,在首次写入时,通过ChunkServer申请chunk,初始化chunk的ChunkMeta信息。其中,Chunkserver为自定义名称,是一种服务,管理chunk、ChunkMeta、Block的服务,负责接收和处理Client的文件存储请求。
申请模块406,用于在申请chunk的同时,为该chunk申请一个block,作为chunk的起始block;
然后,在申请chunk的同时,需要为该chunk申请一个block,该block作为chunk的起始block。
转换模块407,用于将chunk的数据偏移和大小转成block的内的写入偏移和大小;
然后,将chunk的数据偏移和大小转换成block的内的写入偏移和大小。
分配模块408,用于当写入数据大小超过一个block的大小,分配一个新的block给ChunkServer;
若写入大小超过一个block的大小,ChunkServer会尝试分配一个新的block给ChunkServer。
写入模块409,用于当分配block成功,将block的id写入到所述ChunkMeta的有序列表block_list中,同时,将下一个block的id写入前一个block的末尾数据段,完成落盘操作。
若分配block成功,将block的id写入到ChunkMeta的block_list中,同时,将下一个block的id写入前一个block的末尾数据段。之后,完成落盘操作。
综上所述,在上述实施例中,当需要对追加写场景下顺序存储的磁盘进行管理时,首先从磁盘加载DiskMeta和ChunkMeta数据信息,然后基于ChunkMeta中起始block_id,按照块加载该chunk所有的block_id到ChunkMeta的有序列表block_list中;扫描ChunkMeta的有序列表block_list,得到空闲的block的队列和block的分配位图block_bit_map;在首次写入数据时,ChunkServer申请chunk,初始化chunk的ChunkMeta信息;在申请chunk的同时,为该chunk申请一个block,作为chunk的起始block;将chunk的数据偏移和大小转成block的内的写入偏移和大小;当写入数据大小超过一个block的大小,分配一个新的block给ChunkServer;当分配block成功,将block的id写入到所述ChunkMeta的有序列表block_list中,同时,将下一个block的id写入前一个block的末尾数据段,完成落盘操作。本发明能够有效的对裸盘按照块的方式进行管理,灵活定义块的大小,利用追加写的办法提升存储速度。
具体的,在上述系统实施例1中,分配模块在执行当写入数据大小超过一个block的大小,分配一个新的block给ChunkServer时的其中一种实现方式如图5所示,可以包括:
第一判断单元501,用于判断空闲block队列free_block_list是否为空;
返回单元502,用于当空闲block队列free_block_list为空时,返回磁盘满的状态码;
获取单元503,用于当空闲block队列free_block_list不为空时,从空闲block队列free_block_list中获取第一个block;
第二判断单元504,用于通过block的分配位图block_bit_map判断该block是否被使用;
设置单元505,用于当通过所述block的分配位图block_bit_map判断该block未被使用时,该block分配成功,将block的分配位图block_bit_map的分配的位置置1。
具体的,在上述系统实施例1的基础上还可以进一步实现对数据的处理,如图6所示,可以包括:
计算模块601,用于按照chunk上的偏移计算读取数据在chunk的第几个block上;
第一获取模块602,用于基于计算结果,在ChunkMeta中的有序列表block_list中,获取block的id;
读取模块603,用于按照block的id计算磁盘上的偏移地址,按照偏移读取数据;
判断模块604,用于判断读取数据大小是否超过当前的block;
返回模块605,用于当读取数据大小未超过是否当前的block时,读取结束返回数据;
第二获取模块606,用于当读取数据大小未超过当前的block时,从ChunkMeta中的有序列表block_list中获取下一个block;
删除模块607,用于删除ChunkMeta元数据;
释放模块608,用于当删除ChunkMeta元数据成功时,释放block块。
具体的,释放模块可以通过将block的id加入空闲block队列free_block_list末尾,将block的分配位图block_bit_map的分配位置置0,实现block块的释放。
需要说明的是,本发明提供的追加写场景下顺序存储磁盘管理的方法,能够适用的磁盘存储介质包括但不限于SSD、HDD盘等存储介质。
综上所述,本发明将下一个block的id写入上一个block的数据末尾,减少了ChunkMeta持久化操作的次数。同时,能够在ChunkMeta元数据丢失的情况下,将数据存储的位置进行恢复。通过block_bit_map和free_block_list管理空闲的block,能够完成block的快速的分配和回收,简化了块管理的上下文信息,减少缓存管理的空间。block的大小可以灵活定义,减小了顺序存储的场景下的块管理的磁盘空间浪费。在追加读写情况下,能够动态分配灵活定义大小的磁盘块提供给用户使用。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种追加写场景下顺序存储磁盘管理的方法,其特征在于,包括:
将磁盘划分为DiskMeta、ChunkMeta和BlockData;其中,所述BlockData由固定大小磁盘块组成,通过磁盘物理偏移进行区分;
从磁盘加载DiskMeta和ChunkMeta数据信息;
基于所述ChunkMeta中起始block_id,按照块加载该chunk所有的block_id到所述ChunkMeta的有序列表block_list中;
扫描所述ChunkMeta的有序列表block_list,得到空闲的block的队列和block的分配位图block_bit_map;
在首次写入数据时,ChunkServer申请chunk,初始化chunk的ChunkMeta信息;
在申请chunk的同时,为该chunk申请一个block,作为chunk的起始block;
将chunk的数据偏移和大小转成block的内的写入偏移和大小;
当写入数据大小超过一个block的大小,分配一个新的block给ChunkServer;
当分配block成功,将block的id写入到所述ChunkMeta的有序列表block_list中,同时,将下一个block的id写入前一个block的末尾数据段,完成落盘操作。
2.根据权利要求1所述的方法,其特征在于,所述当写入数据大小超过一个block的大小,分配一个新的block给ChunkServer,包括:
判断空闲block队列free_block_list是否为空,若是,则返回磁盘满的状态码,若否,则:
从所述空闲block队列free_block_list中获取第一个block;
通过所述block的分配位图block_bit_map判断该block是否被使用,若否,则:
该block分配成功,将所述block的分配位图block_bit_map的分配的位置置1。
3.根据权利要求2所述的方法,其特征在于,还包括:
按照chunk上的偏移计算读取数据在chunk的第几个block上;
基于计算结果,在所述ChunkMeta中的有序列表block_list中,获取block的id;
按照block的id计算磁盘上的偏移地址,按照偏移读取数据;
判断读取数据大小是否超过当前的block,若否,则读取结束返回数据,若是,则从所述ChunkMeta中的有序列表block_list中获取下一个block。
4.根据权利要求3所述的方法,其特征在于,还包括:
删除ChunkMeta元数据;
当删除所述ChunkMeta元数据成功时,释放block块。
5.根据权利要求4所述的方法,其特征在于,当删除所述ChunkMeta元数据成功时,释放block块,包括:
将block的id加入空闲block队列free_block_list末尾;
将所述block的分配位图block_bit_map的分配位置置0。
6.一种追加写场景下顺序存储磁盘管理的系统,其特征在于,包括:
定义模块,用于将磁盘划分为DiskMeta、ChunkMeta和BlockData;其中,所述BlockData由固定大小磁盘块组成,通过磁盘物理偏移进行区分;
第一加载模块,用于从磁盘加载DiskMeta和ChunkMeta数据信息;
第二加载模块,用于基于所述ChunkMeta中起始block_id,按照块加载该chunk所有的block_id到所述ChunkMeta的有序列表block_list中;
扫描模块,用于扫描所述ChunkMeta的有序列表block_list,得到空闲的block的队列和block的分配位图block_bit_map;
初始化模块,用于在首次写入数据时,ChunkServer申请chunk,初始化chunk的ChunkMeta信息;
申请模块,用于在申请chunk的同时,为该chunk申请一个block,作为chunk的起始block;
转换模块,用于将chunk的数据偏移和大小转成block的内的写入偏移和大小;
分配模块,用于当写入数据大小超过一个block的大小,分配一个新的block给ChunkServer;
写入模块,用于当分配block成功,将block的id写入到所述ChunkMeta的有序列表block_list中,同时,将下一个block的id写入前一个block的末尾数据段,完成落盘操作。
7.根据权利要求6所述的系统,其特征在于,所述分配模块在执行当写入数据大小超过一个block的大小,分配一个新的block给ChunkServer时,包括:
第一判断单元,用于判断空闲block队列free_block_list是否为空;
返回单元,用于当空闲block队列free_block_list为空时,返回磁盘满的状态码;
获取单元,用于当空闲block队列free_block_list不为空时,从所述空闲block队列free_block_list中获取第一个block;
第二判断单元,用于通过所述block的分配位图block_bit_map判断该block是否被使用;
设置单元,用于当通过所述block的分配位图block_bit_map判断该block未被使用时,该block分配成功,将所述block的分配位图block_bit_map的分配的位置置1。
8.根据权利要求7所述的系统,其特征在于,还包括:
计算模块,用于按照chunk上的偏移计算读取数据在chunk的第几个block上;
第一获取模块,用于基于计算结果,在所述ChunkMeta中的有序列表block_list中,获取block的id;
读取模块,用于按照block的id计算磁盘上的偏移地址,按照偏移读取数据;
判断模块,用于判断读取数据大小是否超过当前的block;
返回模块,用于当读取数据大小未超过是否当前的block时,读取结束返回数据;
第二获取模块,用于当读取数据大小未超过当前的block时,从所述ChunkMeta中的有序列表block_list中获取下一个block。
9.根据权利要求8所述的系统,其特征在于,还包括:
删除模块,用于删除ChunkMeta元数据;
释放模块,用于当删除所述ChunkMeta元数据成功时,释放block块。
10.根据权利要求9所述的系统,其特征在于,所述释放模块具体用于:
将block的id加入空闲block队列free_block_list末尾;
将所述block的分配位图block_bit_map的分配位置置0。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911278697.8A CN111190537B (zh) | 2019-12-10 | 2019-12-10 | 一种追加写场景下顺序存储磁盘管理的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911278697.8A CN111190537B (zh) | 2019-12-10 | 2019-12-10 | 一种追加写场景下顺序存储磁盘管理的方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111190537A true CN111190537A (zh) | 2020-05-22 |
CN111190537B CN111190537B (zh) | 2023-08-25 |
Family
ID=70707314
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911278697.8A Active CN111190537B (zh) | 2019-12-10 | 2019-12-10 | 一种追加写场景下顺序存储磁盘管理的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111190537B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112035069A (zh) * | 2020-09-17 | 2020-12-04 | 上海二三四五网络科技有限公司 | 一种判断文件是否完整落盘的控制方法及装置 |
CN112540731A (zh) * | 2020-12-22 | 2021-03-23 | 北京百度网讯科技有限公司 | 数据的追加写方法、装置、设备、介质和程序产品 |
CN114579062A (zh) * | 2022-04-29 | 2022-06-03 | 深圳市杉岩数据技术有限公司 | 基于分布式存储系统的磁盘优化方法及装置 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006331076A (ja) * | 2005-05-26 | 2006-12-07 | Hitachi Ltd | データ記憶システム及び記憶方法 |
JP2008140396A (ja) * | 2007-12-10 | 2008-06-19 | Sharp Corp | ファイル管理装置 |
JP2009116946A (ja) * | 2007-11-06 | 2009-05-28 | Hitachi Maxell Ltd | 記憶装置、およびデータ書き込み制御方法 |
CN102169419A (zh) * | 2011-04-02 | 2011-08-31 | 无锡众志和达存储技术有限公司 | 基于sata控制器的raid数据块拆分、组装方法 |
CN102779180A (zh) * | 2012-06-29 | 2012-11-14 | 华为技术有限公司 | 数据存储系统的操作处理方法,数据存储系统 |
CN104035729A (zh) * | 2014-05-22 | 2014-09-10 | 中国科学院计算技术研究所 | 一种日志映射的块设备精简配置方法 |
US20140289493A1 (en) * | 2013-03-22 | 2014-09-25 | Fujitsu Limited | Control device, storage device, and computer-readable recording medium having stored therein control program |
CN105630808A (zh) * | 2014-10-31 | 2016-06-01 | 北京奇虎科技有限公司 | 基于分布式文件系统的文件读取、写入方法及节点服务器 |
CN108958660A (zh) * | 2018-07-02 | 2018-12-07 | 深圳市茁壮网络股份有限公司 | 分布式存储系统及其数据处理方法和装置 |
CN109614054A (zh) * | 2018-12-20 | 2019-04-12 | 广州鼎甲计算机科技有限公司 | 数据的读取方法和系统 |
-
2019
- 2019-12-10 CN CN201911278697.8A patent/CN111190537B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006331076A (ja) * | 2005-05-26 | 2006-12-07 | Hitachi Ltd | データ記憶システム及び記憶方法 |
JP2009116946A (ja) * | 2007-11-06 | 2009-05-28 | Hitachi Maxell Ltd | 記憶装置、およびデータ書き込み制御方法 |
JP2008140396A (ja) * | 2007-12-10 | 2008-06-19 | Sharp Corp | ファイル管理装置 |
CN102169419A (zh) * | 2011-04-02 | 2011-08-31 | 无锡众志和达存储技术有限公司 | 基于sata控制器的raid数据块拆分、组装方法 |
CN102779180A (zh) * | 2012-06-29 | 2012-11-14 | 华为技术有限公司 | 数据存储系统的操作处理方法,数据存储系统 |
US20140289493A1 (en) * | 2013-03-22 | 2014-09-25 | Fujitsu Limited | Control device, storage device, and computer-readable recording medium having stored therein control program |
CN104035729A (zh) * | 2014-05-22 | 2014-09-10 | 中国科学院计算技术研究所 | 一种日志映射的块设备精简配置方法 |
CN105630808A (zh) * | 2014-10-31 | 2016-06-01 | 北京奇虎科技有限公司 | 基于分布式文件系统的文件读取、写入方法及节点服务器 |
CN108958660A (zh) * | 2018-07-02 | 2018-12-07 | 深圳市茁壮网络股份有限公司 | 分布式存储系统及其数据处理方法和装置 |
CN109614054A (zh) * | 2018-12-20 | 2019-04-12 | 广州鼎甲计算机科技有限公司 | 数据的读取方法和系统 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112035069A (zh) * | 2020-09-17 | 2020-12-04 | 上海二三四五网络科技有限公司 | 一种判断文件是否完整落盘的控制方法及装置 |
CN112035069B (zh) * | 2020-09-17 | 2024-02-27 | 上海二三四五网络科技有限公司 | 一种判断文件是否完整落盘的控制方法及装置 |
CN112540731A (zh) * | 2020-12-22 | 2021-03-23 | 北京百度网讯科技有限公司 | 数据的追加写方法、装置、设备、介质和程序产品 |
CN112540731B (zh) * | 2020-12-22 | 2023-08-11 | 北京百度网讯科技有限公司 | 数据的追加写方法、装置、设备、介质和程序产品 |
CN114579062A (zh) * | 2022-04-29 | 2022-06-03 | 深圳市杉岩数据技术有限公司 | 基于分布式存储系统的磁盘优化方法及装置 |
CN114579062B (zh) * | 2022-04-29 | 2022-08-05 | 深圳市杉岩数据技术有限公司 | 基于分布式存储系统的磁盘优化方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN111190537B (zh) | 2023-08-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8239648B2 (en) | Reclamation of thin provisioned disk storage | |
US11461027B2 (en) | Deduplication-aware load balancing in distributed storage systems | |
US10289315B2 (en) | Managing I/O operations of large data objects in a cache memory device by dividing into chunks | |
CN105100146B (zh) | 数据存储方法、装置及系统 | |
CN111190537B (zh) | 一种追加写场景下顺序存储磁盘管理的方法及系统 | |
US7305537B1 (en) | Method and system for I/O scheduler activations | |
CN109614377A (zh) | 分布式文件系统的文件删除方法、装置、设备及存储介质 | |
JP2017521762A (ja) | ストレージ装置、プログラム、情報処理方法 | |
CN108733306B (zh) | 一种文件合并方法及装置 | |
JP2002202902A (ja) | パーティション作成方法および削除方法、プログラムを記録した記録媒体、情報処理装置 | |
CN110765076B (zh) | 数据存储方法、装置、电子设备及存储介质 | |
JP6011349B2 (ja) | ストレージ装置、およびデータ圧縮方法 | |
US20090125573A1 (en) | Transactional multi-package installation | |
CN110858162B (zh) | 内存管理方法及装置、服务器 | |
CN112114753B (zh) | 一种数据写入方法、装置及设备 | |
CN113568582B (zh) | 数据管理方法、装置和存储设备 | |
EP3364303B1 (en) | Data arrangement method, storage apparatus, storage controller and storage array | |
CN111506269A (zh) | 一种磁盘存储空间分配方法、装置、设备及存储介质 | |
CN111177143A (zh) | 键值数据存储方法、装置、存储介质与电子设备 | |
CN113806300A (zh) | 数据存储方法、系统、装置、设备及存储介质 | |
CN111435286B (zh) | 一种数据存储方法、装置和系统 | |
US20170255393A1 (en) | Storage device and storage method | |
CN108132759B (zh) | 一种文件系统中管理数据的方法和装置 | |
CN109144403B (zh) | 一种用于云盘模式切换的方法与设备 | |
US20170344578A1 (en) | Compressed data layout for optimizing data transactions |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |