一种数据存储方法、装置、设备及存储介质
技术领域
本发明涉及分布式文件***、块存储***领域,特别涉及一种数据存储方法、装置、设备及存储介质。
背景技术
如今是信息***时代,人们可以获取的数据成指数倍增长,计算机通过文件***管理和存储数据,单纯通过增加硬盘个数来扩展计算机文件***存储容量的方式已不能满足目前的应用场景,并且在容量大小、容量增长速度、数据备份、数据安全等方面的表现都差强人意。分布式文件***可以有效解决数据的存储和管理难题。
块存储***作为分布式文件***的物理存储单元,是非常重要的一个模块。块存储***的性能和存储方式等特性对分布式文件***起了决定性的作用。
目前常见的块存储***的存储单位在启动时是固定的。这样无论存储小数据还是大数据,都使用相同的存储单位来存储,造成存储资源的浪费。
发明内容
本发明实施例提供的一种数据存储方法、装置、设备及存储介质,通过实现块存储***的存储单位的智能切换,解决存储资源浪费的问题。
根据本发明实施例提供的一种数据存储方法,包括:
根据待存储的业务数据,确定所述业务数据大小;
根据所述业务数据大小,确定适合所述业务数据大小的存储单位;
按照所述存储单位,将所述业务数据保存至所述块存储***。
优选地,在所述根据待存储的业务数据,确定所述业务数据大小之前,还包括:
根据存储器容量和预设的数据页大小,确定用于存储数据的数据页区和用于管理所述数据页区的元数据区;
其中,所述元数据区包括具有区EXTENT描述符的EXTENT描述符区和具有段描述符的段描述符区。
优选地,所述根据存储器容量和预设的数据页大小,确定用于存储数据的数据页区和用于管理所述数据页区的元数据区之后,还包括:
从所述段描述符区申请空闲的段描述符,并将已创建的逻辑块组CHUNKGROUP的基本信息写入所述段描述符中。
优选地,所述根据所述业务数据大小,确定适合所述业务数据大小的存储单位包括:
在向所述CHUNKGROUP写入业务数据期间,当根据所述业务数据大小连续申请的EXTENT描述符对应的EXTENT均大于或均小于当前的存储单位时,重新确定适合所述业务数据大小的存储单位。
优选地,所述根据所述业务数据大小,确定适合所述业务数据大小的存储单位包括:
在向所述CHUNKGROUP写入业务数据期间,分析所述业务数据的模型,根据所述业务数据的模型,重新确定适合所述业务数据大小的存储单位。
优选地,所述按照所述存储单位,将所述业务数据保存至所述块存储***包括:
按照重新确定的适合所述业务数据大小的所述存储单位,从所述EXTENT描述符区为已创建的所述CHUNKGROUP申请空闲的EXTENT描述符;
按照所述存储单位,将所述业务数据写入所述EXTENT描述符对应的EXTENT;
其中,所述存储单位的大小是所述数据页的大小的2的N次方倍,所述N为大于或等于0的整数。
优选地,还包括:
将已申请的空闲的所述EXTENT描述符写入已申请的所述段描述符中的空闲EXTENT页链表;
若所述EXTENT描述符对应的EXTENT未写满,则将所述EXTENT描述符写入已申请的所述段描述符中的可用EXTENT页链表;
若所述EXTENT描述符对应的EXTENT已写满,则将所述EXTENT描述符写入已申请的所述段描述符中的满EXTENT页链表。
根据本发明实施例提供的一种数据存储装置,包括:
数据量确定模块,用于根据待存储的业务数据,确定所述业务数据大小;
存储单位选择模块,用于根据所述业务数据大小,确定适合所述业务数据大小的存储单位;
业务数据存储模块,用于按照所述存储单位,将所述业务数据保存至所述块存储***。
根据本发明实施例提供的一种数据存储设备,所述设备包括:处理器,以及与所述处理器耦接的存储器;所述存储器上存储有可在所述处理器上运行的数据存储程序,所述数据存储程序被所述处理器执行时实现上述的的数据存储方法的步骤。
根据本发明实施例提供的一种存储介质,其上存储有数据存储程序,所述数据存储程序被处理器执行时实现如上述的数据存储方法的步骤。
本发明实施例提供的技术方案具有如下有益效果:
本发明实施例的块存储***支持多种规格的存储单位,能够根据存储数据大小,智能切换存储单位,不仅大大提高了块存储的存储空间使用率,而且能够提高读写性能,增加分布式文件***的应用范围。
附图说明
图1是本发明实施例提供的数据存储流程图;
图2是本发明实施例提供的数据存储装置框图;
图3是本发明实施例提供的存储介质的存储布局图;
图4是本发明实施例提供的段描述符页的结构图;
图5是本发明实施例提供的区描述符页的结构图;
图6是本发明实施例提供的区描述符页位图(BITMAP)的结构图。
具体实施方式
以下结合附图对本发明的优选实施例进行详细说明,应当理解,以下所说明的优选实施例仅用于说明和解释本发明,并不用于限定本发明。
图1是本发明实施例提供的数据存储流程图,如图1所示,步骤包括:
步骤S101:在块存储***运行期间,根据待存储的业务数据,确定所述业务数据大小。
在步骤S101之前,进行格式化处理,具体地说,根据存储器容量和预设的数据页大小,确定用于存储数据的数据页区和用于管理所述数据页区的元数据区。其中,所述元数据区包括具有EXTENT描述符的EXTENT描述符区和具有段描述符的段描述符区。进一步地,还需要对EXTENT描述符区和段描述符区进行格式化处理。然后创建CHUNKGROUP(逻辑块组),并从所述段描述符区申请空闲的段描述符,将已创建的CHUNKGROUP的基本信息写入所述段描述符中。
步骤S102:根据所述业务数据大小,确定适合所述业务数据大小的存储单位。
步骤S102的目的在于,选择符合实际数据大小的存储单元,即若是大数据量数据,设置大的存储单位,若是小数据量数据,设置小的存储单位,若是包含大数据量和小数据量的混合数据,则根据数据模型,设置合适的存储单位。具体地说,在向所述CHUNKGROUP写入业务数据期间,当根据所述业务数据大小连续申请的EXTENT描述符对应的EXTENT均大于或均小于当前的存储单位时,重新确定适合所述业务数据大小的存储单位。或者,在向所述CHUNKGROUP写入业务数据期间,分析所述业务数据的模型,根据所述业务数据的模型,重新确定适合所述业务数据大小的存储单位。
步骤S103:按照所述存储单位,将所述业务数据保存至所述块存储***。
步骤S103包括:按照重新确定的适合所述业务数据大小的所述存储单位,从所述EXTENT描述符区为已创建的所述CHUNKGROUP申请空闲的EXTENT描述符,按照所述存储单位,将所述业务数据写入所述EXTENT描述符对应的EXTENT。
其中,将已申请的空闲的所述EXTENT描述符写入已申请的所述段描述符中的空闲EXTENT页链表,随着数据写入,若所述EXTENT描述符对应的EXTENT未写满,则将所述EXTENT描述符写入已申请的所述段描述符中的可用EXTENT页链表,若所述EXTENT描述符对应的EXTENT已写满,则将所述EXTENT描述符写入已申请的所述段描述符中的满EXTENT页链表。
上述存储单位的大小是所述数据页的大小的2的N次方倍,所述N为大于或等于0的整数。
本领域普通技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于计算机可读取存储介质中。进一步说,本发明还可以提供一种存储介质,其上存储有数据存储程序,所述数据存储程序被处理器执行时实现如上述的数据存储方法的步骤。其中,所述的存储介质可以包括ROM/RAM、磁碟、光盘、U盘。
图2是本发明实施例提供的数据存储装置框图,如图2所示,包括:
数据量确定模块,用于根据待存储的业务数据,确定所述业务数据大小;
存储单位选择模块,用于根据所述业务数据大小,确定适合所述业务数据大小的存储单位;
业务数据存储模块,用于按照所述存储单位,将所述业务数据保存至所述块存储***。
所述装置可以设置在块存储***的控制器或处理器上,在格式化处理及创建CHUNKGROUP之后,数据量确定模块确定所述业务数据大小,存储单位选择模块选择符合所述业务数据大小的存储单元,若是大数据量数据,设置大的存储单位,若是小数据量数据,设置小的存储单位,若是包含大数据量和小数据量的混合数据,则根据数据模型,设置合适的存储单位。业务数据存储模块按照存储单位选择模块设置的存储单位,从所述EXTENT描述符区为已创建的所述CHUNKGROUP申请空闲的EXTENT描述符,然后按照所述存储单位,将所述业务数据写入所述EXTENT描述符对应的EXTENT。
本实施例提供一种数据存储设备,所述设备包括:处理器,以及与所述处理器耦接的存储器;所述存储器上存储有可在所述处理器上运行的数据存储程序,所述数据存储程序被所述处理器执行时实现上述的数据存储方法的步骤。
面对海量的、各式各样、大小不同的数据,本发明实施例提供一种多规格存储单位的块存储***,提供了更加多元化的存储方式,可以有效的对数据进行管理,提高磁盘存储的利用率,优化存储效率,大大提高分布式文件***的应用场景。
如图3所示的存储介质的存储布局图,首先需要将存储介质格式化,根据存储介质的大小和数据页的大小计算元数据区的大小,并对元数据区进行初始化,包括对段描述符合EXTENT描述符的初始化,元数据区是用来管理数据页。如图4段描述符的结构图,段描述符主要记录了一个CHUNKGOURP的信息,包括CHUNKSIZE、CHUNKGOURP NAME和ID,还有该CHUNKGOURP申请到的EXTENT的三个链表,用于管理属于该CHUNKGOURP的数据页。如图5所示的EXTENT描述符页图,作为CHUNKGOURP申请数据页的单位,用来管理该CHUNKGOURP申请的数据页。图6是EXTENT描述符具体管理的数据页的方式,是通过位图来管理的,一个位代表一个数据页,当该数据页被使用,则对应的位置为1,否则置为0。下面结合图3至图6做进一步说明。
本发明实施例首先将存储介质(比如裸盘)按照初始设定的数据页大小划分为固定大小的数据页,每个数据页大小是CHUNKGROUP存储单位的最小单位。CHUNKGROUP用来存储数据,CHUNKGROUP是一个逻辑的概念,类似于文件***中的文件,作为存储数据的容器。写入数据时CHUNKGROUP不断的申请CHUCKSIZE为单位的空间来存储数据。本发明实施例中创建了不同CHUNKSIZE的CHUNKGROUP来存储数据,用户可以根据存储数据的大小,选择不同CHUNKSIZE的CHUNKGROUP,从而达到优化存储***的存储空间利用率。
具体实现时:将存储介质初始化为两个部分,元数据区和数据页区,元数据区用来管理数据页区,包括全局控制页、EXTENT(区)描述符区、段描述符区等,如图3所示的存储介质的存储布局图。元数据区每页的大小是16K,数据页的默认大小应该设置为CHUNK(逻辑块)所能支持的最小尺寸,每个CHUNKGROUP的存储单位简称CHUNK。用户数据区的数据页都有一样的大小,一旦格式化之后就不能变更。设置的CHUNK的大小只能是数据页的2的n次方倍,n的取值是大于等于0的整数。数据页的管理采用EXTENT(区)来组织,EXTENT描述符包含一个管理若干个页(可任意设置,下面以64为例)的bitmap(位图),一个区描述符管理64个页,可以提供连续的存储空间,并且便于管理。按照段->区->页的方式来管理,一个段由一个或多个区组成,一个区由64个页组成。对于同一个段,每次最少申请一个区。事实上,上层应用的一个CHUNKGROUP在本模块内部对应一个段描述符,记录CHUNKGROUP的基本信息。
下面具体对重要的两个模块进行描述:
EXTENT描述符用来管理数据页,默认一个EXTENT描述符管理64个数据页;EXTENT描述符区由多个连续的EXTENT描述符页组成,EXTENT描述符页的数量是在格式化的时候根据默认数据页大小计算出来的,如图5所示的EXTENT描述符页的结构图。每个EXTENT描述符页包含若干个EXTENT描述符,每个EXTENT描述符包含了对该EXTENT的基本描述信息和一个页位图(管理64个数据页),如图6所示的区描述符页位图的结构图,当某个位图被置位时表示该数据页已被分配出去。创建CHUNKGROUP时,最低申请一个EXTENT描述符,这样可以获得连续的存储空间,提高存储效率。CHUNKGROUP的基本存储单位是数据页的2的n次方倍,n的取值是大于等于0的整数。
段描述符区由多个不连续的段描述符页组成,每个段描述符页包含了若干个段描述符。段描述符内部包括CHUNKGROUP ID、CHUNKGROUP名称、每个CHUNK的大小和申请的EXTENT描述符等信息,如图4段描述符页位图的结构图。每次申请CHUNK时,首先到该段记录的EXTENT描述符信息中寻找未满的EXTENT来分配,如果没有未满的EXTENT,则申请一个新EXTENT来分配。提供三个链表,一个空闲区链表,一个未满区的链表;一个满的区的链表。当删掉某个CHUNK时,则需要判断如果是在满的区,则要将该区从满列表添加到未满列表中。如果是在未满区,则需要判断该区是否已经没有CHUNK,若是则将该区转移到空闲区链表。
本发明实施例的块存储***通过EXTENT和段描述符来管理数据页,可以实现适配不同存储单元的CHUNKGROUP,这样可以根据不同大小的数据,选择对应大小存储单元的CHUNKGROUP,从而起到节约存储空间,提高存储效率的作用,大大提高了分布式文件***的应用场景。
本发明实施例实现了智能选择存储单位,***会根据写入数据的大小选择合适的存储单位,并且能够智能的分析数据模型,对存储单位进行调整。以达到最优的存储效果,尽量节约存储空间,并且提高读写性能。
下面具体阐述一下其具体实现:***刚开始存储数据时,会默认设置一个存储单位;当存储的数据的大小连续申请N个EXTET都大于或小于当前的存储单位,则自动申请符合实际数据大小的存储单位的EXTENT,这种智能化的存储方式,对于存储大数据块时提高数据存储的连续性,从而提高存储和读取性能;一个CHUNKGROUP中的CHUNK是通过B+树来管理的,每个CHUNK的存储位置都是B+中叶子节点中的一个记录,对于存储小数据块时,通过使用小的存储单位,减少了数据页内的偏移,可以通过具体的CHUNK快速的定位数据存储的位置。
本发明实施例的块存储***实现了智能选择存储单位的存储***,块存储***运行时可以智能的分析数据模型,选择合适的存储单元进行存储,其基本流程如下:
一、格式化存储介质
1、设置存储介质的数据页大小,数据页的大小设置为CHUNK所能支持的最小尺寸,可根据实际存储的数据选择指定。
2、根据存储介质的总容量,计算出元数据区需要使用的磁盘空间,包括EXTENT描述符区和段描述符区等的大小。
EXTENT描述符区的计算方法为:
EXTENT描述符区=存储介质大小/数据页大小/EXTENT描述符管理的数据页数。
3、数据区:存储介质减去上面计算出来元数据的大小,就是数据区,数据区全部存储用户数据。
二、格式化EXTENT描述符区和段描述符区
1、EXTENT描述符区的页是通过三个链表来管理,FullExtentPageList为满extent页链表,AvailableExtentPageList为可用extent页链表,FreeExtentPageList为空闲extent页链表,记录在控制页中。满extent页链表中的记录表示EXTENT中的数据页都已经写满了;可用extent页链表记录了EXTENT中的记录表示数据页没有写满但已经写了部分;空闲extent页链表记录了EXTENT中的记录表示数据页没有写的部分。
2、同样段描述符中也有三个链表,availbale_list为可用链表,full_list为满链表,free_list为空闲链表,对该CHUNKGROUP中的CHUNK进行管理。
三、创建CHUNKGROUP设置存储单位大小的CHUNK
1、创建CHUNKGROUP时,由于一个EXTENT可以设置管理的数据页数,要求是2的n次方。这样CHUNKGROUP的基本存储单位是数据页的2的n次方倍,n的取值是大于等于0的整数。最大不能超过一个EXTENT的大小。
2、首先到段描述符页中申请一个空闲的段描述符,将该CHUNKGROUP的基本信息写到该段描述符中,包括CHUNKGROUP ID、CHUNKGROUP名称、每个CHUNK的大小和管理属于该CHUNKGROUP的EXTENT的三个链表等。
3、向CHUNKGROUP中写入数据时,到EXTENT描述符区中申请一个空闲的EXTENT描述符加入到该段描述符的FreeExtentPageList链表中,根据CHUNK的大小每次写入指定的数据,如果该EXTENT描述符用完,将该EXTENT描述符加入到该段描述符的FullExtentPageList链表中,则继续到EXTENT描述符区中继续申请一个空闲的EXTENT描述符。
四、当***运行存储数据时,当存储的数据的大小连续申请N个EXTET都大于或小于当前的存储单位,则自动申请符合实际数据大小的存储单位的EXTENT。一个CHUNKGROUP就会有多个存储单位的EXTENT来存储数据,每个规格的EXTENT分别有单独的链表进行管理。
相较于现阶段的块存储技术,本发明实施例支持多种规格的存储单位,当存储小数据量的数据时,比如存储大量小图片等,可以设置较小的存储单元,这样便于数据的管理,并且可以大大节省存储空间;当存储大数据量的数据时,可以设置较大的存储单元,这样可以在存储介质上申请连续的存储空间,大大的提高读写性能;当存储的数据有大数据和小数据时,***会智能分析数据模型,选择合适的存储单元进行存储。
以基于块存储***的分布式文件***存储聊天中的小图片等小数据为例,在本方案中,由于聊天记录大多是文字和图片、小视频等小数据量的数据,块存储***创建CHUNKGROUP存储这些数据时,可以设置128K或256K大小的CHUNK。存储时,由于存储单位比较小,利用设置的CHUNK可以有效的存放和管理这些数据。相比较业界常见的存储单位是1M的CHUNK,如果一张图片存储到一个CHUNK里面,存储空间可以节约4-8倍,大大的节约了存储空间。
以基于块存储***的分布式文件***存储大数据量数据为例,在本方案中,由于存储的数据是大数据量的数据,块存储***创建CHUNKGROUP存储这些数据时,可以根据数据量的大小设置CHUNK,比如4M或更大。这样存储数据时,如果数据页的大小也是4M,申请一个EXTENT描述符时,自动的申请了4M*64=256M的存储空间,这样,可获得连续的存储空间,这样可以大大提供存储的读写效率。
以基于块存储***的分布式文件***存储混合数据为例,在本方案中,由于存储的数据是混合数据,有大数据量和小数据量的数据,***在运行过程中会智能化的分析数据模块,自动选择最优的存储单位进行存储,使用小的存储单位存储小数据量,使用大的存储单位存储大数据量数据,从而达到各自的存储优点。
综上所述,本发明的实施例具有以下技术效果:
应用本发明实施例的智能切换存储单位的块存储***,首先可以支持不同的存储单位;其次可以根据存储数据自身特点智能的优选合适的存储单位存储数据。当存储小数据量的数据,比如几K的小图片等,可以设置较小的存储单元,这样便于数据的管理,并且可以节省存储空间;当存储大数据量的数据,可以设置较大的存储单元,这样可以在存储介质上申请连续的存储空间,可以大大的提高读写性能。
尽管上文对本发明进行了详细说明,但是本发明不限于此,本技术领域技术人员可以根据本发明的原理进行各种修改。因此,凡按照本发明原理所作的修改,都应当理解为落入本发明的保护范围。