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

用于减少内存元数据的存储引擎、方法和可读介质与流程

2021-10-24 09:42:00 来源:中国专利 TAG:介质 数据存储 可读 减少 内存


1.本技术涉及一种减少内存元数据的存储引擎、方法和可读介质。


背景技术:

2.云存储记录引擎通常以区块(chunk)为单位进行数据存储,并且对保存在存储设备上的区块进行管理。云存储记录引擎可以直接管理存储设备上作为原始数据记录的区块。一个区块在逻辑上可以分成多个连续的区块段,并且区块段可以覆盖所包含记录的键空间的连续范围,其中,这些记录存储在单个超级块中。对于每个区块段,云存储记录引擎为该区块段的键范围内的所有记录维护记录级的存储器内索引。这样的每段索引被称为区块段索引映射(csim)。与被设计为只支持块存储设备的常规云存储引擎不同,云存储记录引擎可以被优化为在仅附加存储设备上运行。
3.在某些工作负载情景中,记录大小可以是固定的,而且相对较小,例如4096 64字节。在这种情况下,csim的数据结构可能会变得非常大,并且会占用大量的主机主内存。在最坏的情况下,可能需要8字节的csim项目(例如,31位逻辑偏移量、22位扇区偏移量和11位扇区大小)来表示4k大小的记录与其对应的物理扇区位置之间的映射。对于8tb设备,每个驱动器的总csim索引内存需求可为16gb,这意味着需要为12个驱动器的存储服务器配置预留大小为192gb的主内存。


技术实现要素:

4.根据一个实施例,提供一种由计算设备实现的方法,该方法包括:接收将具有第一数据大小的第一记录存储到存储设备中的第一写入请求;确定所述第一数据大小是否大于或等于预设数据大小;以及根据所述第一数据大小是否大于或等于所述预设数据大小,将所述第一记录写入中间写入缓存的缓存项目或所述存储设备的数据存储区中的一个;其中,响应于预设条件被满足,将所述缓存项目中的所述存储记录写入所述存储设备的所述数据存储区。
5.根据另一实施例,提供一种存储引擎,其包括:一个或多个处理器;以及存储器,存储有可执行指令,当该可执行指令由所述一个或多个处理器执行时,使所述一个或多个处理器执行动作,所述动作包括:接收将具有第一数据大小的第一记录存储到存储设备中的第一写入请求;确定所述第一数据大小是否大于或等于预设数据大小;以及根据所述第一数据大小是否大于或等于所述预设数据大小,将所述第一记录写入中间写入缓存的缓存项目或所述存储设备的数据存储区中一个;其中,响应于预设条件被满足,将所述缓存项目中的所述存储记录写入所述存储设备的所述数据存储区。
6.根据另一实施例,提供一种或多种计算机可读介质,其存储有可执行指令,当所述可执行指令由一个或多个处理器执行时,使所述一个或多个处理器执行以下动作:接收将具有第一数据大小的第一记录存储到存储设备中的第一写入请求;确定所述第一数据大小是否大于或等于预设数据大小;以及根据所述第一数据大小是否大于或等于所述预设数据
大小,将所述第一记录写入所述中间写入缓存的缓存项目或所述存储设备的数据存储区中一个;其中,响应于预设条件被满足,将所述缓存项目中的存储记录写入所述存储设备的所述数据存储区。
附图说明
7.详细描述将参照附图阐述。在所述附图中,附图标记的最左边数字表明该附图标记第一次出现的附图。在不同的附图中使用相同的附图标记表示相似或相同的项目。
8.图1示出了使用存储引擎的示例环境。
9.图2更详细地示出了示例存储引擎。
10.图3示出了另一个示例存储引擎。
11.图4示出了不同的元数据数据结构之间的示例关系。
12.图5示出了在存储设备中存储数据的示例方法。
具体实施方式
13.示例环境
14.图1示出了可用于实现存储引擎的示例环境100。环境100可以包括存储引擎102。在该示例中,存储引擎102被描述为作为单个的实体或设备而存在。此外,尽管在此处描述的示例中,存储引擎102可以在单个的实体和设备中,作为软件和硬件的组合来实现,但在其他情况下,存储引擎102可作为一个或多个服务器104

1、104

2、...、104

n(统称为服务器104)中提供的服务来实现和分布,这些服务器通过网络106连接和通信,其中,n是大于或等于一的整数。作为示例而非限制,存储引擎102的部分或全部功能可包含在一台或多台服务器104中或者由其提供。在其他示例中,存储引擎102可通过网络106与一个或多个服务器104进行数据通信。
15.在实施方式中,一个或多个服务器104可构成计算机系统108(如云计算架构或服务器集群),或构成计算机系统108的一部分。在实施方式中,计算机系统108可以向多个客户端设备提供各种服务(为了简要说明,在图1中仅示出了一个客户端设备110)。在该示例中,存储引擎102可被描述为计算机系统108的一部分。在其他情况下,存储引擎102可以是向计算机系统108提供支持服务的单个实体。
16.在实施方式中,一个或多个服务器104中的每一个可被实现为具有计算能力的多种设备中的任意一种,可包括但不限于处理器(处理器可以包括单核处理器或多核处理器)、台式计算机、笔记本电脑或便携式计算机,手持设备、上网本、互联网设备、平板电脑、移动设备(例如,移动电话、个人数字助理、智能手机等)、服务器计算机等或其组合。
17.网络106可以是无线网络、或有线网络、或其组合。网络106可以是彼此互连的单个网络的集合,并作为单一的大型网络(例如互联网或内联网)发挥作用。这些单个网络的示例可包括但不限于电话网络、有线网络、局域网(lan)、广域网(wan)和城域网(man)。此外,单个网络可以是无线网络、或有线网络、或其组合。有线网络可包括电载波连接(例如通信电缆等)和/或光载波连接(例如光纤连接等)。无线网络可以包括例如wifi网络、其他射频网络(如,蓝牙、zigbee等)等。
18.在实施方式中,环境100可以进一步包括一个或多个存储设备112

1,

,112

m(统
称为存储设备112),其中,m是大于或等于1的整数。在实施方式中,存储设备112可实现为具有存储能力的多种设备中的任何一种,并且可包括但不限于仅附加存储设备(如,固态设备(ssd)、区块存储设备、混合硬盘驱动器(hhd),硬盘驱动器(hdd)等)。
19.在实施方式中,存储引擎102可以用于从客户端设备(例如,客户端设备110)接收数据(例如,相同或不同大小的多个记录),并将数据以区块为单位写入或存入存储设备112中。
20.示例存储引擎
21.图2更详细地示出了存储引擎102。在实施方式中,存储引擎102可以包括但不限于一个或多个处理器202、存储器204、输入/输出(i/o)接口206和/或网络接口208。在实施方式中,存储引擎102(例如,一个或多个处理器202)的某些功能或组件可以通过硬件来实现,例如asic(即,专用集成电路),fpga(即,现场可编逻辑门阵列)和/或其他硬件。在此示例中,存储引擎102可以与一个或多个存储设备(如,一个或多个存储设备112)相关联和/或连接,用于提供数据处理服务和/或功能,其中数据(例如记录等)包含在一个或多个存储设备中。
22.在实施方式中,处理器202可以被配置为执行存储在存储器204中的指令、和/或从输入/输出接口206接收的指令、和/或从网络接口208接收的指令。在实施方式中,处理器202可以由一个或多个硬件处理器来实现,包括:例如,微处理器、专用指令集处理器、物理处理单元(ppu)、中央处理单元(cpu)、图形处理单元,等。可替代地或附加地,这里描述的功能可以至少部分地由一个或多个硬件逻辑组件执行。例如但不限于,可使用的说明性类型的硬件逻辑组件包括:现场可编程逻辑门阵列(fpga)、专用集成电路(asic)、专用标准产品(assp)、系统级芯片系统(soc)、复杂可编程逻辑器件(cpld)等。
23.存储器204可以包括易失性存储器(如,随机存取存储器(ram))和/或非易失性存储器(如,只读存储器(rom)或闪存ram)形式的处理器可读介质。存储器204是处理器可读介质的示例。
24.处理器可读介质可以包括易失性或非易失性类型、可移动或不可移动介质,其可以使用任何方法或技术来实现信息的存储。所述信息可以包括处理器可读指令、数据结构、程序模块或其他数据。处理器可读介质的示例可以包括但不限于:相变存储器(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电子可擦除可编程只读存储器(eeprom)、快速闪存或其他内部存储技术、光盘只读存储器(cd

rom)、数字多功能光盘(dvd)或其他光学存储器、磁带、磁盘存储或其他磁存储设备,或任何其他可用于存储可由处理器和/或计算设备访问信息的非传输介质。如本文所限定的,处理器可读介质不包括任何瞬态介质,例如调制数据信号和载波。
25.尽管在该示例中,描述了存储引擎102中的示例性硬件组件,但是在其他情况下,存储引擎102可以进一步包括其他硬件组件和/或其他软件组件,例如用于执行存储在存储器204中的各种操作指令的程序单元210。在实施方式中,存储引擎102还可以包括程序数据212,该程序数据212存储了用于执行相关操作的数据,所述相关操作是指将数据写入或存储到一个或多个储存设备中。
26.在实施方式中,存储引擎102可以通过输入/输出(i/o)接口206和/或网络接口208与一个或多个存储设备112进行数据通信。在实施方式中,输入/输出(i/o)接口206或网络
接口208可以包括一个或多个数据通信信道,例如,一个或多个通信线路或者信道,被配置为或者能够以无线和/或有线连接的方式将存储引擎102与一个或者多个存储设备212连接。有线连接的示例可以包括电载波连接(例如,通信电缆、计算机或通信总线(如串行总线)、pcie总线或通道、nvme连接等)、光载波连接(例如,光纤连接等)。无线连接的示例可以包括,例如,wifi连接、其他射频连接(例如,等)等。
27.示例存储设备
28.图3更详细地示出了示例存储设备112。在实施方式中,所述存储设备112可以包括但不限于控制器302、存储区域304、中间写入缓存306和/或一个或多个访问接口308。在实施方式中,所述控制器302可以包括主机接口310、处理单元或固件312、以及被配置为与存储区域304进行通信的存储区域接口314(例如,向存储区域304发送指令)。在实施方式中,例如,所述存储设备112可以包括仅附加设备,如固态设备(ssd)。在实施方式中,例如,所述存储区域304可以包括或属于存储设备112的一个或多个非易失性存储组件,如nand设备。
29.在实施方式中,中间写入缓存306可以包括或属于所述存储设备112的易失性存储器组件,如动态随机存取存储器(dram)等。一个或多个访问接口308可以配置为使存储引擎102能够访问中间写入缓存306。例如,如果存储设备112是仅附加设备(如固态设备),则一个或多个访问接口308可以包括但不限于独立的非易失性存储器传输规范(nvme)命名空间和持久存储器区域(pmr)接口等。在这种情况下,存储引擎102可以通过独立的nvme命名空间访问中间写入缓存306,并通过发送nvme写入命令,将新的数据记录写入或附加到中间写入缓存306。另外地或可替代地,中间写入缓存306可以作为使用pmr接口的设备型字节可寻址存储器空间而暴露于存储引擎102,并且所述存储引擎102可以通过nvme写入命令将数据从中间写入缓存305写入存储区域304。
30.在实施方式中,中间写入缓存306可以被布置为具有预定(即,固定和通用)大小的多个缓存项目。所述多个缓存项目中每个缓存项目的预设项目大小可以基于一个或多个因素来确定,其中,所述因素可包括但不限于存储设备112的可用易失性存储器组件的存储容量、存储设备112中设置的数据扇区大小、数据记录的典型大小等。另外地或可替代地,存储引擎102也可以根据写入请求的实时统计信息来配置多个缓存项目中每个缓存项目的预设项目大小。在实施方式中,实时统计信息可以包括但不限于,在预设时间间隔(如1分钟,10分钟等)内写入请求的数量、在预定时间间隔内存入或写入的数据记录的平均或中间大小、其大小小于预设值的数据记录的数量等。作为示例而非限制,306总大小可以设置为8mb,并且每个缓冲区条目的大小可以设置为64kb,这样,中间写入缓存306中就有128个缓存项目。显然,中间写入缓存306的大小和每个缓存项目的大小的其他值也是可取的,这取决于如上所述的一个或多个因素和/或写入请求的实时统计信息。
31.示例索引配置
32.在实施方式中,存储引擎102可以直接管理和处理一个或多个存储设备112(例如,仅附加存储设备或简称为仅附加设备)。在实施方式中,为了支持存储引擎102,存储设备112(例如,仅附加设备)可以被配置为或使其能够支持多个写入流,例如,至少三个写流。例如,一个或多个写入流可以用于支持写入从用户的客户端设备接收到的数据记录。存储引擎102可以在内部使用写入流(例如gc写入流)来写入由垃圾回收(gc)处理生成的数据记录。写入流(如,元数据写入流)可用于写入检查点和事务日志记录。在实施方式中,写入流
可以包括超级块的序列。一旦一个超级块被写满,存储引擎102就可选择另一个超级块继续写入。在实施方式中,超级块是仅附加存储设备的写存储单元。数据只能按顺序写入超级块。一旦写入,超级块就无法被重写,除非擦除超级块,这样会消除存储在超级块上的所有数据。
33.在实施方式中,存储引擎102可以以数据区块(或简称为区块)为单位存储数据。在实施方式中,区块大小可以由存储引擎102或相应的存储设备(如,存储设备112)的类型来限定。作为示例而非限制,区块大小可以由存储设备112和/或存储引擎102限定,并且可以以兆字节(mb)为单位,如64mb。在分配区块之后,存储引擎102可以允许用户向区块中添加或附加数据(例如记录)。在实施方式中,连续的记录在逻辑上可以是相邻的,记录的区块内结束偏移量等于其后另一个记录的起始偏移量。在实施方式中,区块中的第一记录的起始偏移量为零,记录的逻辑大小可以定义为记录的起始偏移量和结束偏移量之间的间隙或差值。在实施方式中,记录的逻辑大小可以被上限限制(例如4mb、8mb等),这个上限可以由存储引擎102或存储记录的存储设备112的类型来限定。在实施方式中,记录的键可以由存储该记录的区块标识(或缩写为id)和该区块中记录的起始偏移量的组合来表示。
34.在实施方式中,存储引擎102可以被配置为管理和处理存储在存储设备(如存储设备112)中的区块。在实施方式中,存储设备112可以以超级块为单位存储数据,并且超级块的大小可以由存储设备112和/或存储引擎102限定。超级块的大小可以以gb为单位,例如16gb等。在实施方式中,存储引擎102或存储设备112可以将记录附加或添加到超级块中,直到超级块被写满,并且在清除或擦除存储在超级块中的数据(例如记录)之后,超级块可以重新开放从头开始接受新的记录。在实施方式中,存储引擎102或存储设备112可以在一个或多个超级块中存储区块,并且可以以交错的方式在超级块中存储多个区块。
35.在实施方式中,超级块可以包括多个(例如,400万、800万等)物理上连续的扇区,每个扇区大小以千字节(kb)为单位,例如4kb。在实施方式中,整个记录可以连续地存储在超级块中的一个或多个连续的扇区中。在实施方式中,记录的物理位置可以由存储该记录的超级块标识、存储该记录的第一扇区标识(以下称为第一包含扇区)、第一包含扇区中的该记录的偏移量表、以及记录的物理大小来表示。在实施方式中,记录的物理大小可以与记录的逻辑大小相关,并且可能略大于记录的逻辑大小。在不失一般性的情况下,区块可以由单个存储设备提供服务或存储在单个存储设备中,也可以不由多个存储设备提供服务或跨多个存储设备存储。
36.在实施方式中,区块可以是存储引擎102的逻辑存储单元。数据只能附加到区块中。一旦区块被封存,数据就无法再被写入区块。封存的区块之后可以被删除。存储引擎102可以回收被删除的区块所占用的存储空间。在实施方式中,数据记录(或简称为记录)可以是最小数据单元,并且区块可以包括多个记录。在实施方式中,逻辑记录大小可以被定义为数据记录的数据大小。物理记录大小可以被定义为数据记录的存储大小。数据记录的存储大小通常可以大于数据记录的逻辑记录大小,因为存储引擎102可能需要记录该数据记录的其他元数据。但是,如果数据记录以某种压缩格式存储,则物理记录大小也可小于逻辑记录大小。
37.在实施方式中,存储引擎102可以维护区块级的存储器内索引,即,从区块标识(即,区块的标识或区块id)到设备标识(即,存储设备的标识或设备id)和区块索引组合的
映射,假定区块由单个存储设备提供服务或存储在单个存储设备中。在实施方式中,对于每个存储设备,存储引擎102可以进一步维护记录级的索引,即,从区块索引和记录的起始偏移量的组合到超级块id(即,包含该记录的超级块的标识)、第一包含扇区id(即第一包含扇区的标识)、该记录在该第一包含扇区中的偏移量、该记录的物理大小的组合的映射。在实施方式中,存储引擎102可以采用多种索引方法来减少记录级索引所占用的内存量。
38.扇区内索引
39.在实施方式中,扇区可以在诸如扇区元数据区域(或称为oob(带外)区域)的特殊区域中存储或包含该扇区中包含的第一记录的起始偏移量。在实施方式中,记录的数据头可以在存储设备中存储或包括该记录的物理大小信息。在实施方式中,在确定用于存储记录的第一包含扇区的标识之后,可以通过首先在扇区中找到或获得第一记录的起始偏移量,来确定该记录在该扇区中的物理偏移量,然后扫描后续扇区的记录,这些记录将被加载到储存引擎102的存储器中。在实施方式中,记录的物理位置可以缩减为包括该记录的超级块的标识、第一包含扇区的标识和扇区数(即,用于存储该记录的扇区数量)的组合。
40.区块索引划分
41.在实施方式中,可以在逻辑上将区块划分或分割为多个连续的区块段。在实施方式中,区块段可以覆盖或包括包含在其中的记录的键空间的连续范围,这些记录可以存储在单个超级块中。在实施方式中,区块段的键范围可以由区块段的起始偏移量和结束偏移量来表示。作为示例而非限制,区块段的键范围可以表示为[开始偏移量,结束偏移量),其中下限是包括在内的,上限是不包括在内的。在实施方式中,不同的区块段可以有不相交的键范围。在实施方式中,记录可以包括在单个区块段中,而不能包括在多个区块段中。
[0042]
在实施方式中,超级块可以包括多个区块的区块段。在实施方式中,一个区块的多个区块段可以存在或包括在超级块中,并且这些区块段的键范围可以被或不被合并或组合成一个更大的连续键空间。如果这些区块段的键范围不能合并或组合成一个更大的连续键空间,则这些区块段可以作为单独的区块段存储在超级块中。
[0043]
在实施方式中,存储引擎102可以为属于每个区块段的对应键范围的记录维护记录级的存储器内索引。在下文中,将这种分段索引称为区块段索引元数据(csim)。在实施方式中,所有区块段的csim可以组合以形成该区块的记录级索引,并且可以将它们按照特定顺序链接在一起以形成预设的数据结构,以使得存储引擎102能够快速搜索特定区块段(并进而搜索特定记录)。作为示例而非限制,例如,可以根据区块段的各自起始偏移量(例如,升序排列),将一个区块的区块段的csim链接在一起以形成链接列表,以使得存储引擎102执行快速搜索(例如,二进制搜索等)来找到特定区块段(并进而找到特定记录)。
[0044]
在实施方式中,为了搜索某个区块中的某个记录,存储引擎102可首先为该区块定位csim列表(例如,该块区的区块段的csim的链接列表),然后为该记录定位csim。在实施方式中,csim可提供从记录起始偏移量(即,记录的起始偏移量)到第一包含扇区id、扇区数(即,包括该记录的第一包含扇区的标识以及相应扇区数的组合)的映射,而不需要区块索引(每个区块值)和超级块id(每个段值)。
[0045]
例如,扇区的扇区容量大小可以为容量
扇区
(如4kb),超级块、区块和记录的物理大小的上限配置可分别为容量
超级块
、容量
区块
和容量
记录
(如分别为16gb、2gb和8mb)。记录起始偏移量可以使用n
起始偏移量
位(如31位)表示。第一包含扇区id可以使用n
扇区id
位(如22位)表示。扇
区数可以使用n
扇区数
位(如11位)表示。在这种情况下,csim的每个项目可以使用(n
起始偏移量
n
扇区id
n
扇区数
)(例如,如果n
起始偏移量
为31位,n
扇区id
为22位,n
扇区数
为11位,则为8字节或64位)表示。在这种情况下,一个m x n tb(兆兆字节)设备可以存储m十亿条记录,每条记录n kb,并且csim索引所需的内存,在没有任何内存使用优化的情况下,总量约为(m x n x 8)/(n
起始偏移量
n
扇区id
n
扇区数
)gb。段内索引片段
[0046]
在实施方式中,可以将区块段的csim划分为多个索引片段。在实施方式中,区块段csim的每个索引片段可以占用固定大小或数量的存储器,例如512kb,并且可以表示与区块段相关联的键范围的子集。在实施方式中,每个索引片段可以表示子键范围[片段开始偏移量,片段结束偏移量),例如,下限是包括在内的,上限是不包括在内的。在实施方式中,csim的索引片段可以被链接或组合在一起,形成预设的数据结构(例如链表),以方便后续的搜索。例如,csim的索引片段可以根据索引片段各自起始偏移量(即,片段起始偏移量)的排列顺序(例如,升序)被链接或组合在一起,形成链接列表,以允许对索引片段进行二进制搜索。在实施方式中,带有起始偏移量的记录(可以用作记录键)位于索引片段的子键范围(即,[片段起始偏移量,片段结束偏移量))内,且被索引在该索引片段中。在实施方式中,在删除记录之后,可以从对应的索引片段中删除与该记录相关联的索引项目,或者可以将与该记录相关联的索引项目加上特殊的删除标签或标记,保留在对应的索引片段中,特殊的删除标签或标记用来指示该记录已删除。在实施方式中,每个索引片段可以根据内存使用情况进行单独或分离优化,例如,考虑各个索引片段的相应子键范围内所覆盖的记录的属性。
[0047]
索引片段结构
[0048]
在实施方式中,存储引擎102可以利用索引片段的子键范围中覆盖的记录的多个记录属性来进一步减少记录的每个索引的索引项目所使用或占用的存储器,并且在不影响搜索效率的情况下,使更多索引项目能包含或存储在每个索引片段中。作为示例而非限制,存储引擎102可以基于这些记录属性来提供各种不同的索引片段格式。在实施方式中,所述索引片段的子键范围所覆盖的记录的多个记录属性可以包括但不限于,多个记录的键是否连续或离散、多个记录的逻辑大小是否固定或变化(和/或相同或不同)、用于存储或包含多个记录的扇区数目、用于存储或包含多个记录的扇区是否彼此相邻等等。
[0049]
在实施方式中,每个记录都需要具有索引项目或与索引项目相关联。在将记录从存储设备删除后,相关联的索引项目可以被标记为删除并且不能从所述存储设备直接移除,直到对原始存储该记录的区块、扇区或超级块执行垃圾回收操作后。在实施方式中,当执行垃圾收集操作时,如果被删除记录的数量大于或等于预设的阈值,索引片段可以选择只索引有效记录,并跳过被删除记录。这样会导致索引片段中的键项目或索引项目是离散的。另外地或可替代地,如果将被索引片段覆盖的已删除记录(例如,已被删除或被标记将被删除的记录)的对应键项目或索引项目丢弃且不维持在索引片段中,则索引片段中的键项目或索引项目被认为是离散的。
[0050]
在实施方式中,如果存在索引片段的子键范围内覆盖的所有记录,即具有索引项目(或换句话说,键是连续的),则可以使用记录起始偏移量的间隙编码,其中,可以基于先前记录的起始偏移量和逻辑大小来导出当前记录的起始偏移量。
[0051]
在实施方式中,如果索引片段包括连续键,并且索引片段中的记录具有相同的固
定逻辑大小,则存储引擎102可不需要在索引片段的索引项目中包含记录的相应起始偏移量(即记录起始偏移量),并且可以从与索引片段相关联的基准起始偏移量导出记录起始偏移量(子键范围覆盖这些记录)。
[0052]
在实施方式中,记录逻辑大小(即,记录的逻辑大小)可以被划分为多个大小范围。在实施方式中,多个大小范围可以包括第一范围、第二范围、第三范围等。在实施方式中,如果索引片段的所有记录都属于相同大小范围,则可以使用相同的位数对与该索引片段相对应的每个记录的逻辑大小进行编码。在实施方式中,记录的逻辑大小越小,所使用的位数就越少。
[0053]
在实施方式中,就扇区数而言的记录物理大小(即,记录的物理大小)也可以被划分为多个不同的大小范围。在实施方式中,如果索引片段的所有记录都属于相同的大小范围,则可以使用相同位数对与该索引片段相对应的每个记录的扇区数进行编码。在实施方式中,记录的逻辑大小和物理大小可以不相同,并且可以是相关的。例如,具有较小逻辑大小的记录可能会占用少量扇区。
[0054]
在实施方式中,索引片段的子键范围所覆盖的记录可以存储在超级块的多个扇区中。在这种情况下,索引片段的扇区跨度可具有有限的大小。在实施方式中,索引片段可以具有基本扇区id,与索引片段相对应的每个单独记录的索引项目的相对扇区id(即,相对于基本扇区id)可被包含或存储。在实施方式中,根据跨度的大小,可以使用不同的位数来表示相对扇区id。跨度越小,则使用的位数越少。在实施方式中,由于垃圾回收的操作可导致区块的记录进一步集群化,因此垃圾回收的操作可以减小跨度的大小。
[0055]
在实施方式中,如果在索引片段内存储有所有记录的扇区彼此相邻,也就是说,当前记录的起始扇区可以与先前记录的终止扇区相同或紧接其后。在这种情况下,可以从先前记录的结束扇区导出当前记录的起始扇区的相对扇区id,并且可仅需要一个标识来指示当前记录的起始扇区是否与先前记录的终止扇区相同或紧接其后。
[0056]
图4示出不同存储器中持久性元数据的数据结构之间的示例关系。如上所述,存储引擎102可以维护用于跟踪存储设备(例如,存储设备112)上数据区块(例如,用户数据的区块)的相应位置的存储器内元数据结构。这些数据区块可能需要及时写入存储设备以支持有效的崩溃恢复。在实施方式中,如上所述,例如,存储引擎102可以维护一个或多个超级块元数据(smeta)402、区块元数据(cmeta)404和区块段索引元数据(csim)406。超级块元数据用于表示每个超级块的状态,块元数据用于表示每个块的状态,而区块段索引元数据用于表示每个区块段的状态。如图4所示,可以在两个维度上对区块段(即csim)进行管理,而且所有属于同一区块的区块段(即cmeta)可以以有序的数组被跟踪。此外,属于同一超级块的所有区块段(即smeta)可以作为一个集合被跟踪。
[0057]
索引片段头
[0058]
在实施方式中,索引片段的索引片段头可以位于索引片段的起始处,并且可以包含多个字段。在实施方式中,多个字段可以包括但不限于:区块索引、格式类型、基本起始偏移量、记录大小范围(例如具有大记录,具有中等记录等)、用来指示逻辑大小是否可变的标志、超级块id、记录数等。作为示例而非限制,索引片段头可以具有预设大小(例如16个字节),并且可以包括多个字段(例如,区块索引、格式类型、基本起始偏移量、记录大小范围、指示逻辑大小是否可变的标志、超级块id和记录数),这些字段具有相应的大小,例如,8位、
32位、2位、1位、24位和16位,在本公开中不受限制。在实施方式中,可以基于存储引擎102的提供存储和/或可被用户(如管理员等)配置的存储设备的配置和规范来确定索引片段头的预设大小以及多个字段各自的大小。
[0059]
片段中层索引
[0060]
在实施方式中,如果索引片段中的记录没有相同且固定的逻辑大小,则可以将索引片段中的记录的索引项目划分为多个组,每个组覆盖csim中记录的相应子键范围。在实施方式中,可以存储每个组的组项目,并且所述组项目包括相对于该索引片段的基本起始偏移量的相对起始偏移量。在实施方式中,可以基于索引片段的基本起始偏移量、组的相对起始偏移量、以及同一组中该记录之前的一个或多个记录的对应逻辑大小,导出或确定组中记录的记录起始偏移量。在实施方式中,索引片段中的多个组的组项目可以存储并位于索引片段的末尾。
[0061]
在实施方式中,组项目可充当索引片段内的中间层索引,从而加快在索引片段中的搜索。作为示例而非限制,对于其索引被索引片段的子键范围覆盖的记录的搜索可以通过以下执行:首先,检查索引片段中的组项目以获得包括该记录的索引项目的组的组项目;之后,对该组进行相应处理,从而避免或减少计算成本和时间成本,因为如果索引片段不具有组项目,需要在索引片段中对索引项目进行线性扫描。
[0062]
记录删除索引
[0063]
在实施方式中,当删除记录时,该记录的索引项目可以被标记为已删除。在实施方式中,当执行垃圾回收的操作时,该记录的索引项目可以从索引项目最初或先前所属的索引片段中移除。在实施方式中,在某些情况下,为了让该索引项目所属的索引片段的键空间是连续的,希望维持或保留用于已删除记录的索引项目,这时将使用特殊索引项目(例如,可被称为碑石索引项目(tombstone index entry)来代替已删除记录的初始索引项目或完整索引项目。在实施方式中,这种已删除记录的特殊索引项目(或碑石索引项目)所占用的内存空间可以小于已删除记录的初始索引项目或完整索引项目所占用的内存空间。
[0064]
索引片段格式
[0065]
在实施方式中,根据相应索引片段的子键范围所覆盖的记录的属性(例如,记录的键是否连续或离散、记录的逻辑大小是否固定或变化(和/或相同或不同)、用于存储或包括记录的扇区数量、用于存储或包括记录的扇区是否彼此相邻等),可以开发和使用不同索引片段格式的不同索引片段。通过示例而非限制的方式,下文描述九种不同格式的示例,该示例仅用于说明如何开发索引片段的格式。基于本公开中描述的构思和原理,可以开发和使用本公开中所描述的更多或更少的索引片段格式和/或不同的索引片段格式。此外,在该示例中,扇区被描述为具有扇区大小(例如,大小为4kb)。
[0066]
在实施方式中,记录逻辑大小(即,记录的逻辑大小)可以被划分为多个逻辑大小范围。在实施方式中,记录物理大小(即,记录的物理大小)可以被划分为多个物理大小范围。在实施方式中,扇区跨度也可以被划分为多个扇区跨度范围。索引片段的示例格式的详细信息可以在2021年1月4日提交的,标题为“memory

frugal index design in storage engine”的pct专利申请pct/cn2021/070193中找到,该申请的全部内容通过引用合并于此。
[0067]
例如,当索引片段的子键范围所覆盖的记录键是连续的时,记录的记录逻辑大小小于第一预设大小(例如8mb),记录的记录物理大小小于第二预设大小(例如8mb),并且索
引片段具有属于第四扇区跨度范围的扇区跨度,则格式3可以用于这种索引片段。索引片段的格式3的头(或缩写为format_3头)可以具有预设大小(例如8字节),并且可以包括多个关键字段,包括但不限于:基本扇区id(例如,大小为24位)、组计数(例如,大小为8位)、最大相对扇区id(例如,大小为23位)和第一组项目的偏移量(例如,9位大小)。在实施方式中,组项目(其大小为8字节)可包括字段,例如相对起始偏移量(例如32位)和第一索引项目的片段内偏移量(例如9位大小)。在该示例中,每个组可以覆盖或包括多个索引项目(例如,16个索引项目)。在实施方式中,根据有效位处于字节地址的约定,索引项目(具有7个字节的大小)可以包括,例如,相对扇区id(例如,0~20位,大小为21位)、扇区数(例如,21~31位,大小为11位)、逻辑大小(例如,32~54位,大小为23位)、以及碑石标志(例如,55位,大小为1位,且等于0)。在实施方式中,当相对扇区id和与记录相关联的索引项目的扇区数的组合(大小为4个字节)具有某个值(例如在此示例中为0xfffffffe)时,表明该记录已删除。在实施方式中,用于已删除记录的索引项目或碑石索引项目(例如,大小为3个字节)可以包括,例如,逻辑大小(例如,0至22位,大小为23位)和碑石标志(23位,大小为1位,等于1)。如上所述的格式3的头的预定大小、多个关键字段的各自大小以及多个关键字段的各自位置仅仅代表了示例实施方式,在本公开中不应被解释为限制。在实施方式中,可以基于存储引擎102的提供存储空间和/或被用户(如管理员,等)配置的存储设备的配置和规范来确定格式3的头预设大小、多个关键字段的各自大小以及多个关键字段的各自位置。
[0068]
在本公开中的一些实施方式中,引入了索引片段的附加格式,以进一步减小具有多个固定大小记录的数据设置的csim的大小,并将逻辑上连续的固定大小记录的集合映射到物理上连续的存储位置。
[0069]
在一些实施方式中,当被索引片段的子键范围所覆盖的记录的键是连续的,所述记录的记录逻辑大小相同且大于扇区大小(即,在此示例中为4kb),而且记录是在物理上连续的,新格式,即格式10(或称为固定大小的多记录格式)可用于此类索引片段。数据记录的第一扇区可以以扇区对齐的方式写入(即,将数据记录的物理分区与数据记录的计算机逻辑分区对齐,以促进存储数据记录的存储设备的读和/或写效率)。例如,如果扇区大小为4kb,则数据记录的第一扇区可以以4k扇区对齐的方式写入。索引片段的格式10的头(或缩写为format_10头)具有预设大小(例如12字节),并且可以包括多个关键字段,包括但不限于基本扇区id(例如,大小为22位)、固定逻辑大小(例如,大小为24位)和固定物理大小(例如,大小为24位)。如上所述的format_10头的预定大小、多个关键字段的各自大小以及多个关键字段的各自位置仅仅代表示例实施方式,在本公开中不应被解释为限制。在实施方式中,可以基于存储引擎102的提供存储空间和/或被用户(如管理员等)配置的存储设备的配置和规范来确定format_10的头预设大小、多个关键字段的各自大小以及多个关键字段的各自位置。
[0070]
在实施方式中,根据固定逻辑大小、固定物理大小,可以计算出使用format_10头的索引片段所覆盖记录的物理位置。例如,记录索引可以被计算为:(块逻辑偏移量

基本起始偏移量)/固定逻辑大小)。记录扇区id可以被计算为:基本扇区id (记录索引*固定物理大小)/扇区大小(例如4096字节)。记录偏移量可以被计算为:基本扇区id (记录索引*固定物理大小)%扇区大小,其中%是模运算。记录扇区数可以被计算为:round_up((固定物理大小 记录偏移量)/扇区大小)。
[0071]
在实施方式中,当索引片段的子键范围所覆盖的记录键是连续的,记录的记录逻辑大小是相同的且大于扇区大小(在此示例中为4kb),并且记录(除了删除的记录)是在物理上连续的,新格式,即格式11(或称为固定大小的带有删除记录位图的多记录格式)可用于此类索引片段。数据记录的第一扇区可以以4k扇区对齐的方式写入。索引片段的格式11的头(或缩写为format_11头)具有预设大小(如12字节),并且可以包括多个关键字段,包括但不限于,基本扇区id(例如,大小为22位)、固定逻辑大小(例如,大小为24位)和固定物理大小(例如,大小为24位)。此外,在format_11头之后,可以进一步包含或添加删除记录位图的数组。每个位图项目(例如,大小为8个字节)可以包括多个字段,这些字段可以包括但不限于累计有效记录计数(例如,大小为32位)和有效位图(例如,大小为32位)。所述format_11的头预设大小、多个关键字段的各自大小以及多个关键字段的各自位置仅仅代表示例实施方式,在本公开中不应被解释为限制。在一些实施方式中,可以基于存储引擎102的提供存储空间和/或被用户(如管理员等)配置的存储设备的配置和规范来确定format_11的头预设大小、多个关键字段的各自大小以及多个关键字段的各自位置。
[0072]
在实施方式中,根据固定逻辑大小、固定物理大小和位图状态,可以计算出使用format_11头的索引片段所覆盖记录的物理位置。例如,记录索引可以被计算为:(块逻辑偏移量

基本起始偏移量)/固定逻辑大小)。此外,对于位图地址转换,位图项目索引可以被计算为:记录索引/累计有效记录计数位数(例如,在此示例中为32),并且位图项目位偏移量可以被计算为:记录索引%累计有效记录计数位数(例如,在此示例中为32),其中%为取模运算。有效记录计数可以计算为:累计有效记录计数 有效位计数(直到位图项目的位偏移量)。对于记录地址转换,记录扇区id可以被计算为:基本扇区id (有效记录索引*固定物理大小)/扇区大小(例如4096字节)。记录偏移量可以被计算为:基本扇区id (有效记录索引*固定物理大小)%扇区大小,其中%是取模运算。记录扇区计数可以计算为:round_up((固定物理大小 记录偏移量)/扇区大小)。
[0073]
在实施方式中,进一步为索引片段引入一种新格式,即格式12(或称为固定大小的多记录组格式),它是专门为类似于高性能块存储服务的工作负载而设计的,例如弹性块存储(ebs)等,可以具有固定的记录大小和固定的写入输入/输出(i/o)大小。在实施方式中,使用格式12头(或缩写为format_12头)的索引片段的子键范围所覆盖记录的键是连续的,并且索引片段可以有多个组,每个组有相同数量的记录。此外,每个组中的各自记录在物理上是连续的。数据记录的第一扇区可以以4k扇区对齐的方式写入。format_12头可以具有预设大小(例如16字节),并且可以包括多个关键字段,包括但不限于:基本扇区id(例如,大小为22位)、组记录计数(例如,大小为24位)、固定逻辑大小(例如,大小为24位)和固定物理大小(例如,大小为24位)。此外,在format_12头之后,可以进一步包含或添加数组项目(例如,大小为2个字节),并且可以包括一个或多个字段,这些字段可以包括但不限于相对扇区id(例如,大小为16位)。所述的format_12头的预定大小、多个关键字段的各自大小以及多个关键字段的各自位置仅仅代表了示例实施方式,在本公开中不应被解释为限制。在一些实施方式中,可以基于存储引擎102的提供存储空间和/或被用户(如管理员等)配置的存储设备的配置和规范来确定format_12头的预设大小、多个关键字段的各自大小以及多个关键字段的各自位置。
[0074]
在实施方式中,根据固定逻辑大小、固定物理大小和位图状态,可以计算出使用
format_12头的索引片段所覆盖记录的物理位置。例如,记录索引可以被计算为:(块逻辑偏移量

基本起始偏移量)/固定逻辑大小)。此外,对于索引项目查找,索引项目索引可以被计算为:记录索引/记录计数;并且索引项目偏移量可以被计算为:记录索引%记录计数,其中%是取模运算。相对扇区id可以被计算为:查找索引项目的相对扇区id。对于记录地址转换,记录扇区id可以被计算为:(基本扇区id 相对扇区id) 索引项目偏移量*固定物理大小/扇区大小(例如4096)。记录偏移量可以被计算为:(基本扇区id 相对扇区id) 索引项目偏移量*固定物理大小%扇区大小,其中%是取模运算。记录扇区计数可以被计算为:round_up((固定物理大小 记录偏移量)/扇区大小)。
[0075]
在实施方式中,与使用format_3头的索引片段相比,使用format_10头、format_11头和format_12头中的任一个的索引片段可以消耗更少的内存。例如,使用上述索引配置的示例(例如,扇区大小为4kb等),使用格式3的索引片段对于每条记录的项目需要具有特定位数(例如每个记录,大小为7字节)。另一方面,如果区块段足够大,则使用format_10头的索引片段对于每个记录的项目所需内存量可以忽略不计;如果区块足够大,则使用format_11头的索引片段对于每条记录的项目需要具有特定位数(例如,每个记录2位);另外,使用format_12头的索引片段对于每条记录的项目需要具有特定位数(例如,对于8条记录的典型组,每条记录需要2位)。在此示例中,与format_3相比,对于具有固定大小的多记录组输入/输出(i/o)模式的工作负载,新格式(即format_10、format_11和format_13)可以实现csim元数据大小的成倍减少(例如减少10倍)。
[0076]
地址查询
[0077]
下面采用使用了format_13的示例配置的记录的示例地址查找进行说明。然而,format_13的示例配置不应被解释为对本公开的限制。在该示例中,区块索引片段可以包括4个记录组,即,具有15个记录的g0,其后是具有40个记录的g1、具有8个记录的g2,以及具有32个记录的g3。在该示例中,存储设备112的扇区大小是4096字节,并且使用format_13的区块索引片段头可包括如下表1所示的信息:
[0078][0079]
表1
[0080]
在实施方式中,地址查找可以涉及从区块逻辑偏移量到记录的第一扇区id的数据读取,该记录的第一扇区id包括区块逻辑偏移量处的数据。下面的表2示出了寻找特定记录地址的过程(例如,在此示例中,第51条记录)。
[0081][0082]
表2
[0083]
格式转换
[0084]
在实施方式中,当为了从用户处或垃圾回收添加或附加新记录,索引片段以开放状态累积索引体项目时,可以优先使用一种内存使用量相对较大的格式,这样能够处理带有多种不同范围的记录属性的记录。当添加或附加的更多记录被检查时,可以使用或确定另一种具有较少内存使用量的格式来对这些记录建立索引。在这种情况下,可以将索引片段转换为内存使用量较小的另一种格式。例如,在记录属性具有各种不同范围的同一组记录下,format_3可具有最大的内存消耗量,并且在具有连续键的格式中可以处理这些记录。例如,对于某些具有固定大小的多记录组输入/输出(i/o)模式的工作负载,format_12可以首先用于主机实时写入区块段。此外,在一些实施方式中,在垃圾回收之后,可以将使用format_12头的索引片段转换为使用format_10头的索引片段,以进一步减小元数据的大小。另一个示例中,在删除记录的预设部分(例如5%

10%)之后,可以将使用format_10头
的索引片段转换为使用format_11头的索引片段,以回收已删除记录的存储空间。
[0085]
示例方法
[0086]
图5示出在存储装置中存储数据的示例方法的示意图。通过使用图2所示的系统并使用图3所示的存储设备,图5所示的方法可以在图1的环境中实现,但不一定在图1的环境中实现。为了便于解释,方法500参照图1至图3进行描述。但是,所述方法500可替代地在其他环境和/或使用其他系统实现。
[0087]
方法500被描述为通常情况下的计算机可执行指令。一般情况下,计算机可执行指令可以包括执行特定功能或实现特定抽象数据类型的例行程序、程序、对象、组件、数据结构、过程、模块、功能等。此外,每个示例方法可被解释为逻辑流程图中框的集合,该逻辑流程图表示可以以硬件、软件、固件、或其组合的形式来实现的操作序列。描述方法的顺序不旨在被解释为一种限制,任何数量的描述方法框可以以任何顺序组合来实现该方法或替代方法。另外,在不脱离本文描述的主题的精神和范围的情况下,可以从方法中省略各个框。在软件的环境中,框代表计算机指令,当由一个或多个处理器执行时,计算机指令执行所列举的操作。在硬件的环境中,一些或所有框可以表示执行所列举的操作的专用集成电路(asic)或其他物理组件。
[0088]
参照图5,在步骤502中,存储引擎102可以接收将具有第一数据大小的第一记录存储到存储设备中的写入请求。
[0089]
在一些实施方式中,存储引擎102可以接收将具有相同或不同的数据大小的一个或多个数据存储到存储设备中的写入请求。在实施方式中,一个或多个数据中的每一个可以包括或对应于要存储的数据记录(或简称为记录)。在实施方式中,存储引擎102可以以数据区块(或简称为区块)为单位存储数据。在该示例中,一个或多个数据记录可以与作为特定区块的一部分所存储的数据相对应。在实施方式中,写入请求可以包括附加到该特定区块的多个记录。为了简单起见,在下文中,以存储具有第一数据大小的记录(例如,第一记录)的写入请求为例进行描述。
[0090]
在实施方式中,例如,存储设备(诸如存储设备112)可以包括但不限于仅附加存储设备。如前面的描述中所述,存储设备112可以包括中间写入缓存(如中间写入缓存306)。中间写入缓存306可以被布置为具有预设大小(例如,固定大小或通用大小)并且与多个数据区块对应的缓存项目的集合。作为示例而非限制,当开放新的数据区块以在存储设备112中存储数据时,存储引擎102可以相应地为中间写入缓存306中的数据区块分配空闲缓存项目。在实施方式中,中间写入缓存306被设计用于临时存储大小小于预设数据大小的数据记录。在实施方式中,预设数据大小可以被设置为预设项目大小的预设百分比(例如小于50%的任何百分比)。在实施方式中,每个缓存项目的预设项目大小可以取决于一个或多个因素,包括:如以上描述所述的,例如,在预设时间间隔内接收到的写入请求的实时统计信息、存储设备112的存储特性等。
[0091]
在步骤504中,存储引擎102可以确定第一数据大小是否大于或等于预设数据大小。
[0092]
在实施方式中,存储引擎102在接收到存储第一记录的请求之后,可以确定第一数据大小是否大于或等于预设数据大小。
[0093]
在步骤506中,根据第一数据大小是否大于或等于预设数据大小,存储引擎102可
以将第一记录写入中间写入缓存的缓存项目或存储设备的数据存储区中的一个中。其中,响应于预设条件被满足,将缓存项目中的存储记录写入存储设备的数据存储区。
[0094]
在实施方式中,存储引擎102可能已经为第一记录所属的数据区块分配了缓存项目。根据确定第一数据大小是否大于或等于预定数据大小,存储引擎102可以将第一记录写入中间写入缓存的缓存项目或存储设备的数据存储区之一。在实施方式中,预设条件可以包括但不限于达到预定项目大小的缓存项目中存储记录的总数据大小,或者存储设备发生功率损耗等。
[0095]
在步骤508中,所述存储引擎102可以将所述第一记录写入所述存储设备的数据存储区。
[0096]
在实施方式中,响应于确定第一数据大小大于或等于预设数据大小,存储引擎102可以将第一记录直接写入存储设备112的数据存储区304中。在实施方式中,数据存储区304可以包括或对应于存储设备112的非易失性存储器。
[0097]
在步骤510中,所述存储引擎102可以确定所述缓存项目中的剩余存储空间是否大于所述第一记录的所述第一数据大小。
[0098]
在实施方式中,响应于确定第一数据大小小于预设数据大小,存储引擎102可以进一步确定,为第一记录所属的数据块分配的缓存项目中剩余存储空间是否大于第一记录的第一数据大小。在实施方式中,为第一记录所属的数据块分配的缓存项目可能已经存储了属于该数据区块的一些记录。因此,在尝试将第一记录写入缓存项目之前,存储引擎102可能需要确定缓存项目中是否存在足够的存储空间来存储第一记录。
[0099]
在步骤512中,所述存储引擎102可以将所述第一记录写入所述存储设备的所述中间写入缓存的所述缓存项目中。
[0100]
在实施方式中,响应于确定,为第一记录所属的数据区块分配的缓存项目中剩余存储空间大于第一记录的第一数据大小,存储引擎102可以通过一个或多个访问接口308将第一记录临时写入中间写入缓存的缓存项目中(例如,通过一个或多个访问接口308发送写入命令)。
[0101]
在步骤514中,所述存储引擎102可以将第一记录写入所述存储设备的所述中间写入缓存的所述缓存项目中,并将所述缓存项目中的所述存储记录写入所述存储设备的数据存储区中。
[0102]
在实施方式中,如果为第一记录所属的数据区块分配的缓存项目中剩余存储空间小于第一记录的第一数据大小,则存储引擎102可以先将第一记录分为两部分,即,第一部分和第二部分,第一记录的第一部分的数据大小与缓存项目中剩余存储空间的大小相同。在实施方式中,存储引擎102可以将第一记录的第一部分写入缓存项目。在将第一记录的第一部分写入缓存项目之后,为第一记录所属的数据块分配的缓存项目现在被写满。在这种情况下,存储引擎102可以进一步将该缓存项目内所有存储数据(即,包括第一记录的第一部分的所有存储记录)写入存储设备112的数据存储区304,然后清除或擦除缓存项目中的存储数据,以便将新数据(例如,新记录)写入数据块。例如,由于第一记录的第二部分将被延迟写入,因此存储引擎102可以在缓存项目先前存储的数据被清除并擦除之后,将第一记录的第二部分写入缓存项目。
[0103]
可替代地,如果为第一记录所属的数据块分配的缓存项目中剩余存储空间与第一
记录的第一数据大小相同,则存储引擎102可以将第一记录写入缓存项目,然后将含有第一条记录的已存储记录从缓存项目写入存储设备的数据存储区。存储引擎102可以清除或擦除存储在缓存项目中的所有数据,以允许新数据(例如,新记录)写入数据区块。
[0104]
在步骤516中,所述存储引擎102可以接收分配有所述缓存项目的数据区块的封存请求,并且将所述缓存项目中所述存储记录写入所述存储设备的所述数据存储区中,不管预设条件是否被满足。
[0105]
在实施方式中,存储引擎102可以接收对分配有缓存项目的数据区块的封存请求。在接收到封存请求之后,存储引擎102可以将缓存项目中的存储记录写入存储设备的数据存储区中,而不管预设条件是否被满足。此外,存储引擎102可以释放分配给数据区块的缓存项目,并使释放的缓存项目可被其他新数据区块使用。
[0106]
在实施方式中,存储引擎102可以进一步接收另一个写入请求,要求将具有第二数据大小的第二记录存储到存储设备中。例如,第二记录可以属于第一记录的同一数据块。当然,第二记录可以属于与第一记录的数据区块不同的另一个数据区块。如果第二记录属于与第一记录的数据区块不同的另一个数据区块,则存储引擎102可以对第二记录执行与上述类似的操作(即步骤502

516),将第二条记录存储或写入到存储设备112中。
[0107]
在实施方式中,如果第二记录属于与第一记录的相同数据区块,则存储引擎102可以确定第二记录大小是否小于预设数据大小,并且如上所述重复一个或多个操作。例如,响应于确定第二记录大小小于预定数据大小,存储引擎102可以将第二记录写入中间写入缓存的缓存项目中。
[0108]
在实施方式中,存储引擎102可以确定第二记录大小大于或等于预设数据大小。在这种情况下,在一些实施方式中,存储引擎102可以将缓存区项目中的存储记录从中间写入缓存写入存储设备的存储区域中,然后直接将第二记录写入存储设备的存储区域中。可替代地,在一些实施方式中,存储引擎102可以将第二记录分成两部分,即第一部分和第二部分,第二记录的第一部分的数据大小与缓存项目中剩余存储空间的大小相同。在实施方式中,存储引擎102可以将第二记录的第一部分写入缓存项目。在将第二条记录的第一部分写入缓存项目之后,为第一条记录和第二条记录所属的数据块分配的缓存项目现在已满。在这种情况下,存储引擎102可以进一步将该缓存项目内所有存储数据(即,包括第二记录的第一部分的所有存储记录)写入存储设备112的数据存储区304,然后清除或擦除存储在缓存项目中的数据,以便新数据(例如,新记录)写入数据块。例如,如果第二记录的第二部分小于预设数据大小,则存储引擎102可以将第二记录的第二部分写到已经被清除和擦除的缓存项目中。或者,如果第二记录的第二部分大于或等于预设数据大小,则存储引擎102可以将第二记录的第二部分直接写入存储设备112的数据存储区304中。例如,存储引擎102可以将第二记录的第二部分直接写入紧接在包含第二记录第一部分存储位置(或数据扇区)之后的数据存储区304的存储位置(或数据扇区)。
[0109]
在以上示例中,当第二记录的部分或全部数据写入中间写入缓存的缓存项目之后,响应于确定缓存项目中的存储记录总数据大小达到预设项目大小,存储引擎102可以将存储的记录(包括第一记录和第二记录的部分或全部数据)从中间写入缓存的缓存项目写入存储设备的存储区域。存储引擎102可以清除或擦除存储在缓存项目中的所有数据,以允许新数据(例如,新记录)写入数据区块。
[0110]
在实施方式中,尽管上述方法步骤被描述为以特定顺序执行,但是在一些实施方式中,一些或所有方法步骤可以以其他顺序执行或并行执行。
[0111]
结论
[0112]
尽管已经以特定的结构特征和/或方法行为的语言描述了实施方式,但是应当理解,权利要求书不一定限于所描述的特定特征或行为,而是将特定特征和行为公开为实现所要求保护的主题的示例性形式。附加地或替代地,一些或全部操作可以由一个或多个asics,fpga或其他硬件来实现。
[0113]
使用以下条款可以进一步理解本公开。
[0114]
第1条:一种由计算设备实现的方法,所述方法包括:接收将具有第一数据大小的第一记录存储到存储设备中的第一写入请求;确定所述第一数据大小是否大于或等于预设数据大小;根据所述第一数据大小是否大于或等于所述预设数据大小,将所述第一记录写入中间写入缓存的缓存项目或所述存储设备的数据存储区中的一个,其中,响应于预设条件被满足,将所述缓存项目中的存储记录写入所述存储设备的所述数据存储区。
[0115]
第2条:第1条所述的方法,还包括:确定所述第一数据大小大于或等于所述预设数据大小;以及将所述第一记录直接写入所述存储设备的所述数据存储区。
[0116]
第3条:第1条所述的方法,还包括:确定所述第一数据大小小于所述预设数据大小;以及将所述第一记录临时写入所述中间写入缓存的所述缓存项目。
[0117]
第4条:第1条所述的方法,还包括:接收对特定数据区块的封存请求,所述缓存项目与所述特定数据区块相关联;以及不管是否满足预设条件,将所述缓存项目中的所述存储记录写入到所述存储设备的所述数据存储区中。
[0118]
第5条:第1条所述的方法,其中,所述预定条件包括:所述缓存项目中的所述存储记录的总数据大小达到预设项目大小,或者所述存储设备发生了功率损耗。
[0119]
第6条:第1条所述的方法,还包括:接收将具有第二数据大小的第二记录存储到所述存储设备中的另一写入请求;确定所述第二数据大小小于所述预设数据大小;将所述第二记录写入所述中间写入缓存的所述缓存项目。
[0120]
第7条:第6条所述的方法,还包括:在将所述第二记录写入所述中间写入缓存的所述缓存项目之后,确定所述缓存项目中的所述存储记录的总数据大小达到预设项目大小;以及将所述缓存项目中的所述存储记录从所述中间写入缓存写入所述存储设备的所述存储区域。
[0121]
第8条:第1条所述的方法,还包括:接收将具有第二数据大小的第二记录存储到所述存储设备中的另一写入请求;确定第二数据大小大于或等于预定数据大小;将所述缓存项目中的所述存储记录从所述中间写入缓存写入所述存储设备的所述存储区域中;以及将第二记录直接写入存储设备的存储区域中。
[0122]
第9条:根据第1条所述的方法,其中,所述存储设备包括仅附加存储设备,并且所述数据存储区包括所述仅附加存储设备的非易失性存储器存储部分。
[0123]
第10条:第1条所述的方法,其中,所述中间写入缓存包括多个缓存项目,每个缓存项目具有预设项目大小的储存空间,并与相应数据区块相对应。
[0124]
第11条:一种存储引擎包括:一个或多个处理器;存储器,存储有可执行指令,所述可执行指令在由一个或多个处理器执行时,使所述一个或多个处理器执行如下动作,包括:
接收将具有第一数据大小的第一记录存储到存储设备中的第一写入请求;以及确定所述第一数据大小是否大于或等于预设数据大小;根据所述第一数据大小是否大于或等于所述预设数据大小,将所述第一记录写入中间写入缓存的缓存项目或所述存储设备的数据存储区中的一个,其中,响应于预设条件被满足,将所述缓存项目中的存储记录写入所述存储设备的所述数据存储区。
[0125]
第12条:第11条所述的存储引擎,所述动作还包括:确定所述第一数据大小大于或等于所述预定数据大小;以及将所述第一记录直接写入所述存储设备的所述数据存储区。
[0126]
第13条:第11条所述的存储引擎,所述动作还包括:确定所述第一数据大小小于所述预设数据大小;以及将所述第一记录临时写入所述中间写入缓存的所述缓存项目中。
[0127]
第14条:第11条所述的存储引擎,所述动作还包括:接收对特定数据区块的封存请求,所述缓存项目与所述特定数区据块相关联;以及无论是否满足预设条件,以及将所述缓存项目中的所述存储记录写入所述存储设备的所述数据存储区中。
[0128]
第15条:第11条所述的存储引擎,其中,所述预设条件包括:所述缓存项目中的所述存储记录的总数据大小达到预设项目大小,或者所述存储设备发生了功率损耗。
[0129]
第16条:第11条所述的存储引擎,所述动作还包括:接收将具有第二数据大小的第二记录存储到所述存储设备中的另一写入请求;确定所述第二数据大小小于预设数据大小;以及将所述第二记录写入所述中间写入缓存的所述缓存项目中。
[0130]
第17条:第16条所述的存储引擎,所述动作还包括:在将所述第二记录写入所述中间写入缓存的所述缓存项目之后,确定所述缓存项目中的所述存储记录的总数据大小达到预设项目大小;以及将所述缓存项目中的所述存储记录从所述中间写入缓存写入所述存储设备的所述数据存储区中。
[0131]
第18条:第11条所述的存储引擎,所述动作还包括:接收将具有第二数据大小的第二记录存储到所述存储设备中的另一写入请求;确定所述第二数据大小大于或等于预设数据大小;将所述缓存项目中的所述存储记录从所述中间写入缓存写入所述存储设备的所述数据存储区中;以及将所述第二记录直接写入所述存储设备的所述数据存储区。
[0132]
第19条:第11条所述的存储引擎,其中,所述存储设备包括仅附加存储设备,并且所述数据存储区包括所述仅附加存储设备的非易失性存储器存储部分。
[0133]
第20条:一个或多个计算机可读介质,其上存储有可执行指令,该可执行指令在由一个或多个处理器执行时使一个或多个处理器执行如下动作,包括:接收将具有第一数据大小的第一记录存储到存储设备中的第一写入请求;以及确定所述第一数据大小是否大于或等于预设数据大小;根据所述第一数据大小是否大于或等于所述预设数据大小,将所述第一记录写入中间写入缓存的缓存项目或所述存储设备的数据存储区中的一个,其中,响应于预设条件被满足,将所述缓存项目中的所述存储记录写入所述存储设备的所述数据存储区。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

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

相关文献

  • 日榜
  • 周榜
  • 月榜