用于面向对象存储引擎的数据布局优化的制作方法

文档序号:35104796发布日期:2023-08-10 15:32阅读:104来源:国知局
用于面向对象存储引擎的数据布局优化的制作方法


背景技术:

1、在现有的面向对象的存储系统中,当包括多个记录的对象需要存储在云计算系统中的存储设备(例如,只追加存储设备)时,使用存储引擎将对象写入存储设备。在对象的每个写操作中,存储引擎可以将对象的多个记录中的一个记录写入存储设备。为了管理记录的数据(也称为记录的有效载荷数据),存储引擎需要创建记录头。存储引擎需要首先将记录的记录头写入存储设备,并然后将记录的有效载荷数据写入刚好在记录头末尾(即数据的最后一位)之后的存储位置。

2、换句话说,为了将对象的所有记录写入存储设备,存储引擎需要对多个记录执行多次写操作,并且交替地将对象的多个记录中的每个记录的相应记录头和相应有效载荷数据写入存储设备,直到将对象的多个记录的所有记录头和所有有效载荷数据都写入了存储设备。这种将对象的记录的记录头和有效载荷数据写入存储设备的重复交替操作不仅导致存储引擎用于从存储引擎的存储器中切换并提取对象的记录的记录头和有效载荷数据以进行写入的额外处理时间和功率,而且导致存储引擎和存储设备之间的通信信道的长时间占用,从而降低存储引擎的存储和处理效率。


技术实现思路

0、概述

1、如上所述,在现有技术中,当将对象的记录写入存储设备时,存储引擎需要对这些记录执行多次写操作,并且交替地将该对象的多个记录中的每个记录的相应记录头和相应有效载荷数据写入存储设备,直到将该对象的记录的所有记录头和所有有效载荷数据都写入了存储设备。这种将对象的记录的记录头和有效载荷数据写入存储设备的重复交替操作不仅导致存储引擎用于从存储引擎的存储器中切换并提取对象的记录的记录头和有效载荷数据以进行写入的额外处理时间和功率,而且导致存储引擎和存储设备之间的通信信道的长时间占用,从而降低存储引擎的存储和处理效率。

2、图1示出了用于追加或写入对象的记录的示例数据布局和相关条目列表。图中的箭头表示在箭头尾部的对象与在箭头头部的另一个对象之间(或者从在箭头尾部的对象到在箭头头部的另一个对象)的指示或指向关系。在该示例中,正在或将要写入存储设备的记录的数据布局可以包括为管理记录的有效载荷数据(例如,有效数据)而创建的记录头、记录的有效载荷数据以及填充数据,该填充数据用于在从存储设备读取记录头时确保记录与高速缓存行边界对齐。在将记录从与存储引擎相关联的存储器写入或存储到存储设备的过程中,这三个数据段(即,记录头、有效载荷数据和填充数据)首先需要被分组或链接在一起。为了将这三个数据段分组或链接,需要在存储引擎的存储器中的条目列表(或称为分散-聚集列表)中建立三个单独的索引条目,并使其与数据段相关联(即,这三个数据段中的每一个都有一个索引条目)。在这种情况下,当将记录从存储引擎的存储器写入或存储到存储设备时,存储引擎需要对条目列表进行三次单独的数据访问,以检索记录的数据段(即,记录头、有效载荷数据和填充数据)的三个单独的索引条目,并且需要对存储引擎的存储器进行三次单独的数据访问以获取记录的数据段,以用于传输到存储设备。

3、由于需要建立将每个记录的相应数据段分组或链接的条目列表,所以如果每个记录的相应数据段分散在存储引擎的存储器中,则对每个数据段的数据访问可以是随机访问。此外,由于记录头可能不在存储设备的数据扇区的开头(即,起始偏移为零),所以需要指针来指示或指向数据扇区中的第一记录头,以便允许存储引擎定位第一记录头并搜索数据扇区中的一个或多个记录头,直到在获取所请求的记录的读取过程中找到了所请求的记录。此外,由于记录头在数据扇区中不是连续的,所以需要进行数据填充,使得每个记录头将在高速缓存行边界开始,以优化读取过程中的高速缓存访问。

4、例如,在如图1所示的示例数据布局和相关条目列表100中,将写入5个记录,即记录102、104、106、108和110,其中,相应的数据大小为128字节、512字节、1024字节、3072字节和3148字节。此外,分别为记录102-110创建5个记录头,即记录头112、114、116、118和120。此外,分别为记录102、104、106、108和110设置五条填充数据,即填充数据122、124、126、128和130,并且这些填充数据来自填充数据缓冲器132。在该示例中,条目列表134存储15个索引条目,即索引条目136、138、140、142、144、145、148、150、152、154、156、158、160、162和164,这些索引条目指向记录102、104、106、108和110的相应数据段(即记录头、有效载荷数据和填充数据)。在记录102、104、106、108和110被成功写入存储设备的3个数据扇区166、168和170之后,将指针添加到数据扇区166-170的相应元数据区域172、174和176中,以指示数据扇区166、168和170(如果有的话)中的第一记录的起始位置。

5、本公开描述了示例存储系统。在实现方式中,存储系统可以包括存储引擎和一个或多个存储设备。在实现方式中,存储引擎可以通过网络从客户端设备接收对象的数据。在实现方式中,对象可以包括多个记录。基于多个记录的相应有效载荷数据的大小,存储引擎可以确定如何以及在哪里将多个记录的相应有效载荷数据写入存储设备,例如,需要多少数据扇区来写入或存储多个记录的相应有效载荷数据。在实现方式中,存储引擎可以生成多个记录头,这些记录头用于管理多个记录(或多个记录的对应有效载荷数据)。在实现方式中,记录头可以包括对应记录(或该记录的对应有效载荷数据)的数据大小信息、错误校验信息等。

6、在实现方式中,存储引擎可以生成条目列表(例如,分散-聚集列表),并且生成或添加多个索引条目,这些索引条目在与存储引擎相关联的存储器中存储或指向多个记录和多个记录头的相应存储位置(例如,存储地址)。在实现方式中,存储引擎可以将索引条目分配给多个记录中的一个记录的有效载荷数据的对应部分(其可以是整个部分或局部部分),并将索引条目分配给与多个记录中的一个或多个记录相关联的一组一个或多个记录头。

7、在实现方式中,存储引擎可以从多个记录头中选择与若干个记录相关联的若干个记录头,并将该若干个记录头发送到存储设备(例如,通过从存储引擎的存储器到存储设备的单次数据传输),以使存储设备将该若干个记录头作为一组或整体连续地存储或写入在例如存储设备的数据扇区的开头部分。存储引擎然后可以将与若干个记录头相关联的若干个记录的至少一部分有效载荷数据发送到存储设备,以使存储设备将若干个记录的这部分有效载荷数据写入或存储在该存储设备的数据扇区中紧随该若干个记录头之后的存储位置。在实现方式中,存储引擎或存储设备还可以将存储在数据扇区中的若干个记录中的第一记录(相对于数据扇区的起始地址)的起始偏移记录在数据扇区的特定区域(可以称为元数据区域或带外(oob)区域)中。在实现方式中,数据扇区的元数据区域或oob区域可以位于数据扇区的末尾。

8、在实现方式中,如果仍然存在尚未写入或存储到存储设备中的对象的一些记录的一些记录头和有效载荷数据,则存储引擎可以重复以上操作以将这些剩余的记录头和这些记录的有效载荷数据写入额外的一个或多个数据扇区(例如,与以上数据扇区相邻或紧随其后的数据扇区),直到多个记录头和多个记录成功地或完全地写入或存储在存储设备中。

9、如上所述,存储系统不需要将记录的有效载荷数据写入或存储在与该记录的记录头相邻并紧随其后的存储位置。没有这种约束或限制,存储系统的存储引擎可以通过对存储设备的单次数据传输或单次数据访问,将若干个记录的记录头作为一组或整体写入存储设备的数据扇区,并将记录头连续地存储在数据扇区中,例如,存储在数据扇区的开头部分。存储引擎然后可以将若干个记录的有效载荷数据写入存储设备的数据扇区。这不仅减少了存储引擎用于从存储引擎的存储器中切换并提取对象的记录的记录头和有效载荷数据以进行数据传输和写入的处理时间和功率,而且由于存储引擎和存储设备之间较少的数据传输,而避免或减少了存储引擎和存储设备之间的通信信道的占用,从而提高了存储引擎的存储和处理效率。

10、此外,存储引擎可能需要或生成更少的索引条目,因为例如分散-聚集列表中的单个索引条目可以对应于一组记录头,而不是单个记录头。此外,由于在每个逻辑块的末尾(除了存储多个记录中的最后一个记录的数据扇区的末尾)可以不需要填充数据,因此块存储设备(例如,固态设备等)的存储空间的利用率或使用率增大,并且与现有的存储方法相比,用于写入或存储多个记录的数据扇区的数量可以减少。此外,由于存储系统可以在存储设备的数据扇区中连续存储若干个记录头,因此在读取过程中,这些记录头可以作为一组被一次检索或获取,从而充分利用与存储引擎相关联的一个或多个处理器的高速缓存行能力。

11、在实现方式中,本文描述的由存储系统执行的功能可以由若干个单独的服务或单元来执行。此外,尽管在本文描述的示例中,存储系统可以实现为在单独的实体或设备中实现的软件和硬件的组合,但是在其他示例中,存储系统可以实现和分布为在网络上和/或在云计算架构中在一个或多个计算设备中提供的服务。

12、本技术描述了若干个不同的实施例和实现方式。以下部分描述了适合于实践各种实现方式的示例框架。接下来,本技术描述了用于实现存储系统的示例系统、设备和过程。

13、示例环境

14、图2示出了可用于实现存储系统的示例环境200。环境200可以包括存储系统202和一个或多个存储设备204-1、…、204-n(统称为存储设备204),其中,n是大于或等于1的整数。存储系统202和多个存储设备204可以经由网络206相互传送数据。在该示例中,一个或多个存储设备204被称为包括在存储系统202中。在其他情况下,一个或多个存储设备204可以是外围设备,并且可由存储系统202访问。

15、在该示例中,存储系统202被描述为单独的实体或设备。在其他情况下,存储系统202可以位于或包括在一个或多个客户端设备208-1、…、208-m(统称为客户端设备208)和/或一个或多个服务器210-1、…、210-l(统称为服务器210)中,其中,m和l是大于或等于1的整数。在实现方式中,存储系统202可以包括在包括多个服务器210的数据中心或云计算基础设施中。

16、在实现方式中,一个或多个客户端设备208和一个或多个服务器210中的每一个可以被实现为各种计算设备中的任何一种,而不限于台式计算机、笔记本或便携式计算机、手持设备、上网本、因特网设备、平板或平板计算机、移动设备(例如,移动电话、个人数字助理、智能电话等)、服务器计算机等或其组合。

17、在实现方式中,一个或多个存储设备204中的每一个可以被实现为具有存储器或存储能力的各种设备中的任何一种,而不限于块存储设备、固态设备(ssd)、numa(非一致内存访问)设备、nvme(非易失性快速存储器)设备等。

18、网络206可以是包括一个或多个数据通信线路或信道的数据通信网络,这些数据通信线路或信道通过无线和/或有线连接来连接存储系统202(例如,存储系统202的存储器)和一个或多个存储设备204。有线连接的示例可以包括电载波连接(例如,通信电缆、计算机或通信总线,例如,串行总线、pcie总线或通道等)、光载波连接(例如,光纤连接等)。无线连接可以包括例如wifi连接、其他射频连接(例如,等)等。

19、在实现方式中,存储系统202可以通过网络206从客户端设备(例如,客户端设备208-1)接收包括多个记录的对象的数据。在确定多个记录的相应的各条有效载荷数据被写入至的存储设备(例如,存储设备204-1)的一个或多个数据扇区之后,存储引擎可以为该多个记录生成多个记录头,并且根据本文描述的数据写入方法将该多个记录的多个记录头和相应的各条有效载荷数据写入一个或多个数据扇区。

20、示例存储系统

21、图3更详细地示出了存储系统202。在实现方式中,存储系统202可以包括但不限于一个或多个处理器302、输入/输出(i/o)接口304和/或网络接口306以及存储器308。此外,存储系统202还可以包括存储引擎310、一个或多个存储设备312(例如,一个或多个存储设备204)以及一个或多个数据通信信道314。在实现方式中,存储引擎310可以包括至少一个处理器(例如,处理器302)和存储器(例如,存储器308)。在实现方式中,

22、在实现方式中,存储系统202的一些功能可以使用硬件来实现,硬件例如是asic(即专用集成电路)、fpga(即现场可编程门阵列)和/或其他硬件。在实现方式中,存储系统202可以包括一个或多个计算设备,例如,图1所示的计算设备208,或者可以包括在一个或多个计算设备中。

23、在实现方式中,处理器302可以被配置为执行存储在存储器308中的、和/或从i/o接口304和/或网络接口306接收的指令。在实现方式中,处理器302可以被实现为一个或多个硬件处理器,包括例如微处理器、专用指令集处理器、物理处理单元(ppu)、中央处理单元(cpu)、图形处理单元、数字信号处理器、张量处理单元等。额外地或替代地,本文描述的功能可以至少部分地由一个或多个硬件逻辑组件来执行。例如,但不限于,可以使用的说明性类型的硬件逻辑组件包括现场可编程门阵列(fpga)、专用集成电路(asic)、专用标准产品(assp)、片上系统(soc)、复杂可编程逻辑器件(cpld)等。

24、存储器308可以包括易失性存储器形式的计算机可读介质(或处理器可读介质),例如,随机存取存储器(ram),和/或非易失性存储器,例如,只读存储器(rom)或闪存ram。存储器308是计算机可读介质(或处理器可读介质)的示例。

25、计算机可读介质(或处理器可读介质)可以包括易失性或非易失性类型的可移动或不可移动介质,该介质可以使用任何方法或技术来实现信息的存储。该信息可以包括计算机可读指令(或处理器可读指令)、数据结构、程序模块或其他数据。计算机可读介质(或处理器可读介质)的示例包括但不限于相变存储器(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快速闪存或其他内部存储技术、光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、盒式磁带、磁盘存储或其他磁存储设备、或任何其他非传输介质,这些可以用于存储可由计算设备访问的信息。如本文所定义的,计算机可读介质(或处理器可读介质)不包括任何瞬态介质,例如,经调制的数据信号和载波。

26、在实现方式中,一个或多个数据通信信道314可以包括至少一个或多个数据通信线路或信道,这些数据通信线路或信道通过无线和/或有线连接将存储系统202(例如,存储系统202的存储器308)和一个或多个存储设备312相连接。有线连接的示例可以包括电载波连接(例如,通信电缆、计算机或通信总线,例如,串行总线、pcie总线或通道等)、光载波连接(例如,光纤连接等)。无线连接可以包括例如wifi连接、其他射频连接(例如,等)等。

27、尽管在该示例中,在存储系统202中仅描述了硬件组件,但是在其他情况下,存储系统202还可以包括其他硬件组件和/或其他软件组件,例如,执行存储在存储器308中的指令以用于执行各种操作的程序单元316以及存储应用数据和由存储系统202处理的任务数据的程序数据318。在该示例中,一个或多个存储设备312被描述为包括在存储系统202中。在其他情况下,一个或多个存储设备312可以与存储系统202相关联。例如,一个或多个存储设备312可以是外围设备,并且可被存储系统202的一个或多个组件(例如,存储引擎310)访问。通过示例而非限制的方式,存储引擎310可以通过一个或多个数据通信信道和/或一个或多个数据网络与一个或多个存储设备312传送数据。

28、示例方法

29、图4示出了描绘用于追加或写入对象的记录的另一示例数据布局和相关条目列表的示意图。图中的箭头表示在箭头尾部的对象与在箭头头部的另一个对象之间(或者从在箭头尾部的对象到在箭头头部的另一个对象)的指示或指向关系。图5示出了描绘第一示例数据写入方法的示意图。图6示出了描绘第二示例数据写入方法的示意图。图7示出了描绘示例数据读取方法的示意图。图5至图7的方法可以但并非必须在图1的环境中使用图2的系统和图4的数据布局和相关条目列表来实现。为了便于解释,参考图1、图2和图4描述方法500-700。然而,方法500-700可以替代地在其他环境中和/或使用其他系统来实现。

30、方法500-700是在计算机可执行指令的一般上下文中描述的。通常,计算机可执行指令可以包括执行特定功能或实现特定抽象数据类型的例程、程序、对象、组件、数据结构、过程、模块、函数等。此外,每个示例方法被示出为逻辑流程图中的框的集合,该逻辑流程图表示可以在硬件、软件、固件或其组合中实现的操作序列。描述该方法的顺序并非旨在被解释为限制,并且任何数量的所描述的方法框可以以任何顺序组合,以实现该方法或替代的方法。此外,在不脱离本文所述主题的精神和范围的情况下,可以从该方法中省略各个框。在软件的上下文中,框表示计算机指令,这些计算机指令在由一个或多个处理器执行时执行所述操作。在硬件的上下文中,一些或所有的框可以表示执行所述操作的专用集成电路(asic)或其他物理组件。

31、返回参考图5,在框502,存储引擎310可以从客户端设备接收包括多个记录的数据。

32、在实现方式中,存储系统202或存储引擎310可以经由网络206从客户端设备(例如,该示例中的客户端设备208)接收待存储或写入的数据。在实现方式中,待存储的数据可以包括对象的多个记录。在实现方式中,对象可以包括但不限于数据库对象、文件对象等。在实现方式中,多个记录中的每个记录可以包括相同或不同数据大小的相应有效载荷数据。

33、在框504,存储引擎310可以为多个记录生成多个记录头。

34、在实现方式中,在从客户端设备接收数据之后,存储引擎310可以在将数据写入或存储在存储设备之前执行多个操作。在实现方式中,存储引擎310可以选择或确定数据要被写入或存储到的存储设备。通过示例而非限制的方式,存储引擎310可以随机地或根据预定义的启发式策略(例如,预定义的负载平衡策略)选择或确定数据要被写入或存储到的存储设备。

35、此外,在实现方式中,存储引擎310可以确定数据要被写入或存储到的所选存储设备的一个或多个数据扇区。在实现方式中,存储引擎310可以基于包括在数据中的多个记录的相应数据大小以及存储设备204的每个数据扇区的存储器或存储大小,来确定有多少数据扇区用于写入或存储该多个记录。例如,在图4的示例数据布局和相关条目列表400中,如果说数据包括5个记录(大小为128字节的记录402、大小为512字节的记录404、大小为2024字节的记录406、大小为3072字节的记录408和大小为3148字节的记录410),则存储引擎310可以确定需要2个数据扇区(即,如图4所示的数据扇区412和数据扇区414)来写入或存储数据,在该示例中,假设每个数据扇区具有4096字节或4千字节的存储器大小。显然,如果数据扇区的存储器大小不同和/或包括在要写入或存储的数据中的记录的总大小不同,则用于写入或存储数据的数据扇区的数量将不同。

36、此外,在实现方式中,存储引擎310可以基于多个记录的相应数据大小、存储设备204的数据扇区的存储器大小以及一个或多个记录的相应各条有效载荷数据的一个或多个记录头的数据大小,来确定将在一个或多个数据扇区中的一个数据扇区中写入或存储的多个记录中的一个或多个记录的相应各条有效载荷数据或相应有效载荷数据的部分。

37、例如,在如图4所示的示例中,如果数据扇区的存储器大小是4千字节,并且记录头的数据大小是56字节,则记录402的有效载荷数据的整个部分(即,大小为128字节)、记录404的有效载荷数据的整个部分(即,大小为512字节)、记录406的有效载荷数据的整个部分(即,大小为2024字节)、记录408的有效载荷数据的局部部分408-1(即2308字节)将被写入或存储在数据扇区412中,并且记录408的有效载荷数据的剩余部分408-2(即864字节)和记录410的有效载荷数据的整个部分(即大小为3148字节)将被写入或存储在数据扇区414中。

38、此外,在实现方式中,存储引擎310可以创建或生成多个记录头,数据中包括的多个记录中的每个记录具有一个记录头。在实现方式中,在多个记录头被发送到存储设备204并成功存储在存储设备204中之前,存储引擎310可以将多个记录头临时存储在与存储引擎310相关联的存储器中。在实现方式中,存储引擎310可以在与存储引擎310相关联的存储器中连续地或一起存储多个记录头,以便于一次对多个记录头进行检索和分组。在实现方式中,记录的记录头可以包括至少一个或多个数据字段,该数据字段包括但不限于记录的数据大小的信息等。此外,在一些情况下,记录头的一个或多个数据字段还可以包括错误校验信息(例如,冗余校验码的信息等)、由存储设备204或存储引擎310用来指示是否删除记录的标志等。

39、此外,在实现方式中,存储引擎310还可以创建或建立条目列表(或称为分散-聚集列表),该列表包括用于指向多个记录的多个索引条目和多个记录头中的至少一些,并且将条目列表存储在与存储引擎310相关联的存储器(例如,存储器308)中。在实现方式中,存储引擎310可以以任何数据结构(例如,链表、数组等)创建或设置条目列表,这可以便于从条目列表中搜索或检索索引条目,并且使用条目列表对相关数据段(例如,记录头、记录、填充数据等)进行分组。在实现方式中,存储引擎310可以为要写入或存储在一个或多个数据扇区中的一个数据扇区中的一个或多个记录头创建或生成索引条目(例如,单个条目),并且为要写入或存储在数据扇区中的对应一个或多个记录的有效载荷数据的相应部分(可以是整个部分或局部部分)创建或生成额外的索引条目。

40、例如,在如图4所示的示例中,存储引擎310可以创建或生成多个索引条目416、418、420、422、424、426、428、430和432。在该示例中,存储引擎310可以分配索引条目416,以存储或指向一组记录头(记录头434、436、438和440)的起始存储位置(例如,诸如起始存储地址),该组记录头当前存储在与存储引擎310相关联的存储器(例如,存储器308)中并且等待由存储引擎310写入或存储。在该示例中,该组的记录头434、436、438和440与记录402、404、406和408的有效载荷数据的对应部分相关联。在该示例中,由于数据扇区412的大小限制,只有记录408的有效载荷数据的局部部分408-1写入或存储在数据扇区412中,所以记录头440与记录408的有效载荷数据的这个局部部分408-1相关联。此外,存储引擎310可以分配索引条目418、420、422和424,以存储或指向当前存储在与存储引擎310相关联的存储器中的记录402、404、406和408的有效载荷数据的对应部分的对应起始存储位置。此外,存储引擎310可以分配索引条目426,以存储或指向当前存储在与存储引擎310相关联的存储器中的记录头442的起始存储位置,记录头442与将写入或存储在数据扇区414中的记录410的有效载荷数据的对应部分相关联。此外,存储引擎310可以分配索引条目428和430,以存储或指向当前存储在与存储引擎310相关联的存储器中的记录408和410的有效载荷数据的对应部分(在该示例中,即记录408的有效载荷数据的剩余部分408-2和记录410的有效载荷数据的整个部分)的相应起始存储位置。在该示例中,存储引擎310还可以分配索引条目432,以存储或指向填充数据缓冲器444的起始存储位置,该填充数据缓冲器444被配置为提供出于逻辑块对齐(即,在诸如固态设备的块存储设备的逻辑块中的数据存储的对齐)的目的而在数据扇区的末尾所需的填充数据。

41、在框506,存储引擎310可以将多个记录头中的一组记录头传输或发送到存储设备,以使存储设备将该组记录头连续存储在存储设备的数据扇区中。

42、在实现方式中,在执行如上所述的一个或多个操作之后,存储引擎310可以尝试开始将多个记录的有效载荷数据和多个记录头写入或存储到所选存储设备。在实现方式中,存储引擎310可以读取条目列表,以检索或获取要写入或存储到存储设备204的一个数据扇区中的一组记录头的索引条目。在实现方式中,这组记录头可以包括与多个记录中的一个或多个记录的有效载荷数据的相应部分相对应的一个或多个记录头。例如,在图4所示的示例中,索引条目416存储或指向该组记录头的存储位置,该组记录头可以包括针对记录402、404、406和408的有效载荷数据的对应部分的记录头434、436、438和440。在该示例中,由于数据扇区412的大小限制,记录头440与记录408的有效载荷数据的局部部分相关联。在实现方式中,存储引擎310然后可以基于从条目列表中检索或获取的索引条目,而在与存储引擎310相关联的存储器中定位该组记录头。

43、在实现方式中,在与存储引擎310相关联的存储器中定位该组记录头(例如,基于条目列表中包括的存储地址的信息)之后,存储引擎310可以将该组记录头传输或发送到存储设备204,以使存储设备204将该组记录头连续地写入或存储在存储设备204的对应数据扇区中。在实现方式中,存储引擎310可以将该组记录头作为单个组或经由存储引擎310和存储设备204之间的单次数据传输而传输或发送到存储设备204。在实现方式中,存储引擎310或存储设备204可以在数据扇区的开头部分写入或存储该组记录头。继续图4所示的上述示例,存储引擎310可以将记录头434、436、438和440作为单个组或经由单次数据传输发送到存储设备,以使存储设备将记录头434、436、438和440连续地存储在存储设备的数据扇区412中。

44、在框508,存储引擎310可以将与该组记录头相关联的一个或多个记录的有效载荷数据的子集传输或发送到存储设备,以使存储设备在存储设备的数据扇区中将该一个或多个记录存储在该组记录头之后。

45、在实现方式中,存储引擎310还可以至少部分基于条目列表来定位与该组记录头相关联的一个或多个记录的有效载荷数据的对应部分。在实现方式中,存储引擎310可以读取条目列表以检索或获取相应索引条目,该索引条目存储或指向一个或多个记录的有效载荷数据的对应部分的存储地址的。在实现方式中,这些索引条目可以紧随条目列表中对应于该组记录头的索引条目之后。例如,在图4所示的示例中,索引条目418、420、422和424存储或指向当前存储在与存储引擎310相关联的存储器中的记录402、404、406和408的有效载荷数据的对应部分的起始存储位置。在图4所示的示例中,记录408的有效载荷数据的对应部分仅仅是记录408的有效载荷数据的局部部分,如前面的描述中所述。

46、在实现方式中,在定位一个或多个记录的有效载荷数据的对应部分之后,存储引擎310可以将一个或多个记录的有效载荷数据的对应部分传输或发送到存储设备204,以使存储设备204将或能够将一个或多个记录的有效载荷数据的对应部分写入或存储在存储该组记录头的相同数据扇区中。在实现方式中,存储引擎310或存储设备204可以将一个或多个记录的有效载荷数据的对应部分写入或存储在该数据扇区中紧随该组记录头之后的存储位置。在实现方式中,存储引擎310或存储设备204还可以在数据扇区的扇区元数据区域(或称为带外(oof)区域)中写入或添加指针,该指针存储或指示一个或多个记录中的第一记录(或第一记录的有效载荷数据的对应部分)的起始地址或起始偏移。例如,在如图4所示的示例中,数据扇区412的扇区元数据区域446可以包括指针,该指针存储或指示数据扇区412中的记录402(即,记录402、404、406和408中的第一记录)的有效载荷数据的起始地址或起始偏移。

47、在实现方式中,存储引擎310可以根据如上所述的方法框506和508的操作,继续向存储设备204传输或发送任何剩余记录和任何剩余记录头,以使存储设备204类似地使用前述描述中描述的操作,将剩余记录和剩余记录头写入或存储到存储设备204的另一数据扇区中。例如,在图4所示的示例中,存储引擎310或存储设备204在数据扇区414的开头部分写入或存储记录头442,并且在数据扇区414中紧随记录头442之后写入或存储记录408的有效载荷数据的剩余部分和记录410的有效载荷数据的整个部分。此外,存储引擎310或存储设备204将从填充数据缓冲器444获取的额外的填充数据448写入或存储在数据扇区414的末尾处紧随记录410的有效载荷数据之后。此外,存储引擎310或存储设备204还写入或存储指针,该指针在数据扇区414的扇区元数据区域450中存储或指示第一记录(即,在这种情况下是记录410)的起始地址或起始偏移。

48、在实现方式中,在多个记录头和多个记录被传输或发送到存储设备、并且成功写入或存储在存储设备204中之后,存储引擎310还可以从与存储引擎310相关联的存储器中删除该多个记录头。在实现方式中,存储引擎310还可以删除包括与多个记录头和多个记录相对应的多个索引条目的条目列表,或者清除条目列表以移除与多个记录头和多个记录相对应的多个索引条目。

49、返回参考图6,在框602,存储设备204可以从存储引擎310接收与一个或多个记录相关联的一组记录头。

50、在实现方式中,存储设备204可以从存储引擎310接收指令,以写入或存储数据。在实现方式中,存储设备204可以经由存储引擎310和存储设备104之间的一次数据访问或传输从存储引擎310接收一组记录头。在实现方式中,该组记录头可以包括用于一个或多个记录的有效载荷数据的对应部分的一个或多个记录头(例如,至少两个记录头等)。

51、在框604,存储设备204可以从存储设备204的数据扇区的指定部分连续地存储该组记录头。

52、在实现方式中,响应于从存储引擎310接收该组记录头,存储设备204可以将该组记录头写入或存储到一数据扇区中。在实现方式中,存储设备204可以在数据扇区的指定部分(例如,在数据扇区的开头部分)连续地写入或存储该组记录头中的每个记录头。在实现方式中,如果存在任何新记录的有效载荷数据被写入或存储在数据扇区中,则存储设备204可以确保对应于新记录的该有效载荷数据的记录头被写入或存储在数据扇区的指定部分(例如,开头部分)。否则,存储设备204可以允许或开放数据扇区的指定部分(例如,开头部分)来写入或存储其他数据,例如,一记录的有效载荷数据的剩余部分,该记录的有效载荷数据的一部分已经存储在另一个数据扇区中。在实现方式中,存储引擎310或存储设备204可能先前已经选择或确定了包括用于写入或存储从存储引擎310接收的数据的数据扇区的一个或多个数据扇区。

53、在框606,存储设备204可以从存储引擎310接收一个或多个记录的有效载荷数据。

54、在实现方式中,在成功写入或存储该组记录头之后,存储设备204还可以从存储引擎310接收与该组记录头相关联的一个或多个记录的有效载荷数据的对应部分。

55、在框608,存储设备204可以在存储设备204的数据扇区中从与该组记录头相邻并且紧随其后的存储位置开始存储该一个或多个记录。

56、在实现方式中,在从存储引擎310接收与该组记录头相关联的一个或多个记录的有效载荷数据的对应部分之后,存储设备204可以将与该组记录头相关联的一个或多个记录的有效载荷数据的对应部分写入或存储在存储该组记录头的相同数据扇区中。在实现方式中,存储设备204可以将该一个或多个记录的有效载荷数据的对应部分写入或存储在存储设备204的数据扇区中与该组记录头的末尾相邻并紧随其后的存储位置。

57、在实现方式中,存储设备204还可以将存储在数据扇区中的一个或多个记录当中的第一记录的起始偏移存储在该数据扇区的特定区域(例如,如前面的描述中所述的扇区元数据区域或oob区域)。

58、在一些情况下,存储设备204还可以从存储引擎310接收与额外的一个或多个记录相关联的额外的一个或多个记录头,并然后可以在数据扇区的指定部分(例如,开头部分)写入或存储额外的一个或多个记录头,该指定部分与存储与该组记录头相关联的一个或多个记录的数据扇区相邻并紧随其后。在实现方式中,存储设备204还可以从存储引擎310接收额外的一个或多个记录,并且在存储该额外的一个或多个记录头的数据扇区中将额外的一个或多个记录存储在该额外的一个或多个记录头之后。在实现方式中,根据是否需要填充数据用于数据扇区的块对齐,存储设备204可以或者可以不从存储引擎310接收填充数据。在从存储引擎310接收填充数据的情况下,存储设备204可以将填充数据写入或存储在存储额外的一个或多个记录的数据扇区中与额外的一个或多个记录相邻并紧随其后的存储位置。在实现方式中,存储设备204还可以在存储额外的一个或多个记录的数据扇区的特定区域(例如,扇区元数据区域或oob区域)存储额外的一个或多个记录中的第一记录的起始偏移。

59、返回参考图7,在框702,存储引擎310可以从客户端设备接收获取记录的指令或请求。

60、在实现方式中,存储引擎310可以从客户端设备(例如,客户端设备208)接收指令或请求,以通过网络(例如,网络206)获取记录。在实现方式中,来自客户端设备208的指令或请求可以包括记录的标识信息,例如,用于选择或确定记录的一个或多个标准或条件、记录的文件名、记录的地址信息等。

61、在框704,存储引擎310可以从存储设备中包括待获取的记录的数据扇区获取包括多个连续的记录头的部分数据。

62、在实现方式中,响应于从客户端设备208接收指令或请求,存储引擎310可以确定存储设备的存储有所请求的记录(即,待获取的记录)的数据扇区。在实现方式中,基于包括在指令或请求中的记录的标识信息(用于选择或确定记录的一个或多个标准或条件、记录的文件名或记录的地址信息等),存储引擎310可以确定或定位存储设备(例如,存储设备204)和存储该记录的对应数据扇区。在实现方式中,存储引擎310可以首先从存储设备204中包括待获取的记录的数据扇区中检索或获取包括多个连续的记录头的部分数据。

63、在框706,存储引擎310可以从多个连续的记录头中选择对应于待获取的记录的记录头。

64、在实现方式中,存储引擎310还可以基于待获取的记录的标识信息,从多个连续的记录头中选择或找到对应于待获取的记录的记录头。

65、在框708,存储引擎310可以至少部分基于在对应于待获取的记录的记录头中包括的记录大小,从扇区获取待获取的记录。

66、在实现方式中,存储引擎310可以从存储设备204的数据扇区的特定区域(例如,扇区元数据区域或oob区域)获取元数据。在实现方式中,元数据可以至少包括数据扇区中的第一记录的起始偏移。在实现方式中,如果待获取的记录是第一记录,则从数据扇区中的第一记录的起始偏移开始,存储引擎310可以读取等于记录大小的数据量。

67、替代地,如果待获取的记录不是第一记录,则存储引擎310可以获取在对应于待获取的记录的记录头之前的一个或多个记录头,并且基于第一记录的起始偏移和包括在该一个或多个记录头中的相应的一个或多个记录大小之和来计算扇区中的待获取的记录的起始偏移。在实现方式中,从计算的数据扇区中的待获取的记录的起始偏移开始,存储引擎310然后可以读取与待获取的记录相对应的记录头中包括的记录大小相等的数据量。

68、在实现方式中,待获取的记录可以包括待获取的若干个记录。例如,若干个记录可以存储在相同的数据扇区中,或者存储在物理上或逻辑上彼此相邻或者邻近的数据扇区中。存储引擎310可以通过执行上述方法的操作,或者如果在方法框704获取的连续的记录头已经包括该若干个记录的对应记录头则通过执行方法框706和708,来连续获取该若干个记录。

69、本文描述的任何方法的任何动作可以至少部分地由处理器或其他电子设备基于存储在一个或多个计算机可读介质上的指令来实现。通过示例而非限制的方式,本文描述的任何方法的任何动作可以在一个或多个处理器的控制下实现,该一个或多个处理器配置有可存储在一个或多个计算机可读介质上的可执行指令。

70、结论

71、尽管已经用专用于结构特征和/或方法动作的语言描述了实现方式,但是应该理解,权利要求不必限于所描述的特定特征或动作。相反,这些特定特征和动作是作为实现所要求保护的主题的示例性形式来公开的。额外地或替代地,一些或所有操作可以由一个或多个asics、fpga或其他硬件来实现。

72、使用以下条款可以进一步理解本公开。

73、条款1.一种由存储引擎的一个或多个处理器实现的方法,该方法包括:从客户端设备接收包括多个记录的数据;为多个记录生成多个记录头;将多个记录头中的一组记录头发送到存储设备,以使存储设备将该组记录头连续地存储在存储设备的数据扇区中;以及将与该组记录头相关联的一个或多个记录的有效载荷数据的子集发送到存储设备,以使存储设备在存储设备的数据扇区中将该一个或多个记录存储在该组记录头之后。

74、条款2.根据条款1所述的方法,其中,通过存储引擎和存储设备之间的单次数据传输来执行将多个记录头中的一组记录头发送到存储设备,以使存储设备将该组记录头连续地存储在存储设备的数据扇区中。

75、条款3.根据条款1所述的方法,还包括将多个记录头和多个记录存储在存储引擎的存储器中。

76、条款4.根据条款3所述的方法,还包括:创建包括针对多个记录头和多个记录的多个条目的分散-聚集列表;以及将分散-聚集列表存储在存储引擎的存储器中。

77、条款5.根据条款4所述的方法,还包括:在将该组记录头发送到存储设备之前,至少部分基于分散-聚集列表而在存储引擎的存储器中定位该组记录头;以及在将一个或多个记录发送到存储设备之前,至少部分基于分散-聚集列表而在存储引擎的存储器中定位一个或多个记录。

78、条款6.根据条款5所述的方法,其中,多个记录头和多个记录存储在存储设备的一个或多个扇区中,并且分散-聚集列表还包括包含填充数据缓冲器的起始地址的条目,填充数据缓冲器被配置为在存储设备的一个或多个扇区中的最后一个扇区的末尾提供用于逻辑块对齐的填充数据。

79、条款7.根据条款1所述的方法,其中,为多个记录生成多个记录头是在从客户端设备接收包括多个记录的数据之后执行的。

80、条款8.根据条款1所述的方法,还包括在将多个记录头中的每一个发送到存储设备并且成功存储在存储设备中之前,将多个记录头连续地临时存储在存储引擎的存储器中。

81、条款9.根据条款8所述的方法,还包括在将多个记录头中的每一个发送到存储设备并且成功存储在存储设备中之后,从存储引擎的存储器中删除多个记录头。

82、条款10.一个或多个处理器可读介质,存储可执行指令,该可执行指令在由存储设备的一个或多个处理器执行时使该一个或多个处理器执行动作,该动作包括:从存储引擎接收与多个记录相关联的多个记录头;从存储设备的一扇区的开头部分起连续地存储多个记录头;从存储引擎接收多个记录;以及在存储设备的扇区中,将多个记录存储在该多个记录头之后。

83、条款11.根据条款10所述的一个或多个处理器可读介质,动作还包括:将存储在扇区中的多个记录中的第一记录的起始偏移存储在扇区的特定区域。

84、条款12.根据条款10所述的一个或多个处理器可读介质,动作还包括:从存储引擎接收与额外的一个或多个记录相关联的额外的一个或多个记录头;以及将额外的一个或多个记录头存储在紧随存储多个记录的扇区之后的扇区的开头部分。

85、条款13.根据条款12所述的一个或多个处理器可读介质,动作还包括:从存储引擎接收额外的一个或多个记录;以及在紧随存储多个记录的扇区之后的扇区中,将该额外的一个或多个记录存储在额外的一个或多个记录头之后。

86、条款14.根据条款13所述的一个或多个处理器可读介质,动作还包括:将额外的一个或多个记录中的第一记录的起始偏移存储在紧随存储多个记录的扇区之后的扇区的特定区域。

87、条款15.根据条款13所述的一个或多个处理器可读介质,动作还包括:从存储引擎接收填充数据;以及在紧随存储多个记录的扇区之后的扇区中,将填充数据存储在该额外的一个或多个记录之后。

88、条款16.根据条款10所述的一个或多个处理器可读介质,其中,通过存储引擎与存储设备之间的单次数据传输,从存储引擎接收与多个记录相关联的多个记录头。

89、条款17.一种存储引擎,包括:一个或多个处理器;以及存储可执行指令的存储器,该可执行指令在由一个或多个处理器执行时使一个或多个处理器执行动作,该动作包括:从存储设备中包括待获取的记录的扇区的开头部分获取包括多个连续的记录头的部分数据;从多个连续的记录头中选择对应于待获取的记录的记录头;以及至少部分基于包括在对应于待获取的记录的记录头中的记录大小,从扇区获取该待获取的记录。

90、条款18.根据条款17所述的存储引擎,其中,从扇区获取待获取的记录包括:从存储设备的扇区获取元数据,元数据包括扇区中的第一记录的起始偏移;以及如果待获取的记录是第一记录,则从扇区中的第一记录的起始偏移开始,读取等于记录大小的数据量。

91、条款19.根据条款17所述的存储引擎,其中,从扇区获取待获取的记录包括:从存储设备的扇区获取元数据,元数据包括存储在扇区中的第一记录的起始偏移;获取在对应于待获取的记录的记录头之前的一个或多个记录头;基于第一记录的起始偏移与包括在一个或多个记录头中的相应的一个或多个记录大小之和,计算扇区中的待获取的记录的起始偏移;以及从扇区中的待获取的记录的起始偏移开始,读取与对应于待获取的记录的记录头中包括的记录大小相等的数据量。

92、条款20.根据条款17所述的存储引擎,其中,从多个连续的记录头中选择对应于待获取的记录的记录头包括:基于待获取的记录的标识信息,从多个连续的记录头中找到对应于待获取的记录的记录头。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1