一种固态硬盘存储数据的方法和设备与流程

文档序号:24123993发布日期:2021-03-02 12:38阅读:123来源:国知局
一种固态硬盘存储数据的方法和设备与流程

[0001]
本领域涉及计算机领域,并且更具体地涉及一种固态硬盘存储数据的方法和设备。


背景技术:

[0002]
固态硬盘(ssd)是一种用来存储用户数据的设备。固态硬盘由控制器,存储介质nand(闪存)等模块组成。控制器中运行firmware(在控制器上运行的嵌入式软件)进行资源的控制,对用户数据存储调度,维护nand设备等操作。nand是存储介质,是一种芯片,一个固态硬盘内往往有多个nand颗粒。固态硬盘能提供高并发的读写性能,是因为固态硬盘内有多个可并行操作的存储单元,每个存储单元在进行读写的时候,其他的存储单元可以响应其他的读写请求,一个nand颗粒内有多个存储单元。
[0003]
数据库是用来存储用户数据的一种软件结构。给用户提供增、删、改、查接口。可以允许用户存入新数据,删除旧数据,修改已存储的数据,查询已有的数据。数据库根据实现原理,可以分为行数据库和列数据库。用户存入的一个信息(简称为一条记录),往往分为多个字段。多条信息存储在数据库中,可以看作是一个二维表。数据库的结构如果将一个记录存储在一起,则为行结构,将字段存储在一起,则位列结构。一般来说,数据库要么是行结构的,要么是列结构的。对于行结构数据库,当用户需要对列进行索引时,容易取得记录的全部内容,但不容易取得字段的全部内容,如果数据存储在列数据库中,则可以轻易获取列的内容,但是又很难获取行的内容。因此当有需求既根据列进行索引,又有需求根据行进行索引时,往往是存储两份数据,分别应对行索引和列索引。


技术实现要素:

[0004]
有鉴于此,本发明实施例的目的在于提出一种固态硬盘存储数据的方法和设备,通过使用本发明的方法,能够能有效地提升读写性能,对于行和列均会作为索引的数据库需求,能极大的降低查询的复杂度,数据查询不需要返回全部字段的内容,大幅度提升查询和读取性能。
[0005]
基于上述目的,本发明的实施例的一个方面提供了一种固态硬盘存储数据的方法,包括以下步骤:
[0006]
响应于接收到存储数据的指令,将待存储的数据拆分成若干个字段并统计字段的数量;
[0007]
将字段的数量与固态硬盘的通道数量进行对比;
[0008]
响应于字段的数量大于通道数量,将拆分成的字段按照顺序依次循环写入固态硬盘的各个通道中。
[0009]
根据本发明的一个实施例,还包括:
[0010]
响应于字段的数量小于通道数量,将拆分成的每个字段分别写入固态硬盘的不同的通道中。
[0011]
根据本发明的一个实施例,还包括:
[0012]
将写入单个通道中的字段的数量与单个通道中的lun的数量进行对比;
[0013]
响应于写入单个通道中的字段的数量大于单个通道中的lun的数量,将写入单个通道的字段按顺序依次循环写入lun中。
[0014]
根据本发明的一个实施例,还包括:
[0015]
记录待存储数据的数据信息;
[0016]
记录拆分的字段存储到固态硬盘的通道的物理地址;
[0017]
将数据信息和物理地址绘制成数据库。
[0018]
根据本发明的一个实施例,数据信息包括用户id、字段名、字段类型和字段长度。
[0019]
本发明的实施例的另一个方面,还提供了一种固态硬盘存储数据的设备,设备包括:
[0020]
拆分模块,拆分模块配置为响应于接收到存储数据的指令,将待存储的数据拆分成若干个字段并统计字段的数量;
[0021]
对比模块,对比模块配置为将字段的数量与固态硬盘的通道数量进行对比;
[0022]
写入模块,写入模块配置为响应于字段的数量大于通道数量,将拆分成的字段按照顺序依次循环写入固态硬盘的各个通道中。
[0023]
根据本发明的一个实施例,还包括存储模块,存储模块配置为:
[0024]
响应于字段的数量小于通道数量,将拆分成的每个字段分别写入固态硬盘的不同的通道中。
[0025]
根据本发明的一个实施例,还包括比较模块,比较模块配置为:
[0026]
将写入单个通道中的字段的数量与单个通道中的lun的数量进行对比;
[0027]
响应于写入单个通道中的字段的数量大于单个通道中的lun的数量,将写入单个通道的字段按顺序依次循环写入lun中。
[0028]
根据本发明的一个实施例,还包括绘制模块,绘制模块配置为:
[0029]
记录待存储数据的数据信息;
[0030]
记录拆分的字段存储到固态硬盘的通道的物理地址;
[0031]
将数据信息和物理地址绘制成数据库。
[0032]
根据本发明的一个实施例,数据信息包括用户id、字段名、字段类型和字段长度。
[0033]
本发明具有以下有益技术效果:本发明实施例提供的固态硬盘存储数据的方法,通过响应于接收到存储数据的指令,将待存储的数据拆分成若干个字段并统计字段的数量;将字段的数量与固态硬盘的通道数量进行对比;响应于字段的数量大于通道数量,将拆分成的字段按照顺序依次循环写入固态硬盘的通道中的技术方案,能够能有效地提升读写性能,对于行和列均会作为索引的数据库需求,能极大的降低查询的复杂度,数据查询不需要返回全部字段的内容,大幅度提升查询和读取性能。
附图说明
[0034]
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以
根据这些附图获得其他的实施例。
[0035]
图1为根据本发明一个实施例的固态硬盘存储数据的方法的示意性流程图;
[0036]
图2为根据本发明一个实施例的固态硬盘存储数据的设备的示意图。
具体实施方式
[0037]
为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明实施例进一步详细说明。
[0038]
基于上述目的,本发明的实施例的第一个方面,提出了一种固态硬盘存储数据的方法的一个实施例。图1示出的是该方法的示意性流程图。
[0039]
如图1中所示,该方法可以包括以下步骤:
[0040]
s1响应于接收到存储数据的指令,将待存储的数据拆分成若干个字段并统计字段的数量,将用户的待存储的数据根据任意的规则拆分成多个字段,然后统计将该数据一共拆分成了多少个字段,其中的数据可能是一个综合的数据结构,不只是一个数字或者一个字符串,可能是图像、音频、复合数据结构等,比如用于图像检索领域,用户可能用不同缩略图的图像和图像的类型作为存储数据,每个字段不再是几个字节,而是较大的容量;
[0041]
s2将字段的数量与固态硬盘的通道数量进行对比,固态硬盘中包括多个通道,每个通道内又包含了多个lun,每个lun中有多个block,将拆分成的字段存储到固态硬盘中的多个通道中,如果通道数量大于字段数量,则每个字段独自存储在一个通道中的lun中;
[0042]
s3响应于字段的数量大于通道数量,将拆分成的字段按照顺序依次循环写入固态硬盘的各个通道中,如果字段数量超过通道数,则将字段轮流放入通道中,举例来说,共有1000个字段待存储,系统内只有16个通道,则数据的字段0、字段16、字段32

写入通道0中,字段1、字段17、字段33

写入通道1中,以此类推。
[0043]
通过本发明的技术方案,能够能有效地提升读写性能,对于行和列均会作为索引的数据库需求,能极大的降低查询的复杂度,数据查询不需要返回全部字段的内容,大幅度提升查询和读取性能。
[0044]
在本发明的一个优选实施例中,还包括:
[0045]
响应于字段的数量小于通道数量,将拆分成的每个字段分别写入固态硬盘的不同的通道中。如果字段的数量小于通道数量,那么每个字段单独存储在一个通道中,即每个通道存储该数据的唯一一个字段。
[0046]
在本发明的一个优选实施例中,还包括:
[0047]
将写入单个通道中的字段的数量与单个通道中的lun的数量进行对比;
[0048]
响应于写入单个通道中的字段的数量大于单个通道中的lun的数量,将写入单个通道的字段按顺序依次循环写入lun中。由于固态硬盘硬件内的中存储单元也是二维结构,分为多个逻辑单元(lun),每个lun内有多个block,因此当用户的字段数量小于lun数量时,每个字段独占一个lun,当字段数量超过lun数量时,则均匀的多个字段共享一个lun,可以按照上述的方式循环写入,也可以计算每个lun能存储的字段数量,然后将字段按照数量随机存储在lun中。
[0049]
在本发明的一个优选实施例中,还包括:
[0050]
记录待存储数据的数据信息;
[0051]
记录拆分的字段存储到固态硬盘的通道的物理地址;
[0052]
将数据信息和物理地址绘制成数据库。
[0053]
在本发明的一个优选实施例中,数据信息包括用户id、字段名、字段类型和字段长度。主机也可以根据数据存储的方式创建数据库,数据库数据的增、删、查也可以通过io数据命令来实现。如果用io命令实现,则分为两步,第一次写操作写入命令字,如增加、删除、读取。如果是数据库的增加操作,则第二次写操作写入数据记录。如果是读取操作,则第二次发送读取命令,则可以读出数据内容。用户的写入数据,在固态硬盘的firmware处理过程中,根据字段结构进行拆分,每个字段放到对应的通道内。并且记下来这个用户数据的id与物理地址的映射表。如果用户需要对某些行或者列建立索引,则也将这个索引记录下来。索引和映射表作为数据库的meta信息,下电时存储于ssd的区域内,运行时存储于ram中。当用户进行查询时,基于用户id和物理地址的索引表,找到数据对应的物理地址。然后将这些物理地址的数据进行读取,发送至主机端。当用户进行删除时,则修改数据库的meta信息,包括修改映射表和索引表。由于nand仅支持以block为单位进行擦除,所以固态硬盘的firmware在后台进行垃圾回收操作。
[0054]
数据库的索引表和映射表存储于固态硬盘的ram空间内。当下电时,这些表写回nand区域,下次上电时重新加载到内存。一般来说,内存空间相比nand存储空间来说,容量要小很多。因此当内存耗尽时,固态硬盘则向主机汇报,停止接收新的写入操作,直到数据库经过删除有新的内存空间为止。当进行数据库查询时,firmware收到用户的查询请求,进行索引表的查询,得到数据后,可以发现这些数据分布于不同的行和列中。由于每个lun均可以同时进行读取,因此firmware会对数据进行组织,尽量使每个lun并发的处理读取操作,最大化的利用nand的性能。由于nand介质不支持直接修改已存储的数据,因此主机如果需要修改某项数据记录,则应当先进行擦除,再进行重新写入来实现修改。
[0055]
通过本发明的技术方案,能够能有效地提升读写性能,对于行和列均会作为索引的数据库需求,能极大的降低查询的复杂度,数据查询不需要返回全部字段的内容,大幅度提升查询和读取性能。
[0056]
需要说明的是,本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关硬件来完成,上述的程序可存储于计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中存储介质可为磁碟、光盘、只读存储器(read-only memory,rom)或随机存取存储器(random access memory,ram)等。上述计算机程序的实施例,可以达到与之对应的前述任意方法实施例相同或者相类似的效果。
[0057]
此外,根据本发明实施例公开的方法还可以被实现为由cpu执行的计算机程序,该计算机程序可以存储在计算机可读存储介质中。在该计算机程序被cpu执行时,执行本发明实施例公开的方法中限定的上述功能。
[0058]
基于上述目的,本发明的实施例的第二个方面,提出了一种固态硬盘存储数据的设备,如图2所示,设备200包括:
[0059]
拆分模块,拆分模块配置为响应于接收到存储数据的指令,将待存储的数据拆分成若干个字段并统计字段的数量;
[0060]
对比模块,对比模块配置为将字段的数量与固态硬盘的通道数量进行对比;
[0061]
写入模块,写入模块配置为响应于字段的数量大于通道数量,将拆分成的字段按照顺序依次循环写入固态硬盘的各个通道中。
[0062]
在本发明的一个优选实施例中,还包括存储模块,存储模块配置为:
[0063]
响应于字段的数量小于通道数量,将拆分成的每个字段分别写入固态硬盘的不同的通道中。
[0064]
在本发明的一个优选实施例中,还包括比较模块,比较模块配置为:
[0065]
将写入单个通道中的字段的数量与单个通道中的lun的数量进行对比;
[0066]
响应于写入单个通道中的字段的数量大于单个通道中的lun的数量,将写入单个通道的字段按顺序依次循环写入lun中。
[0067]
在本发明的一个优选实施例中,还包括绘制模块,绘制模块配置为:
[0068]
记录待存储数据的数据信息;
[0069]
记录拆分的字段存储到固态硬盘的通道的物理地址;
[0070]
将数据信息和物理地址绘制成数据库。
[0071]
在本发明的一个优选实施例中,数据信息包括用户id、字段名、字段类型和字段长度。
[0072]
上述实施例,特别是任何“优选”实施例是实现的可能示例,并且仅为了清楚地理解本发明的原理而提出。可以在不脱离本文所描述的技术的精神和原理的情况下对上述实施例进行许多变化和修改。所有修改旨在被包括在本公开的范围内并且由所附权利要求保护。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1