本申请涉及计算机
技术领域:
:,具体涉及计算机网络
技术领域:
:,尤其涉及存储器系统和存储数据的方法。
背景技术:
::现有的键值存储系统通常采用预写日志的方式实现数据的持久化,以保障数据的高可用性。预写日志的主要思想是在操作数据库之前,必须先写记录到日志文件中,然后再将记录同步到磁盘上。因此预写日志方式保证日志一定先于数据落盘。一旦存储引擎崩溃,重启后可以通过扫描日志文件的方式来恢复数据库。而如果写入预写日志失败,那么整个操作也将认为失败。常见的基于预写日志方式的键值存储系统有leveldb、rocksdb、hbase、sqlite等。现有的键值存储系统是基于文件系统的,底层外存储介质通常是机械磁盘或者固态盘。现有技术中的日志文件存储到nandflash(用来存储数据信息的外存储介质,具有按页读写、按块擦除的特点)上至少需要经过三次转换,先将键值数据存储至文件,再由文件存储至逻辑区块地址(logicalblockaddress,lba),最后由逻辑区块地址到nandflash的物理地址。这一存储日志文件的过程,写放大系数较大且读写性能差。写放大系数较大主要体现在:一方面,写日志文件的逻辑转换太多导致存储到nandflash的映射关系不直接,每一层转换都会引起写放大;另一方面,每次操作都需要先写记录到日志文件中以保证数据的持久化,然后再将数据落盘,造成同一份在日志文件和数据库中双重写入,写放大继续增加。读写性能差主要体现在:一方面,日志文件的更新是一个同步落盘的过程,对写性能影响较大;而且每次读操作都需要先遍历日志文件,对读性能也有影响;另一方面,写放大也会额外占用较多的nvme数据通信协议,影响读写性能。此外,现有技术中的日志文件存储,索引表重建速度慢。固态盘本身的固件算法对数据做了异常掉电相关的逻辑保护,与预写日志的逻辑具有一定程度上的重复性。一旦存储系统崩溃,重启后进行数据恢复时,先要恢复固态盘本身的逻辑,然后才能扫描日志文件来恢复数据库。功能重复性增加了额外的开销,影响了索引表重建的速度。技术实现要素:本申请实施例提供了存储器系统和存储数据的方法。第一方面,本申请实施例提供了一种存储器系统,包括:固态盘;固态盘包括:持久性内存、非持久性内存和外存储介质;持久性内存,被配置成采用第一数据传输协议接收并存储数据量小于页面数据量的输入的键值业务数据;非持久性内存,被配置成接收并存储持久性内存中累积的数据量等于页面数据量键值业务数据,采用第二数据传输协议接收并存储数据量等于页面数据量的输入的键值业务数据,第二数据传输协议的传输速率小于第一数据传输协议;外存储介质,被配置成接收并存储非持久性内存中的键值业务数据。在一些实施例中,外存储介质包括:文件系统区域和值日志区域;文件系统区域,被配置成接收并存储非持久性内存中的键值业务数据中的元数据;值日志区域,被配置成接收并存储非持久性内存中的键值业务数据中的键值数据。在一些实施例中,文件系统区域进一步被配置成:基于文件id接收并存储非持久性内存中的键值业务数据中的元数据;其中,文件id与存储键值业务数据中的元数据的文件的粒度相对应。在一些实施例中,文件系统区域中的文件id仅存储与保存键值业务数据中的元数据的文件的粒度相对应的最新版本的文件。在一些实施例中,值日志区域包括:物理块组,物理块组包括外存储介质中具有相同物理块号的物理块;物理块组中的键值业务数据与二级索引表交替存放;其中,二级索引表包括多个二级索引表入口,每个二级索引表入口记录键值数据在值日志区域中的映射关系;二级索引表被配置成基于接收并存储的非持久性内存中的键值业务数据中的键值数据更新。在一些实施例中,物理块组中的最后一个预定大小的空间存放一级索引表,一级索引表包括多个一级索引表入口,每个一级索引表入口记录二级索引表的索引数据,索引数据包括:二级索引表偏移量、二级索引表大小和二级索引表入口的数量;一级索引表被配置成基于二级索引表的更新数据更新。在一些实施例中,物理块组中的首个预设大小的空间为存放头部信息的空间,头部信息包括物理块组的属性信息,属性信息包括:数据来源、p/e计数、版本号和已损坏物理块;存放头部信息的空间被配置成:基于接收并存储的非持久性内存中的键值业务数据中的键值数据更新头部信息。在一些实施例中,外存储介质还包括:保留区域,被配置成在断电时接收并存储持久性内存中的键值业务数据;和/或非持久性内存为由电容保护的非持久性内存,且值日志区域进一步被配置成在断电时接收并存储非持久性内存中的键值业务数据中的键值数据。在一些实施例中,持久性内存进一步被配置成:在上电时接收并存储保留区域中的键值业务数据。在一些实施例中,存放头部信息的空间进一步被配置成:在上电时,接收并存储基于物理块组中的头部信息和一级索引表所恢复的物理块组的属性信息;非持久性内存进一步被配置成:接收并存储根据物理块组的版本号对所有物理块组进行排序得到的排序顺序;物理块组进一步被配置成:接收并存储基于排序顺序扫描所有已经写满的物理块组所重建的内存映射表;将未写满的物理块组中的数据全部搬迁至新的物理块组中;以及接收并存储响应于搬迁结束所更新的内存映射表。在一些实施例中,存储器系统还包括:内核适配层,被配置成将输入的键值业务数据直接映射至固态盘的物理地址;持久性内存,进一步被配置成经由内核适配层采用第一数据传输协议接收并存储数据量小于页面数据量的输入的键值业务数据;非持久性内存,进一步被配置成经由内核适配层采用第二数据传输协议接收并存储数据量等于页面数据量的输入的键值业务数据。在一些实施例中,存储器系统还包括:主机,被配置成:由存储器系统外部接收键值业务数据;判断持久性内存中是否存在累积的键值业务数据;若持久性内存中存在累积的键值业务数据,则将接收到的键值业务数据中补齐累积的键值业务数据的数据量至页面数据量的键值业务数据作为输入的键值业务数据;将接收到的键值业务数据中未用于补齐的键值业务数据根据页面数据量切分,并将切分后数据量等于和/或小于页面数据量的键值业务数据作为输入的键值业务数据;若持久性内存中不存在累积的数据,则判断接收到的键值业务数据是否大于页面数据量;若接收到的键值业务数据的数据量小于或等于页面数据量,则将接收到的键值业务数据作为输入的键值业务数据;若接收到的键值业务数据的数据量大于页面数据量,则将接收到的键值业务数据根据页面数据量切分,并将切分后数据量等于和/或小于页面数据量的键值业务数据作为输入的键值业务数据。第二方面,本申请实施例提供了一种存储数据的方法,包括:获取输入的键值业务数据;响应于输入的键值业务数据的数据量小于页面数据量,采用第一数据传输协议将键值业务数据存储至持久性内存中,响应于输入的键值业务数据的数据量等于页面数据量,采用第二数据传输协议将键值业务数据经由非持久性内存存储至外存储介质中,其中,第二数据传输协议的传输速率小于第一数据传输协议;响应于持久性内存中累积的键值业务数据的数据量等于页面数据量,将持久性内存中累积的键值业务数据经由非持久性内存存储至外存储介质中。在一些实施例中,经由非持久性内存存储至外存储介质中包括:将非持久性内存中的键值业务数据中的元数据存储至外存储介质中的文件系统区域;将非持久性内存中的键值业务数据中的键值数据存储至外存储介质中的值日志区域。在一些实施例中,将非持久性内存中的键值业务数据中的元数据存储至外存储介质中的文件系统区域包括:将非持久性内存中的键值业务数据中的元数据基于文件id存储至外存储介质中的文件系统区域;其中,文件id与保存键值业务数据中的元数据的文件的粒度相对应。在一些实施例中,文件id仅存储与保存键值业务数据中的元数据的文件的粒度相对应的最新版本的文件。在一些实施例中,值日志区域包括:物理块组,物理块组包括外存储介质中具有相同物理块号的物理块;物理块组中的键值业务数据与二级索引表交替存放;其中,二级索引表包括多个二级索引表入口,每个二级索引表入口记录键值数据在值日志区域中的映射关系;将非持久性内存中的键值业务数据中的键值数据存储至外存储介质中的值日志区域包括:在将非持久性内存中的键值业务数据中的键值数据存储至外存储介质中的值日志区域时,基于非持久性内存中的键值业务数据中的键值数据,至少更新物理块组的二级索引表。在一些实施例中,物理块组中的最后一个预定大小的空间存放一级索引表,一级索引表包括多个一级索引表入口,每个一级索引表入口记录二级索引表的索引数据,索引数据包括:二级索引表偏移量、二级索引表大小和二级索引表入口的数量;在将非持久性内存中的键值业务数据中的键值数据存储至外存储介质中的值日志区域时,基于非持久性内存中的键值业务数据中的键值数据,至少更新物理块组的二级索引表包括:在将非持久性内存中的键值业务数据中的键值数据存储至外存储介质中的值日志区域时,基于非持久性内存中的键值业务数据中的键值数据,至少更新物理块组的二级索引表和一级索引表。在一些实施例中,物理块组中的首个预设大小的空间为存放头部信息的空间,头部信息包括物理块组的属性信息,属性信息包括:数据来源、p/e计数、版本号和已损坏物理块;在将非持久性内存中的键值业务数据中的键值数据存储至外存储介质中的值日志区域时,基于非持久性内存中的键值业务数据中的键值数据,至少更新物理块组的二级索引表和一级索引表包括:在将非持久性内存中的键值业务数据中的键值数据存储至外存储介质中的值日志区域时,基于非持久性内存中的键值业务数据中的键值数据,至少更新物理块组的头部信息、二级索引表和一级索引表。在一些实施例中,方法还包括:响应于接收到断电信号,将持久性内存中的键值业务数据存储至外存储介质中的保留区域;和/或响应于接收到断电信号及非持久性内存为由电容保护的非持久性内存,将非持久性内存中的键值业务数据中的键值数据存储至值日志区域。在一些实施例中,方法还包括:响应于接收到上电信号,执行以下至少一项操作:将保留区域中的键值业务数据读取至持久性内存中;基于物理块组中的头部信息和一级索引表,恢复物理块组的属性信息;根据物理块组的版本号对所有物理块组进行排序;基于排序顺序,扫描所有已经写满的物理块组,重建内存映射表;将未写满的物理块组中的数据全部搬迁至新的物理块组中,响应于搬迁结束,更新内存映射表。在一些实施例中,基于排序顺序,扫描所有已经写满的物理块组,重建内存映射表包括:获取物理块组中的一级索引表;依次遍历一级索引表中所有一级索引表入口,并在访问当前一级索引表入口时,根据当前一级索引表提供的二级索引表的位置、大小和二级索引表入口的数量,获取二级索引表;依次遍历二级索引表中所有的二级索引表入口,并在访问当前二级索引表入口时,根据当前二级索引表入口提供的映射关系,重建内存映射表。在一些实施例中,接收输入的键值业务数据包括:经由内核适配层将输入的键值业务数据直接映射至固态盘的物理地址。在一些实施例中,输入的键值业务数据经由以下步骤确定:由存储器系统外部接收键值业务数据;判断持久性内存中是否存在累积的键值业务数据;若持久性内存中存在累积的键值业务数据,则将接收到的键值业务数据中补齐累积的键值业务数据的数据量至页面数据量的键值业务数据作为输入的键值业务数据;将接收到的键值业务数据中未用于补齐的键值业务数据根据页面数据量切分,并将切分后数据量等于和/或小于页面数据量的键值业务数据作为输入的键值业务数据;若持久性内存中不存在累积的数据,则判断接收到的键值业务数据是否大于页面数据量;若接收到的键值业务数据的数据量小于或等于页面数据量,则将接收到的键值业务数据作为输入的键值业务数据;若接收到的键值业务数据的数据量大于页面数据量,则将接收到的键值业务数据根据页面数据量切分,并将切分后数据量等于和/或小于页面数据量的键值业务数据作为输入的键值业务数据。第三方面,本申请实施例提供了一种设备,包括:一个或多个处理器;存储装置,用于存储一个或多个程序;当一个或多个程序被一个或多个处理器执行,使得一个或多个处理器实现如上任一所述的方法。第四方面,本申请实施例提供了一种计算机可读介质,其上存储有计算机程序,该程序被处理器执行时实现如上任一所述的方法。本申请实施例提供的存储器系统和存储数据的方法,存储器系统包括固态盘,又设置固态盘包括:持久性内存、非持久性内存和外存储介质;其中,持久性内存,被配置成采用第一数据传输协议接收并存储数据量小于页面数据量的输入的键值业务数据;非持久性内存,被配置成接收并存储持久性内存中累积的数据量等于页面数据量键值业务数据;外存储介质,被配置成接收并存储非持久性内存中的键值业务数据。在这一过程中,本申请实施例的存储器系统和存储数据的方法,通过持久化内存机制解决了小数据的频繁更新和持久化问题,写性能提升5-10倍;避免了同一数据在日志文件和数据库中的双重写入,减少了写放大。进一步地,在部分实施例中,通过文件系统区域机制解决了业务层元数据持久化的问题。进一步地,在部分实施例中,通过一级索引表和二级索引表的设计,加速了异常掉电后重启时内存索引表重建的速度,提升了数据恢复的效率。附图说明通过阅读参照以下附图所作的对非限制性实施例详细描述,本申请的其它特征、目的和优点将会变得更明显:图1是本申请可以应用于其中的示例性系统架构图;图2是根据本申请的存储器系统的一个实施例的示例性结构图;图3a是根据本申请的存储器系统的另一个实施例的示例性结构图;图3b是根据本申请的图3a中的实施例中的文件id与文件粒度的示例性关系图;图3c是根据本申请的图3a中的实施例中的一级索引表与二级索引表的一个示例性索引关系图;图3d是根据本申请的图3a中的实施例中的超级物理块的一个示例性结构图;图4是本申请的存储数据的方法的一个实施例的结构示意图;图5是适于用来实现本申请实施例的服务器的计算机系统的结构示意图。具体实施方式下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与有关发明相关的部分。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。如图1所示,系统架构100可以包括终端设备101、102、103,网络104和服务器105、106。网络104用以在终端设备101、102、103和服务器105、106之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。用户110可以使用终端设备101、102、103通过网络104与服务器105、106交互,以接收或发送消息等。终端设备101、102、103上可以安装有各种通讯客户端应用,例如视频采集类应用、视频播放类应用、即时通信工具、邮箱客户端、社交平台软件、搜索引擎类应用、购物类应用等。终端设备101、102、103可以是具有显示屏的各种电子设备,包括但不限于智能手机、平板电脑、电子书阅读器、mp3播放器(movingpictureexpertsgroupaudiolayeriii,动态影像专家压缩标准音频层面3)、mp4(movingpictureexpertsgroupaudiolayeriv,动态影像专家压缩标准音频层面4)播放器、膝上型便携计算机和台式计算机等等。服务器105、106可以是提供各种服务的服务器,例如对终端设备101、102、103提供支持的后台服务器。后台服务器可以对终端提交的数据进行分析、存储或计算等处理,并将分析、存储或计算结果推送给终端设备。需要说明的是,在实践中,本申请实施例所提供的存储器系统一般设置于服务器105、106中,相应地,存储数据的方法一般由服务器105、106执行。然而,当终端设备的性能可以满足该方法的执行条件或该设备的设置条件时,本申请实施例所提供的存储器系统也可以设置于终端设备101、102、103,存储数据的方法也可以由终端设备101、102、103执行。应该理解,图1中的终端、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端、网络和服务器。继续参考图2,图2示出了根据本申请的存储器系统的一个实施例的示例性结构图。如图2所示,该存储器系统,包括一种存储器系统,包括:固态盘;固态盘包括:持久性内存210、非持久性内存220和外存储介质230。可选地,存储器系统还包括:主机240。其中,持久性内存210和非持久性内存220可以为存储器系统的控制器的内存。外存储介质230可以采用闪存实现。存储器系统外部输入的数据可以经由主机输入控制器,再由控制器输入持久性内存210和非持久性内存220。持久性内存210,被配置成采用第一数据传输协议接收并存储数据量小于页面数据量的输入的键值业务数据。持久性内存又名持久化内存(persistentmemory,缩写为pm),是位于固态盘内部的硬件装置。具体地,持久性内存可以为采用电容形式保护的一段连续内存,具有掉电时数据非易失特性、直接通过第一数据传输协议的物理链路暴露给主机。相比传统的通常用于固态盘的数据第二数据传输协议(例如nvme数据通信协议),直接基于第一数据传输协议(例如pcie,一种数据传输协议,gen3x4速度可以达到4gb/s)链路速度更快。持久性内存210断电后数据不丢失,重启后数据仍可恢复。断电时,通过电容保证pm内的数据暂存至固态盘内由固件维护的固态盘保留区;上电重启时,固件再将数据由固态盘保留区恢复至pm中。pm经由第一数据传输协议可以直接映射到主机。用于管理存储器系统的主机对于pm的操作类似于简单的内存直接读写。以第一数据传输协议为pcie协议为例,主机对于pm的操作,直接转为pcie直接内存访问(dma)机制传输,而无需经过传统的数据通信协议传输。pm支持按字节追加。主机对pm的操作既可以按字节追加,也可以按数据块进行传输。pm的大小可以是几兆字节,以页为粒度进行切分管理。对于不足一页的小数据(通常为几十字节、几百字节)的频繁写入,数据通过第一数据传输协议链路追加至pm中,直至累积满一页。图2中示例性地示出了一页的大小为32kb的情形。本领域技术人员应当理解,图2中仅为本申请实施例的示例性结构图,并不代表对本申请的限定。例如,图2中所示的页的大小也可以为64kb或其它大小。当pm中的数据累积满一页后,主机通过第二数据传输协议给设备发送数据传输指令。其中源地址指向pm,目的地址指向非持久性内存220,从而将数据由pm传输到非持久性内存220中。对于恰好满足一页大小的数据写入,数据可以通过第二数据传输协议直接从主机传入非持久性内存220,而无需经过pm。非持久性内存220,被配置成接收并存储持久性内存中累积的数据量等于页面数据量的键值业务数据,采用第二数据传输协议接收并存储数据量等于页面数据量的输入的键值业务数据,第二数据传输协议的传输速率小于第一数据传输协议。这里的非持久性内存,可以为普通的内存,例如dram内存、fpmdram内存、edodram内存、sdram内存等。外存储介质230,被配置成接收并存储非持久性内存中的键值业务数据。例如可以为nandflash(用来存储数据信息的物理介质,具有按页读写、按块擦除的特点)等。可选地,主机240,被配置成:由存储器系统外部接收键值业务数据;判断持久性内存中是否存在累积的键值业务数据;若持久性内存中存在累积的键值业务数据,则将接收到的键值业务数据中补齐累积的键值业务数据的数据量至页面数据量的键值业务数据作为输入的键值业务数据;将接收到的键值业务数据中未用于补齐的键值业务数据根据页面数据量切分,并将切分后数据量等于和/或小于页面数据量的键值业务数据作为输入的键值业务数据;若持久性内存中不存在累积的数据,则判断接收到的键值业务数据是否大于页面数据量;若接收到的键值业务数据的数据量小于或等于页面数据量,则将接收到的键值业务数据作为输入的键值业务数据;若接收到的键值业务数据的数据量大于页面数据量,则将接收到的键值业务数据根据页面数据量切分,并将切分后数据量等于和/或小于页面数据量的键值业务数据作为输入的键值业务数据。这里的主机240,根据持久性内存中是否存在累积的数据,将由存储器系统外部输入的键值业务数据处理为固态盘输入的键值业务数据,通过主机中对外部输入的键值业务数据的处理,可以根据键值业务数据的大小来确定键值业务数据所需输入的内存,提高了键值业务数据的处理效率。本申请上述实施例中的存储器系统,与传统的通过预写日志来实现持久化的方案相比,基于pm的方式减少了写放大。因为业务仅需更新一次pm就能在保证数据持久化的前提下,将数据安全落盘,而无需二次写数据库;同时,与传统的用于固态盘的基于第二数据通信协议的数据读写传输方式相比,pm直接基于第一数据通信协议进行数据的传输,大大提升了写性能。进一步参考图3a,图3a示出了根据本申请的存储器系统的另一个实施例的示例性结构图。如图3a所示,该存储器系统,包括固态盘;固态盘包括:持久性内存210、非持久性内存220和外存储介质230。可选地,存储器系统还包括主机240。其中,外存储介质230包括文件系统区域231和值日志区域232。其中,持久性内存210和非持久性内存220可以为存储器系统的控制器的内存。外存储介质230可以采用闪存实现。存储器系统外部输入的数据可以经由主机实现键值业务数据的输入。在本实施例中,文件系统区域231,被配置成接收并存储非持久性内存中的键值业务数据中的元数据。值日志区域232,被配置成接收并存储非持久性内存中的键值业务数据中的键值数据。基于键值存储的业务有一些元数据,诸如创建的数据元信息、快照信息等。为了解决这部分元数据的持久化问题,在键值存储固态盘协议(例如openchannel协议,协议可以直接将固态盘的读写接口暴露给主机,让主机对固态盘内部的控制有更多地灵活性)的基础上,本公开在固态盘内部保留由固态盘固件自己管理的一段区域,这段区域称之为文件系统区域231。本公开在固态盘内部还设置了由固态盘固件自己管理的另一段区域,该区域为主要用于存储键值业务数据中的键值数据的值日志区域232。通过设置文件系统区域231和值日志区域232,可以通过文件系统区域231管理键值业务数据的元数据,通过值日志区域232管理键值业务数据的键值数据,从而可以针对不同数据采用不同的解决方案,进而解决业务层的元数据持久化的问题。在本实施例的一些可选实现方式中,文件系统区域进一步被配置成:基于文件id接收并存储非持久性内存中的键值业务数据中的元数据;其中,文件id与存储键值业务数据中的元数据的文件的粒度相对应。在本实现方式中,对文件系统区域的读写是基于文件id的。文件系统区域支持多个文件id。在一个具体的示例中,文件系统区域可以支持16个文件id。通过这些文件id,可以接收并存储键值业务数据中的元数据。并且,这些文件id与存储元数据的文件的粒度相对应。具体地,文件的粒度可以是16kb、32kb、64kb和128kb中的一种。应当理解,同一文件粒度可能有零个或多个文件id与之对应。通过设置基于文件id接收并存储非持久性内存中的键值业务数据中的元数据,将各个文件的元数据存储至与文件的粒度相对应的文件id中,提高了存储及查询元数据的效率。在本实施例的一些可选实现方式中,文件系统区域中的文件id仅存储与保存键值业务数据中的元数据的文件的粒度相对应的最新版本的文件。在本实现方式中,对于同一文件id的多次写入,旧数据会被覆盖,读取时仅能读取到最新写入的数据。具体地,如图3b所示,同一个文件id仅对应一个文件的粒度,同一个文件的粒度可能对应多个文件id,每个文件id仅能读出具有最新版本的数据,也即图中的版本h。通过设置文件系统区域中的文件id仅存储最新版本的文件,可以读取最新写入的数据,避免读取之前的无效数据,节省存储空间并提高了读取最新版本的文件的效率。在本实施例的一些可选实现方式中,值日志区域包括:物理块组,物理块组包括外存储介质中具有相同物理块号的物理块;物理块组中的键值业务数据与二级索引表交替存放;其中,二级索引表包括多个二级索引表入口,每个二级索引表入口记录键值数据在值日志区域中的映射关系;二级索引表被配置成基于接收并存储的非持久性内存中的键值业务数据中的键值数据更新。在本实现方式中,值日志区域vlog是以物理块组为基本单元进行管理的。固态盘上所有逻辑单元lun中具有相同物理块号的物理块构成了一个超级块,每个超级块对应一个值日志区域块。在超级块组中,二级索引表至少包括多个二级索引表入口,每个二级索引表入口用于记录键值数据在当前值日志区域中的映射关系。物理块组中键值数据和二级索引表是交替存储的,每一个二级索引表的大小近似于一页,页粒度为预先设定的页面大小。本申请对此不作限定。示例性地,二级索引表表的大小可以近似于32kb或64kb等。值日志区域中所有的二级索引表记录了值日志区域块中所有的键值数据映射关系。与将值日志区域块中所有的键值数据映射关系一次性存储相比,交替存储的目的是为了分散存储映射关系对于写长尾的影响。在本实施例的一些可选实现方式中,物理块组中的最后一个预定大小的空间存放一级索引表,一级索引表包括多个一级索引表入口,每个一级索引表入口记录二级索引表的索引数据,索引数据包括:二级索引表偏移量、二级索引表大小和二级索引表入口的数量;一级索引表被配置成基于二级索引表的更新数据更新。在本实现方式中,如图3c所示,一级索引表至少包括多个一级索引表入口,每个一级索引表入口用于索引二级索引表。其中,一级索引表入口记录的索引数据分别表示了二级索引表在值日志区域块中的偏移(可以指示地址)、大小和所含二级索引表入口的数量。物理块组中的最后一个预定大小的空间存放一级索引表,该预定大小的空间本申请不作限定,可由技术人员预先设定。例如,一级索引表可以位于每个值日志区域块的最后256kb。在本实施例的一些可选实现方式中,物理块组中的首个预设大小的空间为存放头部信息的空间,头部信息包括物理块组的属性信息,属性信息包括:数据来源、p/e计数、版本号和已损坏物理块;存放头部信息的空间被配置成:基于接收并存储的非持久性内存中的键值业务数据中的键值数据更新头部信息。在本实现方式中,值日志区域块的第一个预设大小的空间(本申请对此不作限定,可由技术人员预先设定。例如,预设大小的空间可以为4kb)固定存放块信息表(blockinfotable,bit),块信息表中存放头部信息header。header中存放的是值日志区域块相关的一些属性信息,详细内容如下:空满状态:当前值日志区域块是否已经写满。数据来源:当前值日志区域块中的数据是来自哪个数据流。系统中的数据流可以有多个,也可以只有一个,但是同一个值日志区域块中的数据只能隶属于同一个数据流。一种常见的划分方法是,所有直接来自业务的数据属于kv(key-value)流,所有由垃圾回收机制产生的数据属于gc(garbagecollection)流。p/e计数:是指flash的寿命受program/erase次数限制。例如tlcflash的寿命在1000p/e左右。该字段记录了当前值日志区域块的p/e次数。版本号:该字段记录了值日志区域块被分配时的时间戳,用于数据恢复时对所有值日志区域块按时间戳排序时使用。已损坏物理块:该字段记录了当前值日志区域块中哪些物理块是坏的。通过在物理块组中设置头部信息,可以保障值日志区域中的各个物理块组顺利启动和正常运行。在一个具体的示例中,如图3d所示,值日志区域包括:固态盘的控制器(ssdcontroller),以及物理块组(也即超级块(superblock))。物理块组包括外存储介质中具有相同物理块(block)号的物理块;物理块组中的键值业务数据(k-v)与与存储器系统中自定义的二级索引表(l2)交替存放;物理块组中的最后一个预定大小的空间存放存储器系统中自定义的一级索引表l1;物理块组中的首个预设大小的空间(例如4kb)为存放块信息表bit(头部信息)的空间;x用以表示此区域中存储的都是无效数据(dummydata)。在本实施例的一些可选实现方式中,外存储介质还包括:保留区域(图中未示出),被配置成在断电时接收并存储持久性内存中的键值业务数据;和/或非持久性内存为由电容保护的非持久性内存,且值日志区域进一步被配置成在断电时接收并存储非持久性内存中的键值业务数据中的键值数据。在本实现方式中,在断电时,通过电容保证pm内的数据暂存至固态盘内由固件维护的外存储介质的保留区域中,以保护持久性内存中的键值业务数据,防止持久性内存中的键值业务数据丢失。备选地或附加地,非持久性内存也可以为由电容保护的非持久性内存,在断电时,通过电容保护非持久性内存中的键值业务数据中的键值数据存储至值日志区域,以防止非持久性内存中的键值业务数据丢失。应当理解,当非持久性内存为由电容保护的非持久性内存时,持久性内存和非持久性内存可以分别由一块电容保护在断电时的数据存储,两块电容的容量分别根据非持久性内存和非持久性内存所需的耗电量确定。在一些情况下,当非持久性内存为由电容保护的非持久性内存时,持久性内存和非持久性内存也可以由同一块电容保护在断电时的数据存储,此时,这块电容的容量根据非持久性内存和非持久性内存所需的耗电量之和确定。在这里,如果非持久性内存为由电容保护的非持久性内存,数据由持久性内存经由非持久性内存转存到外部存储器介质中的时候,数据只需要发送到非持久性内存就算转存成功(因为即使掉电,也可以由电容保证一定存到外部存储器介质中);而不用电容的话,数据由持久性内存经由非持久性内存转存到外部存储器介质中的时候,必须等数据真正发送到外部存储器介质中才算完成,由非持久性内存转存到外部存储器介质存储的性能会下降。在本实施例的一些可选实现方式中,持久性内存进一步被配置成:在上电时接收并存储保留区域中的键值业务数据。在本实现方式中,通过在上电时接收并存储保留区域中的键值业务数据,可以保证持久性内存中的数据在后续的处理过程中经非持久性内存存储至外存储介质,防止已写入持久性内存中的数据丢失。在本实施例的一些可选实现方式中,存放头部信息的空间进一步被配置成:在上电时,接收并存储基于物理块组中的头部信息和一级索引表所恢复的物理块组的属性信息;非持久性内存进一步被配置成:接收并存储根据物理块组的版本号对所有物理块组进行排序得到的排序顺序;物理块组进一步被配置成:接收并存储基于排序顺序扫描所有已经写满的物理块组所重建的内存映射表;将未写满的物理块组中的数据全部搬迁至新的物理块组中;以及接收并存储响应于搬迁结束所更新的内存映射表。在本实现方式中,恢复值日志区域块的属性信息。上电时,扫描所有的值日志区域块,通过读取值日志区域块的头部信息和最后一页的一级索引表来恢复值日志区域块的属性信息。这些属性信息包括值日志区域块的空满状态、数据来源、p/e计数、版本号和坏块信息等。具体地,在确定日志区域块的空满状态时,可以先读值日志区域块的头部信息的头部4kb数据,如果不能读出来,说明是个空块。如果能读出来,则读值日志区域块的一级索引表的最后4kb数据,如果能读出来,说明是个写满的块。如果不能读出来,说明是个尚未写满的块。之后,可以根据值日志区域块的版本号对所有的值日志区域块进行升序排序。然后,可以按照版本号由小到大的顺序依次扫描所有已经写满的值日志区域块,重建内存映射表。具体地,对于每一个值日志区域块,可以读出日志区域块中处于最后预定大小的空间(例如256kb)的一级索引表。依次遍历一级索引表中所有的一级索引表入口,根据一级索引表入口提供的二级索引表位置、大小和二级索引表入口数量等信息,读出二级索引表。依次遍历二级索引表中所有的二级索引表入口,根据二级索引表入口提供的键值映射关系等信息重建内存映射表。将未写满的vlog块中的数据全部搬移到vlog新块中。从vlog块首地址开始,依次逐个读取键值对数据信息、版本号信息等,重新写入新的vlog块。更新内存映射表,键值映射地址指向新vlog块。擦除当前旧的vlog块。内存索引表重建完成,数据恢复结束。通过在上电时重建内存映射表,可以提高恢复值日志区域中的数据的效率。在本实施例的一些可选实现方式中,存储器系统还包括:内核适配层,被配置成将接收的由存储器系统外部输入的键值业务数据直接映射至固态盘的物理地址;持久性内存,进一步被配置成经由内核适配层采用第一数据传输协议接收并存储数据量小于页面数据量的输入的键值业务数据;非持久性内存,进一步被配置成经由内核适配层采用第二数据传输协议接收并存储数据量等于页面数据量的输入的键值业务数据。在本实现方式中,通过采用内核适配层将存储器系统外部输入的键值业务数据直接映射至持久性内存或非持久性内存,可以使得日志文件的写入不必经过文件系统和内核io栈,而是直接与基于键值存储固态盘进行数据传输,也即由键值存储直接映射到外存储介质的物理地址。因此,该方案减少了逻辑转换层,减小了写放大,提升了读写性能。应当理解,图3a所示的存储器系统中记载的持久性内存210、非持久性内存220和主机240,可以与参考图2描述的存储器系统中的持久性内存210、非持久性内存220和主机240相对应。由此,上文图2中针对存储器系统持久性内存210、非持久性内存220和主机240描述的操作和特征同样适用于图3a中的存储器系统包含的持久性内存210、非持久性内存220和主机240,在此不再赘述。本申请上述实施例提供的存储器系统,与图2中所示的存储器不同的是,图3中的外存储介质进一步包括了文件系统区域和值日志区域,从而通过文件系统区域机制解决了业务层元数据持久化的问题。进一步地,在部分实施例中,通过一级索引表和二级索引表的设计,加速了异常掉电后重启时内存索引表重建的速度,提升了数据恢复的效率。请参考图4,其示出了根据本申请的存储数据的方法的一个实施例的流程图。如图4所示,本实施例的存储数据的方法,可以包括以下步骤:在步骤410中,获取输入的键值业务数据。在步骤420中,响应于输入的键值业务数据的数据量小于页面数据量,采用第一数据传输协议将键值业务数据存储至持久性内存中。在步骤430中,响应于输入的键值业务数据的数据量等于页面数据量,采用第二数据传输协议将键值业务数据经由非持久性内存存储至外存储介质中。在步骤440中,响应于持久性内存中累积的键值业务数据的数据量等于页面数据量,将持久性内存中累积的键值业务数据经由非持久性内存存储至外存储介质中。在本实施例的一些可选实现方式中,经由非持久性内存存储至外存储介质中可以包括:将非持久性内存中的键值业务数据中的元数据存储至外存储介质中的文件系统区域;将非持久性内存中的键值业务数据中的键值数据存储至外存储介质中的值日志区域。在本实施例的一些可选实现方式中,将非持久性内存中的键值业务数据中的元数据存储至外存储介质中的文件系统区域可以包括:将非持久性内存中的键值业务数据中的元数据基于文件id存储至外存储介质中的文件系统区域;其中,文件id与保存键值业务数据中的元数据的文件的粒度相对应。在本实施例的一些可选实现方式中,文件id仅存储与保存键值业务数据中的元数据的文件的粒度相对应的最新版本的文件。在本实施例的一些可选实现方式中,值日志区域可以包括:物理块组,物理块组可以包括外存储介质中具有相同物理块号的物理块;物理块组中的键值业务数据与二级索引表交替存放;其中,二级索引表可以包括多个二级索引表入口,每个二级索引表入口记录键值数据在值日志区域中的映射关系;将非持久性内存中的键值业务数据中的键值数据存储至外存储介质中的值日志区域可以包括:在将非持久性内存中的键值业务数据中的键值数据存储至外存储介质中的值日志区域时,基于非持久性内存中的键值业务数据中的键值数据,至少更新物理块组的二级索引表。在本实施例的一些可选实现方式中,物理块组中的最后一个预定大小的空间存放一级索引表,一级索引表可以包括多个一级索引表入口,每个一级索引表入口记录二级索引表的索引数据,索引数据可以包括:二级索引表偏移量、二级索引表大小和二级索引表入口的数量;在将非持久性内存中的键值业务数据中的键值数据存储至外存储介质中的值日志区域时,基于非持久性内存中的键值业务数据中的键值数据,至少更新物理块组的二级索引表可以包括:在将非持久性内存中的键值业务数据中的键值数据存储至外存储介质中的值日志区域时,基于非持久性内存中的键值业务数据中的键值数据,至少更新物理块组的二级索引表和一级索引表。在本实施例的一些可选实现方式中,物理块组中的首个预设大小的空间为存放头部信息的空间,头部信息可以包括物理块组的属性信息,属性信息可以包括:数据来源、p/e计数、版本号和已损坏物理块;在将非持久性内存中的键值业务数据中的键值数据存储至外存储介质中的值日志区域时,基于非持久性内存中的键值业务数据中的键值数据,至少更新物理块组的二级索引表和一级索引表可以包括:在将非持久性内存中的键值业务数据中的键值数据存储至外存储介质中的值日志区域时,基于非持久性内存中的键值业务数据中的键值数据,至少更新物理块组的头部信息、二级索引表和一级索引表。在本实施例的一些可选实现方式中,方法还可以包括:响应于接收到断电信号,将持久性内存中的键值业务数据存储至外存储介质中的保留区域;和/或响应于接收到断电信号及非持久性内存为由电容保护的非持久性内存,将非持久性内存中的键值业务数据中的键值数据存储至值日志区域。在本实施例的一些可选实现方式中,方法还可以包括:响应于接收到上电信号,执行以下至少一项操作:将保留区域中的键值业务数据读取至持久性内存中;基于物理块组中的头部信息和一级索引表,恢复物理块组的属性信息;根据物理块组的版本号对所有物理块组进行排序;基于排序顺序,扫描所有已经写满的物理块组,重建内存映射表;将未写满的物理块组中的数据全部搬迁至新的物理块组中,响应于搬迁结束,更新内存映射表。在本实施例的一些可选实现方式中,基于排序顺序,扫描所有已经写满的物理块组,重建内存映射表可以包括:获取物理块组中的一级索引表;依次遍历一级索引表中所有一级索引表入口,并在访问当前一级索引表入口时,根据当前一级索引表提供的二级索引表的位置、大小和二级索引表入口的数量,获取二级索引表;依次遍历二级索引表中所有的二级索引表入口,并在访问当前二级索引表入口时,根据当前二级索引表入口提供的映射关系,重建内存映射表。在本实施例的一些可选实现方式中,接收输入的键值业务数据可以包括:经由内核适配层将输入的键值业务数据直接映射至固态盘的物理地址。在本实施例的一些可选实现方式中,输入的键值业务数据经由以下步骤确定:由存储器系统外部接收键值业务数据;判断持久性内存中是否存在累积的键值业务数据;若持久性内存中存在累积的键值业务数据,则将接收到的键值业务数据中补齐累积的键值业务数据的数据量至页面数据量的键值业务数据作为输入的键值业务数据;将接收到的键值业务数据中未用于补齐的键值业务数据根据页面数据量切分,并将切分后数据量等于和/或小于页面数据量的键值业务数据作为输入的键值业务数据;若持久性内存中不存在累积的数据,则判断接收到的键值业务数据是否大于页面数据量;若接收到的键值业务数据的数据量小于或等于页面数据量,则将接收到的键值业务数据作为输入的键值业务数据;若接收到的键值业务数据的数据量大于页面数据量,则将接收到的键值业务数据根据页面数据量切分,并将切分后数据量等于和/或小于页面数据量的键值业务数据作为输入的键值业务数据。本申请上述实施例的存储数据的方法,作为对上述各图所示存储器系统的应用,该方法实施例与图2-图3所示的存储器系统的实施例相对应,该方法的执行主体可以为图1中所示的设备和/或服务器。在一个具体的实施例中,上述存储数据的方法的执行主体可以采用图2至图3中所示的存储器系统中的主机来实现。应当理解,方法400中记载的诸操作步骤可以与参考图2-图4描述的存储器中的持久性内存、非持久性内存、外存储介质和主机所实现的操作相对应。由此,上文针对持久性内存、非持久性内存、外存储介质和主机所描述的操作和特征同样适用于方法及其中包含的操作步骤,在此不再赘述。下面参考图5,其示出了适于用来实现本申请实施例的服务器的计算机系统500的结构示意图。图5示出的终端设备或服务器仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。如图5所示,计算机系统500包括中央处理单元(cpu)501,其可以根据存储在只读存储器(rom)502中的程序或者从存储部分508加载到随机访问存储器(ram)503中的程序而执行各种适当的动作和处理。在ram503中,还存储有系统500操作所需的各种程序和数据。cpu501、rom502以及ram503通过总线504彼此相连。输入/输出(i/o)接口505也连接至总线504。以下部件连接至i/o接口505:包括键盘、鼠标等的输入部分506;包括诸如阴极射线管(crt)、液晶显示器(lcd)等以及扬声器等的输出部分507;包括硬盘等的存储部分508;以及包括诸如lan卡、调制解调器等的网络接口卡的通信部分509。通信部分509经由诸如因特网的网络执行通信处理。驱动器510也根据需要连接至i/o接口505。可拆卸介质511,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器510上,以便于从其上读出的计算机程序根据需要被安装入存储部分508。特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分509从网络上被下载和安装,和/或从可拆卸介质511被安装。在该计算机程序被中央处理单元(cpu)501执行时,执行本申请的方法中限定的上述功能。需要说明的是,本申请所述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、rf等等,或者上述的任意合适的组合。附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。作为另一方面,本申请还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的装置中所包含的;也可以是单独存在,而未装配入该装置中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该装置执行时,使得该装置:呈现用于对话的运营平台的图形化界面;获取输入的键值业务数据;响应于输入的键值业务数据的数据量小于页面数据量,采用第一数据传输协议将键值业务数据存储至持久性内存中,响应于输入的键值业务数据的数据量等于页面数据量,采用第二数据传输协议将键值业务数据经由非持久性内存存储至外存储介质中,其中,第二数据传输协议的传输速率小于第一数据传输协议;响应于持久性内存中累积的键值业务数据的数据量等于页面数据量,将持久性内存中累积的键值业务数据经由非持久性内存存储至外存储介质中。以上描述仅为本申请的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本申请中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本申请中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。当前第1页12当前第1页12