一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

数据存储方法、数据查询方法以及装置与流程

2022-11-16 15:22:35 来源:中国专利 TAG:


1.本说明书实施例涉及计算机技术领域,特别涉及一种数据存储方法。本说明书一个或者多个实施例同时涉及一种数据查询方法,一种数据存储装置,一种数据查询装置,一种计算设备,一种计算机可读存储介质以及一种计算机程序。


背景技术:

2.常见的存储设备包括混合硬盘(hhd,hybrid hard drive)、固态硬盘(ssd,solid state drive)以及传统硬盘(hdd,hard disk drive)。混合硬盘是既包含传统硬盘又有闪存模块的大容量存储设备。固态硬盘是用固态电子存储芯片阵列而制成的硬盘,由控制单元和存储单元组成。
3.随着计算机技术的发展,业界存储设备如hdd/ssd的容量可以通过增加密度持续迭代提升。以固态硬盘ssd为例,ssd逐渐从三层式存储单元(tcl,trinary-level cell)演进到四层式存储单元(qlc,quad-level cell)。qlc的特点是容量大,成本低,劣势是擦写次数少寿命低,随机写性能仅有顺序写的百分之一,因此,亟需一种耐用且高效的数据存储方案。


技术实现要素:

4.有鉴于此,本说明书实施例提供了一种数据存储方法。本说明书一个或者多个实施例同时涉及一种数据查询方法,一种数据存储装置,一种数据查询装置,一种计算设备,一种计算机可读存储介质以及一种计算机程序,以解决现有技术中存在的技术缺陷。
5.根据本说明书实施例的第一方面,提供了一种数据存储方法,应用于数据存储系统中的管理平台,数据存储系统包括管理平台、缓存层和容量层;该方法包括:
6.接收数据存储请求,其中,数据存储请求携带待存储数据;
7.将待存储数据添加至缓存层中的空闲缓存块,获得有效缓存块,其中,空闲缓存块是指缓存层中可用的缓存块;
8.在缓存层中已存储数据的缓存块的数量达到第一预设阈值的情况下,将有效缓存块中的数据依次写入缓存层中的缓冲区,生成聚合数据;
9.在缓冲区中存储的数据量达到第二预设阈值的情况下,将聚合数据存储至容量层。
10.根据本说明书实施例的第二方面,提供了一种数据查询方法,应用于数据存储系统中的管理平台,该方法包括:
11.接收数据查询请求,其中,数据查询请求携带待查询数据的逻辑块地址;
12.查找逻辑块地址对应的存储地址;
13.根据存储地址查找待查询数据,其中,待查询数据通过权利要求1-7任一项的数据存储方法存储。
14.根据本说明书实施例的第三方面,提供了一种数据存储装置,应用于数据存储系
统中的管理平台,数据存储系统包括管理平台、缓存层和容量层;该装置包括:
15.第一接收模块,被配置为接收数据存储请求,其中,数据存储请求携带待存储数据;
16.添加模块,被配置为将待存储数据添加至缓存层中的空闲缓存块,获得有效缓存块,其中,空闲缓存块是指缓存层中可用的缓存块;
17.生成模块,被配置为在缓存层中已存储数据的缓存块的数量达到第一预设阈值的情况下,将有效缓存块中的数据依次写入缓存层中的缓冲区,生成聚合数据;
18.存储模块,被配置为在缓冲区中存储的数据量达到第二预设阈值的情况下,将聚合数据存储至容量层。
19.根据本说明书实施例的第四方面,提供了一种数据查询装置,应用于数据存储系统中的管理平台,该装置包括:
20.第二接收模块,被配置为接收数据查询请求,其中,数据查询请求携带待查询数据的逻辑块地址;
21.第一查找模块,被配置为查找逻辑块地址对应的存储地址;
22.第二查找模块,被配置为根据存储地址查找待查询数据,其中,待查询数据通过第一方面的数据存储方法存储。
23.本说明书实施例的第五方面,提供了一种数据存储系统,包括管理平台、缓存层和容量层;
24.管理平台,用于接收数据存储请求,其中,数据存储请求携带待存储数据;将待存储数据传输至缓存层;
25.缓存层,用于将待存储数据存储至空闲缓存块,获得有效缓存块,其中,空闲缓存块是指缓存层中可用的缓存块;
26.管理平台,还用于监测缓存层中已存储数据的缓存块的数量,在数量达到第一预设阈值的情况下,向缓存层发送写入指令;
27.缓存层,还用于基于写入指令,将有效缓存块中的数据依次写入缓冲区,生成聚合数据;
28.管理平台,还用于监测缓冲区中存储的数据量,在数据量达到第二预设阈值的情况下,向缓存层发送转发指令;
29.缓存层,还用于基于转发指令,将聚合数据转发至容量层;
30.容量层,用于存储聚合数据。
31.根据本说明书实施例的第六方面,提供了一种计算设备,包括:
32.存储器和处理器;
33.所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令,该计算机可执行指令被处理器执行时实现第一方面的数据存储方法或第二方面的数据查询方法的步骤。
34.根据本说明书实施例的第七方面,提供了一种计算机可读存储介质,其存储有计算机可执行指令,该指令被处理器执行时实现第一方面的数据存储方法或第二方面的数据查询方法的步骤。
35.根据本说明书实施例的第八方面,提供了一种计算机程序,其中,当所述计算机程
序在计算机中执行时,令计算机执行上述第一方面的数据存储方法或第二方面的数据查询方法的步骤。
36.本说明书一个实施例提供的数据存储方法,应用于数据存储系统中的管理平台,数据存储系统包括管理平台、缓存层和容量层;所述方法包括:接收数据存储请求,其中,数据存储请求携带待存储数据;将待存储数据添加至缓存层中的空闲缓存块,获得有效缓存块,其中,空闲缓存块是指缓存层中可用的缓存块;在缓存层中已存储数据的缓存块的数量达到第一预设阈值的情况下,将有效缓存块中的数据依次写入缓存层中的缓冲区,生成聚合数据;在缓冲区中存储的数据量达到第二预设阈值的情况下,将聚合数据存储至容量层。通过将有效缓存块中的数据依次写入缓存层中的缓冲区,批量将缓冲区存储的聚合数据存储至容量层,减少了容量层的写入放大以及磨损,进一步提高了数据存储系统的整体性能和数据存储系统的耐用性。
附图说明
37.图1a是本说明书一个实施例提供的一种数据存储系统下数据存储方法的示意图;
38.图1b是本说明书一个实施例提供的一种数据存储系统的结构示意图;
39.图2是本说明书一个实施例提供的应用于购物场景中的一种数据存储系统的架构图;
40.图3是本说明书一个实施例提供的一种数据存储方法的流程图;
41.图4是本说明书一个实施例提供的一种缓存层的架构图;
42.图5是本说明书一个实施例提供的一种逻辑到物理地址表的架构图;
43.图6是本说明书一个实施例提供的一种数据存储方法的处理过程示意图;
44.图7是本说明书一个实施例提供的另一种数据存储方法的处理过程示意图;
45.图8是本说明书一个实施例提供的一种数据存储方法中垃圾收集过程示意图;
46.图9是本说明书一个实施例提供的一种数据查询方法的流程图;
47.图10是本说明书一个实施例提供的一种数据存储方法的处理框图;
48.图11a是本说明书一个实施例提供的一种数据存储方法的处理过程流程图;
49.图11b是本说明书一个实施例提供的一种缓存块示意图;
50.图11c是本说明书一个实施例提供的一种缓冲区示意图;
51.图12是本说明书一个实施例提供的一种数据存储装置的结构示意图;
52.图13是本说明书一个实施例提供的一种数据查询装置的结构示意图;
53.图14是本说明书一个实施例提供的一种计算设备的结构框图。
具体实施方式
54.在下面的描述中阐述了很多具体细节以便于充分理解本说明书。但是本说明书能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本说明书内涵的情况下做类似推广,因此本说明书不受下面公开的具体实施的限制。
55.在本说明书一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地
表示其他含义。还应当理解,本说明书一个或多个实施例中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
56.应当理解,尽管在本说明书一个或多个实施例中可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一也可以被称为第二,类似地,第二也可以被称为第一。取决于语境,如在此所使用的词语“如果”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”。
57.首先,对本说明书一个或多个实施例涉及的名词术语进行解释。
58.云磁盘:建立在分布式存储系统之上的磁盘实例。在云服务器中可当做计算机磁盘一样进行读写使用。
59.io请求:用户使用云磁盘,其基本的操作就是读取磁盘的数据,往磁盘写入数据。这每一个读、写的请求即称为io请求(简称io)。
60.nvm express(nvme):或称非易失性内存主机控制器接口规范(nvmhcis,non-volatile memory host controller interface specification),是一个逻辑设备接口规范。它是基于设备逻辑接口的总线传输协议规范,用于访问通过高速串行计算机扩展总线(pcie,peripheral component interconnect express)附加的非易失性存储器介质。nvme是一种协议,是一组允许ssd使用pcie总线的软硬件标准,而pcie是实际的物理连接通道。
61.tlc:trinary-level cell,也即三层式存储单元。
62.qlc:quad-level cell,也即四层式存储单元。
63.wsc:write shaping cache,也即写入整形缓存。
64.nand flash:是flash存储器的一种,其内部采用非线性宏单元模式,为固态大容量内存的实现提供了廉价有效的解决方案。
65.zns:分区命名空间(zns,zoned namespace)规范中,将固态硬盘命名空间(ssd namespace)的整个逻辑块地址lba(logical block address)范围划分为若干个等长的区间,等长的lba区间成为一个区域(zone),每个区域内以顺序的方式进行写入。
66.在本说明书中,提供了一种数据存储方法。本说明书一个或者多个实施例同时涉及一种数据查询方法,一种数据存储装置,一种数据查询装置,一种计算设备,一种计算机可读存储介质以及一种计算机程序,在下面的实施例中逐一进行详细说明。
67.随着计算机技术的发展,业界存储设备如hdd/ssd的容量可以通过增加密度持续迭代提升。以固态硬盘ssd为例,ssd逐渐从三层式存储单元(tcl,trinary-level cell)演进到四层式存储单元(qlc,quad-level cell)。其中,三层式存储单元的存储密度较高,所以容量较大,成本较低,但是寿命相对要低一些,理论擦写次数在1000-3000次不等,是目前市面上主流的闪存颗粒。四层式存储单元中,每一个标准单元(cell)存储数据越多,单位面积容量就越高,但是同时会导致不同电压状态越多,并且越难控制。所以采用qlc颗粒的固态硬盘,虽然容量更大、价格更便宜,但是稳定性较差,并且寿命较低,速度最慢。在性能方面,qlc的顺序读写性能分别是7000mb/s和3200mb/s,随机读写性能分别是3200mb/s和32mb/s,由此可以看出,qlc随机写性能仅有顺序写的百分之一,因此,亟需一种耐用且高效的数据存储方案,以解决qlc介质的随机读写性能低,寿命低的问题。
68.本说明书实施例中,提出了一种高速介质加速的体系架构和方法,主要针对qlc的
shaping cache),wsc是一个针对高速介质-低速介质层次结构优化的抽象层。wsc利用高速介质作为写入缓存,存储用户随机写入的数据,最大限度地减少系统级写入放大和硬盘磨损,以提高数据存储系统的整体性能和系统耐用性。wsc为通用块i/o(block i/o)服务提供写入整形抽象层(write shaping abstraction),写入整形抽象层中包括存储层,存储层包括缓存层和容量层。其中,可以将高速介质作为缓存层中的非易失性缓存(nvcache,non volatile cache),将基于闪存(nand)的ssd作为容量层中的大容量主存储,也可以理解为池容量存储(pooled capacity storage)。
82.需要说明的是,写入整形抽象层中还包括闪存转换层(ftl,flash translation layer),其中,闪存转换层中包括逻辑到物理地址表(l2p,logical address to physical address)以及元数据区域(metadata),逻辑到物理地址表管理逻辑块地址(lba,logical block addresses)与容量层中数据存储的物理位置之间的完全关联地址映射。
83.本说明书一个或多个实施例提供的方案,可以应用于各种数据存储或查询场景,如购物场景、监管场景等等,具体根据实际情况进行选择,本说明书实施例对此不作任何限定。
84.参见图2,图2示出了本说明书一个实施例提供的应用于购物场景中的一种数据存储系统的架构图,该系统可以包括服务端210以及多个客户端200,服务端210也即数据存储系统中的管理平台。多个客户端200之间通过服务端210可以建立通信连接,在购物场景中,服务端210即用来在多个客户端200之间提供数据存储服务或数据查询服务,多个客户端200可以分别作为发送端或接收端,通过服务端210实现数据存储或数据查询。
85.用户可以通过客户端200与服务端210进行交互以查询其它客户端200存储的数据,或将数据发送至其它客户端200等。在购物场景中,可以是用户通过客户端200向服务端210发布数据查询请求,服务端200基于该数据查询请求,进行数据查询,并将查询结果推送至其他建立通信的客户端中。
86.其中,客户端200与服务端210之间通过网络建立连接。网络为客户端与服务端之间提供了通信链路的介质。网络可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
87.客户端200可以为浏览器、应用程序(app,application)、或网页应用如h5(hypertext markup language5,超文本标记语言第5版)应用、或轻应用(也被称为小程序,一种轻量级应用程序)或云应用等,客户端200可以基于服务端提供的相应服务的软件开发工具包(sdk,software development kit),如基于rtc sdk开发获得等。客户端200可以部署在电子设备中,需要依赖设备运行或者设备中的某些app而运行等。电子设备例如可以具有显示屏并支持信息浏览等,如可以是个人移动终端如手机、平板电脑、个人计算机等。在电子设备中通常还可以配置各种其它类应用,例如人机对话类应用、模型训练类应用、文本处理类应用、网页浏览器应用、购物类应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等。
88.参见图3,图3示出了本说明书一个实施例提供的一种数据存储方法的流程图,该数据存储方法应用于数据存储系统中的管理平台,数据存储系统包括管理平台、缓存层和容量层;具体包括以下步骤:
89.步骤302:接收数据存储请求,其中,数据存储请求携带待存储数据。
90.本说明书一个或多个实施例中,数据存储系统中的管理平台在接收到携带待存储数据的数据存储请求时,确定开始存储待存储数据,也就是说,数据存储请求是开启数据存储的前提。
91.具体地,数据存储请求是指存储待存储数据的请求,数据存储请求可以是数据存储指令,该数据存储指令中携带待存储数据,当然,数据存储请求还可以是加密后的数据存储指令,进一步保证待存储数据的安全性,具体根据实际情况进行选择,本说明书实施例对此不作任何限定。待存储数据是指需要存储的数据,也可以理解为即将存储的数据。在实际应用中,待存储数据可以是交易数据,也可以是用户信息等等,具体根据实际情况进行选择,本说明书实施例对此不作任何限定。
92.需要说明的是,接收数据存储请求的方式有多种,一种可选的实现方式中,管理平台可以接收客户端主动发送的数据存储请求,另一种可选的实现方式中,管理平台可以定时向客户端发送询问信息,以询问客户端是否需要存储数据,在客户端需要存储数据的情况下,接收客户端发送的数据存储请求。
93.步骤304:将待存储数据添加至缓存层中的空闲缓存块,获得有效缓存块,其中,空闲缓存块是指缓存层中可用的缓存块。
94.本说明书一个或多个实施例中,接收数据存储请求之后,进一步地,可以将数据存储请求中携带的待存储数据添加至缓存层中的空闲缓存块中,获得有效缓存块。
95.具体地,有效缓存块是指空闲缓存块中已经存储待存储数据的缓存块,缓存层在容量层的前端工作,可以理解为高速缓存层,用于处理用户写入的数据,将用户写入的数据写入缓存层,进一步将有效数据顺序写入容量层。参见图4,图4示出了本说明书一个实施例提供的一种缓存层的架构图,缓存层可以分为两部分,分别为元数据区域(metadata)和数据区域(data),数据区域被组织为一组缓存块(chunk),例如数据区域包括缓存块0、缓存块1、缓存块2、缓存块3、...、缓存块n。每个缓存块管理具有可变扇区大小(vss,variable sector s ize)的多个子缓存块(block),例如缓存块2包括子缓存块0、vss、子缓存块1、vss、子缓存块2、vss、...、子缓存块x、vss。元数据区域用来持久化l2p表的元数据页面,其中,元数据包括但不限于超级块元数据、块元数据等,具体根据实际情况进行选择,本说明书实施例对此不作任何限定。
96.本说明书一种可选的实现方式中,可以在缓存层中查找可用的缓存块,也即空闲缓存块,在获得空闲缓存块之后,可以将待存储数据存储至空闲缓存块中的任一子缓存块中,完成待存储数据在缓存层中的存储。也即,上述将待存储数据添加至缓存层中的空闲缓存块,获得有效缓存块的步骤,可以包括以下步骤:
97.在缓存层中查找空闲缓存块,将待存储数据存储至空闲缓存块中的第一子缓存块中,获得有效缓存块,其中,第一子缓存块是空闲缓存块中的任一子缓存块。
98.示例性地,缓存层中包括3个缓存块,分别为缓存块1、缓存块2和缓存块3。这三个缓存块中,缓存块1和缓存块3为可用的缓存块,也即将缓存块1和缓存块3确定为空闲缓存块1和空闲缓存块3。此时,可以在上述两个空闲缓存块中确定一个空闲缓存块3,将待存储数据存储至空闲缓存块3中的任一子缓存块中。由于空闲缓存块3中存储了待存储数据,空闲缓存块3即为有效缓存块。
99.实际应用中,当缓存层中的空闲缓存块数量大于等于两个时,可以随机从空闲缓
存块中选择一个作为存储数据的空闲缓存块。进一步地,还可以根据按照缓存层中缓存块的排列顺序,优先选择排序靠前的空闲缓存块,在确定空闲缓存块之后,同理也可以将待存储数据存储在空闲缓存块中排序靠前的子缓存块中。
100.应用本说明书实施例的方案,在缓存层中查找空闲缓存块,将待存储数据存储至空闲缓存块中的第一子缓存块中,获得有效缓存块,避免将待存储数据直接存储至ssd中,减少了ssd的写入放大,提高了ssd的使用寿命。
101.值得说明的是,在将待存储数据添加至缓存层中的空闲缓存块,获得有效缓存块的步骤之后,还可以包括以下步骤:
102.确定有效缓存块的缓存地址;
103.将缓存地址作为待存储数据的逻辑块地址对应的存储地址。
104.具体地,缓存地址是指有效缓存块的地址,缓存地址的范围为[容量层大小、容量层大小 缓存层大小-1]。在将待存储数据存储至有效缓存块之后,可以将有效缓存块的缓存地址作为逻辑块地址对应的存储地址,该存储地址记录待存储数据的存储位置。
[0105]
本说明书一种可选的实现方式中,可以利用逻辑到物理地址表(l2p,logical address to physical address)充当缓存的待存储数据的索引,指示待存储数据是否缓存在缓存层以及在缓存层中具体的缓存地址。在将待存储数据写入缓存层后,更新l2p表,将待存储数据的逻辑块地址指向有效缓存块的缓存地址。
[0106]
具体地,l2p表实际上是一个具有2级的l2p缓存,该l2p表管理逻辑块地址(lba,logical block addresses)与容量层中数据存储的物理位置之间的完全关联地址映射。每个lba与一个l2p表元数据页面相关联,l2p表元数据页面维护一系列lba的一组条目,每个条目表示lba的一个物理地址,物理地址直接指向容量层,取值范围为[0,nand ssd size-1],一般为32位,也可以为更大的地址范围,如64位,其中,nand ssd也即容量层。l2p表利用页指针数组管理所有页,由于lba的范围取决于容量层的容量,因此使用l2p缓存可以避免为所有lba的页面消耗大量系统内存(dram,dynamic random access memory)。所有页面都支持在容量层上,只有经常访问的热页驻留在dram中。参见图5,图5示出了本说明书一个实施例提供的一种逻辑到物理地址表的架构图,在逻辑块地址0-n这n个逻辑块地址中,以逻辑块地址a、逻辑块地址b、逻辑块地址c、逻辑块地址d为例,逻辑块地址a对应l2p表中的页1,l2p表中的页1指向缓存层中的页1;逻辑块地址b对应l2p表中的页n,l2p表中的页n指向缓存层中的页n;逻辑块地址c对应l2p表中的页n 1,l2p表中的页n 1指向缓存层中的页n 1;逻辑块地址d对应l2p表中的页x,l2p表中的页x指向缓存层中的页x,其中,系统内存(dram)用作l2p表的缓存。
[0107]
实际应用中,当接收到用户对特定的lba的请求时,可以计算给定lba的页码并在按页码排列。如果页指针不为空,l2p表直接返回lba对应的存储地址。否则,wsc首先向缓存层提交读取i/o,然后使用来自缓存层的元数据填充页面。最后,l2p表返回lba对应的存储地址。
[0108]
由于dram l2p缓存配置的大小是有限的,因此使用页面替换策略在dram和缓存层之间交换页面。基本思想基于最近最少使用页面置换算法(lru,least recently used)。wsc维护dram驻留页面的排名列表,在排名列表中,各个页面按照页面命中率进行排序。热门页面将向排名列表的头部渗透,冷门页面从排名列表的尾部被驱逐。当所需的元数据页
面不在l2p缓存中且l2p缓存已满时,l2p表将在dram和缓存层之间交换元数据页面。其中,热门页面可以理解为经常被访问的页面,冷门页面可以理解为很少被访问的页面。基于此,l2p缓存是性能和系统资源之间的权衡,通过调整l2p的缓存,可以对数据存储系统的性能进行调节,配置的l2p缓存越大,触发的页面驱逐越少,系统性能越高。
[0109]
应用本说明书实施例的方案,确定有效缓存块的缓存地址,将缓存地址作为待存储数据的逻辑块地址对应的存储地址,使得数据存储过程是可循的,在后续进行数据查询过程中,可以直接根据逻辑块地址对应的存储地址进行数据查询。
[0110]
本说明书一种可选的实现方式中,将待存储数据存储至空闲缓存块中的任一子缓存块时,可以将待存储数据的逻辑块地址(lba,logical block addresses)存储至子缓存块的可变扇区中,以记录待存储数据的存储地址。
[0111]
具体地,可变扇区(vss)用于每个子缓存块记录用户给定的逻辑块地址,逻辑区块地址是描述计算机存储设备上数据所在区块的通用机制,可以意指某个数据区块的地址。一般情况下,逻辑块地址从0开始编号来定位区块,如第一区块lba=0,第二区块lba=1,依此类推。
[0112]
需要说明的是,vss用于每个子缓存块来记录用户给定的lba,这是l2p条目的反向映射。此反向映射用于在wsc意外崩溃时重建l2p表。此外,wsc管理一个物理到逻辑地址表((p2l,physical address to logical address))到dram中的反向映射。这个dram驻留p2l用于在压缩过程中有效地找到块的相关l2p条目。
[0113]
示例性地,参见图6,图6示出了本说明书一个实施例提供的一种数据存储方法的处理过程示意图,用户请求更新逻辑块地址0-n中的逻辑块地址a和逻辑块地址b,将逻辑块地址a对应的待存储数据存储至子缓存块4中,将逻辑块地址b对应的待存储数据存储至子缓存块5中。缓存层至少包括子缓存块0-6,l2p表中至少包括页0-x,页面1对应逻辑块地址a,将页面1对应的存储地址由子缓存块0的缓存地址更新为子缓存块4的缓存地址。同理,页面n对应逻辑块地址b,将页面n对应的存储地址由子缓存块2的缓存地址更新为子缓存块5的缓存地址。也即更新l2p条目中,从子缓存块0到子缓存块4的逻辑块地址a的入口和从子缓存块2到子缓存块5的逻辑块地址b的入口。
[0114]
步骤306:在缓存层中已存储数据的缓存块的数量达到第一预设阈值的情况下,将有效缓存块中的数据依次写入缓存层中的缓冲区,生成聚合数据。
[0115]
本说明书一个或多个实施例中,接收数据存储请求,将待存储数据添加至缓存层中的空闲缓存块,获得有效缓存块之后,进一步地,在缓存层中已存储数据的缓存块的数量达到第一预设阈值的情况下,触发数据压缩过程。在数据压缩过程中,数据的频繁更新或临时存储将终止,从缓存层读取有效缓存块中的数据,将这些数据写入容量层中。通过在缓存层上缓存频繁更新或临时存储的数据,最大限度地减少了对容量层中nand ssd的写入,提高ssd的寿命。实际应用中,数据压缩过程可以是将有效缓存块中的数据依次写入缓存层中的缓冲区,生成聚合数据,在缓冲区中存储的数据量达到第二预设阈值的情况下,将聚合数据存储至容量层。
[0116]
具体地,第一预设阈值为将缓存块中的数据写入缓冲区的临界条件,若缓存层中已存储数据的缓存块的数量达到第一预设阈值,则可以将缓存块中的数据写入缓冲区,若没有达到,则不作操作。例如,第一预设阈值可以是已存储数据的缓存块的数量占空闲缓存
块数量的比例,如80%,还可以是具体的数值,具体根据实际情况进行选择,本说明书实施例对此不作任何限定。聚合数据是指将写入缓冲区的数据进行聚合生成的数据。
[0117]
示例性地,假设第一预设阈值为80%,缓存层中有100个空闲缓存块,将待存储数据添加至缓存层中的空闲缓存块,获得有效缓存块之后,此时,已存储数据的缓存块共86个,计算已存储数据的缓存块的数量占空闲缓存块数量的比例为86%,由于86%>80%,因此,可以确定缓存层中已存储数据的缓存块的数量达到第一预设阈值,进一步将有效缓存块中的数据依次写入所述缓存层中的缓冲区,生成聚合数据。
[0118]
本说明书一种可选的实现方式中,缓冲区包括多个缓冲区块,可以将有效缓存块中的数据依次写入缓冲区中,生成聚合数据,也即上述将有效缓存块中的数据依次写入缓存层中的缓冲区,生成聚合数据的步骤,可以包括以下步骤:
[0119]
遍历缓冲区中的多个缓冲区块,确定缓冲区中的空闲缓冲区块集,其中,空闲缓冲区块集中包括多个按照顺序排列的空闲缓冲区块;
[0120]
根据空闲缓冲区块的排列顺序,依次将有效缓存块中的待存储数据存储至空闲缓冲区块中,生成聚合数据。
[0121]
具体地,空闲缓冲区块是指可用的缓冲区块。假设缓冲区中包括缓冲区块0-9这10个缓冲区块,其中,缓冲区块3-6并不是空闲缓存区块,即可确定空闲缓冲区块集为{缓冲区块0、缓冲区块1、缓冲区块2、缓冲区块7、缓冲区块8、缓冲区块9}。
[0122]
参见图7,图7示出了本说明书一个实施例提供的另一种数据存储方法的处理过程示意图,可以定期检查已使用的缓存块,在已存储数据的缓存块的数量达到第一预设阈值的情况下,将缓存块n中的待存储数据由子缓存块1、子缓存块2和子缓存块4依次写入缓冲区x中的缓冲区块0、缓冲区块1、缓冲区块2,将缓存块n 1中的待存储数据由子缓存块1、子缓存块3和子缓存块4依次写入缓冲区x中的缓冲区块7、缓冲区块8、缓冲区块9,其中,缓存块n中至少包括子缓存块0-6,缓存块n 1中至少包括子缓存块0-6。
[0123]
应用本说明书实施例的方案,遍历缓冲区中的多个缓冲区块,确定缓冲区中的空闲缓冲区块集,根据空闲缓冲区块的排列顺序,依次将有效缓存块中的待存储数据存储至空闲缓冲区块中,生成聚合数据,将用户的随机写入调整为顺序写入,并批量生成聚合数据,减少了写入放大和硬盘磨损。
[0124]
实际应用中,依次将有效缓存块中的待存储数据存储至空闲缓冲区块中,生成聚合数据的步骤之后,还可以包括以下步骤:
[0125]
将有效缓存块更新为无效缓存块,并擦除无效缓存块中的数据;
[0126]
将擦除后的无效缓存块作为空闲缓存块。
[0127]
具体地,无效缓存块是指已经将数据写入缓冲区的有效缓存块,由于有效缓存块中的数据已经写入缓冲区中,则该有效缓存块中的数据可以被擦除,该有效缓存块可以更新为无效缓存块。
[0128]
需要说明的是,将有效缓存块中的待存储数据存储至空闲缓冲区块之后,可以更新有效位图,位图用于指示每个区域中块的使用和状态。如图7中,缓冲块n中的子缓存块1、子缓存块2和子缓存块4中的数据写入缓冲区x之后,擦除子缓存块1、子缓存块2和子缓存块4中的数据,将子缓存块1、子缓存块2和子缓存块4变为无效,此时,缓冲区x中的缓冲区块0、缓冲区块1、缓冲区块2变为有效。
[0129]
应用本说明书实施例的方案,将有效缓存块更新为无效缓存块,并擦除无效缓存块中的数据,将擦除后的无效缓存块作为空闲缓存块,可以及时释放无效缓存块,将无效缓存块重置为可用空间,提高资源利用率。
[0130]
实际应用中,在将有效缓存块中的待存储数据存储至空闲缓冲区块中,生成聚合数据之后,由于待存储数据的存储位置发生了变化,则可以更新带存储数据的逻辑块地址对应的存储地址,也即,上述依次将有效缓存块中的待存储数据存储至空闲缓冲区块中,生成聚合数据的步骤之后,还可以包括以下步骤:
[0131]
确定空闲缓冲区块的缓冲地址;
[0132]
将缓冲地址作为待存储数据的逻辑块地址对应的存储地址。
[0133]
具体地,缓冲地址是指空闲缓冲区块的地址,在本说明书实施例中,可以直接将缓冲地址作为待存储数据的逻辑块地址对应的存储地址,进一步地,还可以在l2p表中更新条目,引用上述图7的例子,l2p表中,与子缓存块1、子缓存块2、子缓存块4对应的逻辑块地址将从子缓存块1、子缓存块2、子缓存块4的缓存地址更新为缓冲区块0、缓冲区块1、缓冲区块2的缓冲地址。
[0134]
应用本说明书实施例的方案,确定空闲缓冲区块的缓冲地址,将缓冲地址作为待存储数据的逻辑块地址对应的存储地址,使得数据存储过程是可循的,在后续进行数据查询过程中,可以直接根据逻辑块地址对应的存储地址进行数据查询。
[0135]
步骤308:在缓冲区中存储的数据量达到第二预设阈值的情况下,将聚合数据存储至容量层。
[0136]
本说明书一个或多个实施例中,接收数据存储请求,将待存储数据添加至缓存层中的空闲缓存块,获得有效缓存块,在缓存层中已存储数据的缓存块的数量达到第一预设阈值的情况下,将有效缓存块中的数据依次写入缓存层中的缓冲区,生成聚合数据之后,进一步地,可以在缓冲区中存储的数据量达到第二预设阈值的情况下,将聚合数据存储至容量层。
[0137]
具体地,数据量可以理解为存储的数据大小,第二预设阈值为将聚合数据存储至容量层的临界条件,若缓冲区中存储的数据量达到第二预设阈值,则可以将聚合数据存储至容量层,若没有达到,则不作操作。例如,第二预设阈值可以是具体的数值,如64kb,还可以是存储的数据量占缓冲区总存储量的比例,具体根据实际情况进行选择,本说明书实施例对此不作任何限定。将聚合数据存储至容量层时,可以直接存入,也可以压缩聚合数据,将压缩后的聚合数据存储至容量层,减少资源消耗。
[0138]
示例性地,假设第二预设阈值为64kb,缓冲区中存储的数据量为77kb,由于77kb>64kb,因此,可以确定缓冲区中存储的数据量达到第二预设阈值,进一步将聚合数据存储至容量层。
[0139]
需要说明的是,由于用户写入数据的周期不同,因此,可以将l2p表作为主机端闪存转换层(ftl,flash translation layer),充当数据存储过程中的缓冲,将用户的随机写入调整为对缓存层的顺序写入。容量层ssd的区域分为两种类型。一种是用于压缩写入的压缩区域;另一个是用于垃圾收集的垃圾收集区,用于提高内部垃圾收集效率,也称为gc区域(garbage collection zone)。当垃圾收集区中的无效块达到垃圾收集阈值时,将触发碎片整理。容量层中的有效块将被移动到gc区域,原始区域将被重置为可用空间。
[0140]
参见图8,图8示出了本说明书一个实施例提供的一种数据存储方法中垃圾收集过程示意图,在此示例中,容量层中有两个区域(区域n和n 1)达到了垃圾收集阈值。其中,区域n包括块0-6,区域n 1包括块0-6,gc区域包括块0-6。根据有效位图读取区域n和n 1中的有效块,并将有效块附加到gc区域。然后,更新有效位图。比如区域n的块3、块4、块6失效;gc区域中的块0、块1和块2将变为有效。最后,更新这些块的l2p条目。例如,与区域n的块3、块4和块6相关联的lba条目将从区域n的块3、块4和块6更新到gc区域的块0、块1和块2。同理,区域n 1的块2、块4、块5失效;gc区域中的块4、块5和块6将变为有效,更新这些块的l2p条目。例如,与区域n 1的块2、块4和块5相关联的lba条目将从区域n 1的块2、块4和块5更新到gc区域的块4、块5和块6。由于ssd在写入数据之前需要被擦除,因此重置区域n和区域n 1,以通知ssd擦除这些区域并将这些区域添加到可用区域列表的尾部。随着垃圾回收的处理,gc区域会变满。然后,gc区域将被标记为公共区域(common zone),另一个空白区域将被选为新的gc区域。
[0141]
应用本说明书实施例的方案,接收数据存储请求,其中,数据存储请求携带待存储数据;将待存储数据添加至缓存层中的空闲缓存块,获得有效缓存块,其中,空闲缓存块是指缓存层中可用的缓存块;在缓存层中已存储数据的缓存块的数量达到第一预设阈值的情况下,将有效缓存块中的数据依次写入缓存层中的缓冲区,生成聚合数据;在缓冲区中存储的数据量达到第二预设阈值的情况下,将聚合数据存储至容量层。通过将有效缓存块中的数据依次写入缓存层中的缓冲区,批量将缓冲区存储的聚合数据存储至容量层,减少了容量层的写入放大以及磨损,进一步提高了数据存储系统的整体性能和数据存储系统的耐用性。
[0142]
实际应用中,将聚合数据存储至容量层之后,还可以包括以下步骤:
[0143]
确定容量层中各数据存储的物理地址;
[0144]
将物理地址作为待存储数据的逻辑块地址对应的存储地址。
[0145]
具体地,物理地址是指容量层中存储数据的地址,在本说明书实施例中,可以直接将物理地址作为待存储数据的逻辑块地址对应的存储地址,进一步地,还可以在l2p表中更新条目。
[0146]
应用本说明书实施例的方案,确定容量层中各数据存储的物理地址,将物理地址作为待存储数据的逻辑块地址对应的存储地址,使得数据存储过程是可循的,在后续进行数据查询过程中,可以直接根据逻辑块地址对应的存储地址进行数据查询。
[0147]
参见图9,图9示出了本说明书一个实施例提供的一种数据查询方法的流程图,该数据查询方法应用于数据存储系统中的管理平台,具体包括以下步骤:
[0148]
步骤902:接收数据查询请求,其中,数据查询请求携带待查询数据的逻辑块地址。
[0149]
步骤904:查找逻辑块地址对应的存储地址。
[0150]
步骤906:根据存储地址查找待查询数据,其中,待查询数据通过上述数据存储方法存储。
[0151]
具体地,数据查询请求是指查询待查询数据的请求,也可以理解为查询目标数据的请求,数据查询请求中携带待查询数据的逻辑块地址,在实际查询过程中,管理平台可以利用该逻辑块地址,查找逻辑块地址对应的存储地址,进一步将该存储地址对应的数据作为待查询数据。
[0152]
应用本说明书实施例的方案,接收数据查询请求,其中,数据查询请求携带待查询数据的逻辑块地址;查找逻辑块地址对应的存储地址;根据存储地址查找待查询数据,其中,待查询数据通过上述数据存储方法存储。通过查找逻辑块地址对应的存储地址,根据存储地址查找带查询数据,提高了数据查询效率。
[0153]
下述结合附图10,以本说明书提供的数据存储方法在交易场景的应用为例,对所述数据存储方法进行进一步说明。其中,图10示出了本说明书一个实施例提供的一种数据存储方法的处理框图,具体包括:
[0154]
数据存储系统接收来自交易程序的i/o请求。用户写入的数据将附加到缓存层中可用的空闲缓存块。数据存储系统更新l2p表,并且缓存层中的缓存地址将插入到针对用户给定lba的条目中。然后,向交易程序确认数据写入。定期检查缓存层的使用情况,压缩数据,将数据从缓存层移动到容量层中的zns(zoned namespace)闪存区域,相关的l2p条目将更新为现在指向zns闪存上的位置。同时,检查容量层的使用情况,如果有容量层中的区域达到gc阈值,则进行碎片整理。在压缩数据至碎片整理的过程中,当数据被移动到新的区域时,相关的l2p条目将被更新为新的存储地址。
[0155]
应用本说明书实施例的方案,在小i/o请求的场景下,通过聚合小i/o有效消除了硬盘内写放大,提高了硬盘性能,在写i/o具备局部热点的场景,通过缓存层吸收热点数据,也进一步提高了系统性能,有效的解决qlc的写放大缓解使用寿命问题,同时解决随机写性能仅有顺序写的1%的问题。
[0156]
参见图11,图11a示出了本说明书一个实施例提供的一种数据存储方法的处理过程流程图,具体包括以下步骤:
[0157]
步骤1102:接收数据存储请求,其中,数据存储请求携带待存储数据。
[0158]
步骤1104:在缓存层中查找空闲缓存块,将待存储数据存储至空闲缓存块中的第一子缓存块中,获得有效缓存块。
[0159]
具体地,参见图11b,图11b示出了本说明书一个实施例提供的一种缓存块示意图,其中,图11b中包括缓存块1、缓存块2、缓存块3和缓存块4,阴影部分即为待存储数据。
[0160]
步骤1106:在缓存层中已存储数据的缓存块的数量达到第一预设阈值的情况下,遍历缓冲区中的多个缓冲区块,确定缓冲区中的空闲缓冲区块集。
[0161]
步骤1108:根据空闲缓冲区块的排列顺序,依次将有效缓存块中的待存储数据存储至空闲缓存区块中,生成聚合数据。
[0162]
具体地,参见图11c,图11c示出了本说明书一个实施例提供的一种缓冲区示意图,将图11b中缓存块1、缓存块2、缓存块3和缓存块4中的待存储数据依次存储至缓冲区的空闲缓冲区块中,获得如图11c所示的缓存区,其中,阴影部分即为待存储数据,图11c中2*4的阴影部分中的数据即为聚合数据。
[0163]
步骤1110:在缓冲区中存储的数据量达到第二预设阈值的情况下,将聚合数据存储至容量层。
[0164]
具体地,上述步骤1102-步骤1110的具体实现过程可以参见图3实施例,本实施例便不再赘述。
[0165]
应用本说明书实施例的方案,通过将有效缓存块中的数据依次写入缓存层中的缓冲区,批量将缓冲区存储的聚合数据存储至容量层,减少了容量层的写入放大以及磨损,进
一步提高了数据存储系统的整体性能和数据存储系统的耐用性。
[0166]
与上述数据存储方法实施例相对应,本说明书还提供了数据存储装置实施例,图12示出了本说明书一个实施例提供的一种数据存储装置的结构示意图。如图12所示,数据存储装置应用于数据存储系统中的管理平台,数据存储系统包括管理平台、缓存层和容量层;该装置包括:
[0167]
第一接收模块1202,被配置为接收数据存储请求,其中,数据存储请求携带待存储数据;
[0168]
添加模块1204,被配置为将待存储数据添加至缓存层中的空闲缓存块,获得有效缓存块,其中,空闲缓存块是指缓存层中可用的缓存块;
[0169]
生成模块1206,被配置为在缓存层中已存储数据的缓存块的数量达到第一预设阈值的情况下,将有效缓存块中的数据依次写入缓存层中的缓冲区,生成聚合数据;
[0170]
存储模块1208,被配置为在缓冲区中存储的数据量达到第二预设阈值的情况下,将聚合数据存储至容量层。
[0171]
可选地,缓冲区中包括多个缓冲区块;生成模块1206,进一步被配置为遍历缓冲区中的多个缓冲区块,确定缓冲区中的空闲缓冲区块集,其中,空闲缓冲区块集中包括多个按照顺序排列的空闲缓冲区块;根据空闲缓冲区块的排列顺序,依次将有效缓存块中的待存储数据存储至空闲缓冲区块中,生成聚合数据。
[0172]
可选地,该装置还包括:第一确定模块,被配置为确定空闲缓冲区块的缓冲地址;将缓冲地址作为待存储数据的逻辑块地址对应的存储地址。
[0173]
可选地,该装置还包括:擦除模块,被配置为将有效缓存块更新为无效缓存块,并擦除无效缓存块中的数据;将擦除后的无效缓存块作为空闲缓存块。
[0174]
可选地,缓存块中包括多个具有可变扇区的子缓存块;添加模块1204,进一步被配置为在缓存层中查找空闲缓存块,将待存储数据存储至空闲缓存块中的第一子缓存块中,获得有效缓存块,其中,第一子缓存块是空闲缓存块中的任一子缓存块;将待存储数据的逻辑块地址存储至子缓存块的可变扇区中。
[0175]
可选地,该装置还包括:第二确定模块,被配置为确定有效缓存块的缓存地址;将缓存地址作为待存储数据的逻辑块地址对应的存储地址。
[0176]
可选地,该装置还包括:第三确定模块,被配置为确定容量层中各数据存储的物理地址;将物理地址作为待存储数据的逻辑块地址对应的存储地址。
[0177]
应用本说明书实施例的方案,接收数据存储请求,其中,数据存储请求携带待存储数据;将待存储数据添加至缓存层中的空闲缓存块,获得有效缓存块,其中,空闲缓存块是指缓存层中可用的缓存块;在缓存层中已存储数据的缓存块的数量达到第一预设阈值的情况下,将有效缓存块中的数据依次写入缓存层中的缓冲区,生成聚合数据;在缓冲区中存储的数据量达到第二预设阈值的情况下,将聚合数据存储至容量层。通过将有效缓存块中的数据依次写入缓存层中的缓冲区,批量将缓冲区存储的聚合数据存储至容量层,减少了容量层的写入放大以及磨损,进一步提高了数据存储系统的整体性能和数据存储系统的耐用性。
[0178]
上述为本实施例的一种数据存储装置的示意性方案。需要说明的是,该数据存储装置的技术方案与上述的数据存储方法的技术方案属于同一构思,数据存储装置的技术方
案未详细描述的细节内容,均可以参见上述数据存储方法的技术方案的描述。
[0179]
与上述数据查询方法实施例相对应,本说明书还提供了数据查询装置实施例,图13示出了本说明书一个实施例提供的一种数据查询装置的结构示意图。如图13所示,数据查询装置应用于数据存储系统中的管理平台,该装置包括:
[0180]
第二接收模块1302,被配置为接收数据查询请求,其中,数据查询请求携带待查询数据的逻辑块地址;
[0181]
第一查找模块1304,被配置为查找逻辑块地址对应的存储地址;
[0182]
第二查找模块1306,被配置为根据存储地址查找待查询数据,其中,待查询数据通过上述数据存储方法存储。
[0183]
应用本说明书实施例的方案,接收数据查询请求,其中,数据查询请求携带待查询数据的逻辑块地址;查找逻辑块地址对应的存储地址;根据存储地址查找待查询数据,其中,待查询数据通过上述数据存储方法存储。通过查找逻辑块地址对应的存储地址,根据存储地址查找带查询数据,提高了数据查询效率。
[0184]
上述为本实施例的一种数据查询装置的示意性方案。需要说明的是,该数据查询装置的技术方案与上述的数据查询方法的技术方案属于同一构思,数据查询装置的技术方案未详细描述的细节内容,均可以参见上述数据查询方法的技术方案的描述。
[0185]
图14示出了本说明书一个实施例提供的一种计算设备的结构框图。该计算设备1400的部件包括但不限于存储器1410和处理器1420。处理器1420与存储器1410通过总线1430相连接,数据库1450用于保存数据。
[0186]
计算设备1400还包括接入设备1440,接入设备1440使得计算设备1400能够经由一个或多个网络1460通信。这些网络的示例包括公用交换电话网(pstn,public switched telephone network)、局域网(lan,local area network)、广域网(wan,wide area network)、个域网(pan,personal area network)或诸如因特网的通信网络的组合。接入设备1440可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(nic,network interface card))中的一个或多个,诸如ieee802.11无线局域网(wlan,wireless local area networks)无线接口、全球微波互联接入(wi-max,world interoperability for microwave access)接口、以太网接口、通用串行总线(usb,universal serial bus)接口、蜂窝网络接口、蓝牙接口、近场通信(nfc,near field communication)接口,等等。
[0187]
在本说明书的一个实施例中,计算设备1400的上述部件以及图14中未示出的其他部件也可以彼此相连接,例如通过总线。应当理解,图14所示的计算设备结构框图仅仅是出于示例的目的,而不是对本说明书范围的限制。本领域技术人员可以根据需要,增添或替换其他部件。
[0188]
计算设备1400可以是任何类型的静止或移动计算设备,包括移动计算机或移动计算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或pc的静止计算设备。计算设备1400还可以是移动式或静止式的服务器。
[0189]
其中,处理器1420用于执行如下计算机可执行指令,该计算机可执行指令被处理器执行时实现上述数据存储方法或数据查询方法的步骤。
[0190]
上述为本实施例的一种计算设备的示意性方案。需要说明的是,该计算设备的技术方案与上述的数据存储方法或数据查询方法的技术方案属于同一构思,计算设备的技术方案未详细描述的细节内容,均可以参见上述数据存储方法或数据查询方法的技术方案的描述。
[0191]
本说明书一实施例还提供一种计算机可读存储介质,其存储有计算机可执行指令,该计算机可执行指令被处理器执行时实现上述数据存储方法或数据查询方法的步骤。
[0192]
上述为本实施例的一种计算机可读存储介质的示意性方案。需要说明的是,该存储介质的技术方案与上述的数据存储方法或数据查询方法的技术方案属于同一构思,存储介质的技术方案未详细描述的细节内容,均可以参见上述数据存储方法或数据查询方法的技术方案的描述。
[0193]
本说明书一实施例还提供一种计算机程序,其中,当所述计算机程序在计算机中执行时,令计算机执行上述数据存储方法或数据查询方法的步骤。
[0194]
上述为本实施例的一种计算机程序的示意性方案。需要说明的是,该计算机程序的技术方案与上述的数据存储方法或数据查询方法的技术方案属于同一构思,计算机程序的技术方案未详细描述的细节内容,均可以参见上述数据存储方法或数据查询方法的技术方案的描述。
[0195]
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
[0196]
所述计算机指令包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、电载波信号、电信信号以及软件分发介质等。
[0197]
需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本说明书实施例并不受所描述的动作顺序的限制,因为依据本说明书实施例,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本说明书实施例所必须的。
[0198]
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
[0199]
以上公开的本说明书优选实施例只是用于帮助阐述本说明书。可选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书实施例的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本说明书实施例的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本说明书。本说明书仅受权利要求书及其全部范围和等效物的限制。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献