一种元数据存储方法及其设备

文档序号:1815412 发布日期:2021-11-09 浏览:9次 >En<

阅读说明:本技术 一种元数据存储方法及其设备 (Metadata storage method and equipment thereof ) 是由 任仁 王晨 于 2020-06-30 设计创作,主要内容包括:本申请实施例公开了一种元数据存储方法,本方法可以用于存储系统中。本申请实施例方法包括:第一元数据存储单元和第二元数据存储单元,其中第一元数据存储单元的尺寸大于第二元数据存储单元的尺寸,当目标数据的尺寸达到设定阈值时,按照第一元数据存储单元存储目标数据的元数据,或者,当目标数据的尺寸小于设定阈值时,按照第二元数据存储单元存储目标数据的元数据。本申请实施例可以减少存储数据时对应的元数据,节省了存储资源。(The embodiment of the application discloses a metadata storage method which can be used in a storage system. The method in the embodiment of the application comprises the following steps: the storage device includes a first metadata storage unit and a second metadata storage unit, wherein the size of the first metadata storage unit is larger than that of the second metadata storage unit, and when the size of the target data reaches a set threshold, the metadata of the target data is stored according to the first metadata storage unit, or when the size of the target data is smaller than the set threshold, the metadata of the target data is stored according to the second metadata storage unit. According to the embodiment of the application, the corresponding metadata during data storage can be reduced, and the storage resources are saved.)

一种元数据存储方法及其设备

本申请要求于2020年05月06日提交中国专利局、申请号为202010374530.8、申请名称为“数据处理方法、装置以及存储设备”的中国专利申请的优先权,其全部内容通过引用结合在本申请中。

技术领域

本申请实施例涉及计算机技术领域,具体涉及一种元数据存储方法及其设备。

背景技术

在存储系统中,性能和成本是存储系统所追求的关键指标。为了提供丰富的存储特性,数据在存储时都会建立索引关系,索引关系应用于管理用户逻辑数据空间与底层存储池或者存储盘的物理数据空间之间的映射关系。

在建立映射关系时,物理数据空间被划分成若干个固定大小的单元,该单元也称为粒度。每一个粒度的逻辑地址到物理地址的映射,在存储系统中也称之为索引元数据。

在现有的存储系统中,在同一时间段内需要读取大量的数据时,服务器会将需要读取的大量数据拆分成多个固定大小的粒度的数据进行查询或读取,对应的产生了多条索引元数据。大量索引元数据的产生会消耗过多的存储资源,进而影响了数据查询或者读取的效率。

发明内容

本申请实施例提供了一种元数据存储方法及其设备,用于存取元数据时,根据目标数据的尺寸将目标数据的元数据存储到对应的元数据存储单元中,而不需要将目标数据拆分为多个元数据进行存储,节省了存储资源。

本申请实施例第一方面提供了一种元数据存储方法,包括:

存储设备中提供了第一元数据存储单元和第二元数据存储单元,其中第一元数据存储单元的尺寸大于第二元数据存储单元的尺寸,该尺寸可以对应为数据粒度。

当目标数据的尺寸达到设定阈值时,则将目标数据的元数据存储在第一元数据存储单元中,该目标数据表示需要存储在存储设备中的数据。

当目标数据的尺寸小于设定阈值时,则将目标数据的元数据存储在第二元数据存储单元中。

本申请实施例中,根据目标数据的尺寸进而将目标数据的元数据存储在对应的存储单元中,而不需要将目标数据拆分为多个元数据进行存储,节省了存储资源。

可选的,在一种可能的实现方式中,存储设备设置元数据存储单元的尺寸的最大值和最小值。第一元数据存储单元的尺寸位于最小值和最大值之间,且第二元数据存储单元的尺寸也位于最小值和最大值之间。

本申请实施例中,设定了元数据存储单元的尺寸的最大值和最小值,增加了方案的可实现性。

可选地,在一种可能的实现方式中,当首次存储目标数据时,目标数据的尺寸小于设定阈值。之后目标数据被更新,对应的目标数据的尺寸被更新为大于设定阈值时,则存储设备删除第二数据存储单元中目标数据的元数据。并将更新后的目标数据的元数据存储在第一元数据存储单元中。

本申请实施例中,当目标数据的尺寸变大时,则将目标数据的元数据存储在尺寸更大的第一元数据存储单元中,增加了元数据存储的灵活性。

可选地,在一种可能的实现方式中,当首次存储目标数据时,目标数据的尺寸大于设定阈值。之后目标数据被更新,对应的目标数据的尺寸被更新为小于设定阈值时,则存储设备删除第一数据存储单元中目标数据的元数据的差值元数据,该差值元数据表示更新后的目标数据的元数据与目标数据的元数据之间的差值。并将该差值元数据存储在第二元数据存储单元中。

本申请实施例中,当目标数据的尺寸变小时,则将目标数据的元数据的差值元数据存储在第二元数据存储单元中,将不同的元数据进行分类管理,增加了元数据存储的灵活性。

可选地,在一种可能的实现方式中,当存储设备中存在多个第二元数据存储单元,多个第二元数据存储单元中分别存储有不同的目标数据的元数据时,且多个第二元数据存储单元叠加的尺寸小于或者等于第一元数据存储单元的尺寸,则删除多个第二元数据存储单元中的元数据,并且将这些不同的目标数据的元数据存储到第一元数据存储单元中。

本申请实施例中,当多个存储单元分别存着尺寸较小的目标数据的元数据时,可以将这些尺寸较小的目标数据的元数据合并到一个大的元数据存储单元中,提升了元数据存储的灵活性,也节省了元数据的存储资源。

本申请实施例第二方面提供了一种存储设备,包括:

第一元数据存储单元和第二元数据存储单元,其中第一元数据存储单元的尺寸大于第二元数据存储单元的尺寸;

处理单元,用于当目标数据的尺寸达到设定阈值时,按照第一元数据存储单元存储目标数据的元数据;或者

处理单元还用于当目标数据的尺寸小于设定阈值时,按照第二元数据存储单元存储目标数据的元数据。

可选地,存储设备还包括:

设置单元,用于设置元数据存储单元的尺寸的最大值和最小值,第一元数据存储单元的尺寸位于最小值和最大值之间,第二元数据存储单元的尺寸位于最小值和最大值之间。

可选地,当目标数据的尺寸小于设定阈值时,存储设备还包括:

删除单元,用于目标数据的尺寸被更新为大于设定阈值时,删除第二数据存储单元中目标数据的元数据;

处理单元还用于将更新后的目标数据的元数据存储在第一元数据存储单元中。

可选地,当目标数据的尺寸大于设定阈值时,存储设备还包括:

删除单元还用于目标数据的尺寸被更新为小于设定阈值时,删除第一数据存储单元中目标数据的元数据的差值元数据,差值元数据表示更新后的目标数据的元数据与目标数据的元数据之间的差值;

处理单元还用于将差值元数据存储在第二元数据存储单元中。

可选地,当存在多个第二元数据存储单元,多个第二元数据存储单元中分别存储有不同的目标数据的元数据时,且多个第二元数据存储单元叠加的尺寸小于或者等于第一元数据存储单元的尺寸,删除单元还用于删除多个第二元数据存储单元中的元数据;

处理单元还用于将不同的目标数据的元数据存储到第一元数据存储单元中。

本申请实施例第三方面提供了一种存储系统,包括:

第一元数据存储单元,用于执行本申请第一方面的实施方式中第一元数据存储单元所执行的步骤。

第二元数据存储单元,用于执行本申请第一方面的实施方式中第二元数据存储单元所执行的步骤。

本申请实施例第四方面提供一种存储设备,包括:

处理器、存储器以及输入输出接口,该处理器、该存储器与该输入输出接口连接;该存储器,用于存储程序代码;该处理器调用该存储器中的程序代码时执行本申请第一方面实施方式提供的方法。

本申请实施例第五方面提供一种存储介质,需要说明的是,本发的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产口的形式体现出来,该计算机软件产品存储在一个存储介质中,用于储存为上述设备所用的计算机软件指令,其包含用于执行上述第一方面中为元数据存储方法所设计的程序。

该存储介质包括:U盘、移动硬盘、只读存储器(英文缩写ROM,英文全称:Read-OnlyMemory)、随机存取存储器(英文缩写:RAM,英文全称:Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

本申请实施例第六方面提供一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行如本申请第一方面实施方式的方法。

其中,上述任一处提到的处理器,可以是一个通用中央处理器(CentralProcessing Unit,CPU),微处理器,特定应用集成电路(application-specificintegrated circuit,ASIC),或一个或多个用于控制上述第一方面中端口检测的方法的程序执行的集成电路。

从以上技术方案可以看出,本申请实施例具有以下优点:

本申请实施例中,根据目标数据的尺寸进而将目标数据的元数据存储在对应的存储单元中,而不需要将目标数据拆分为多个元数据进行存储,节省了存储资源。

附图说明

图1为本申请实施例提供的元数据存储系统框架示意图;

图2为本申请实施例提供的元数据存储方法一个流程示意图;

图3为本申请实施例提供的元数据存储方法一个场景示意图;

图4为本申请实施例提供的元数据存储方法另一场景示意图;

图5为本申请实施例提供的元数据存储方法另一场景示意图;

图6为本申请实施例提供的元数据存储方法另一场景示意图;

图7为本申请实施例提供的元数据存储方法另一流程示意图;

图8为本申请实施例提供的元数据存储方法另一场景示意图;

图9为本申请实施例提供的元数据存储方法另一场景示意图;

图10为本申请实施例提供的元数据存储方法另一场景示意图;

图11为本申请实施例提供的元数据存储方法另一场景示意图;

图12为本申请实施例提供的存储设备一个结构示意图;

图13为本申请实施例提供的存储设备另一结构示意图。

具体实施方式

本申请实施例提供了一种数据存储方法及其设备,用于在数据存取时,根据第一数据生成对应的第一索引节点,该第一索引节点的数据粒度大于最小数据粒度,因此不需要对应的生成多条对应最小粒度的索引节点,节省了存储资源,从而提升了数据读写的效率。

请参阅图1,为本申请实施例提供的元数据存储系统框架示意图。

本申请实施例提供了一种元数据存储索引框架,该数据存储索引框架包括多个索引节点,不同索引节点之间的对应关系构成了索引树的框架。其中,如图MGTree部分,根索引节点对应的数据粒度最大,一个根索引节点下对应多个子索引节点,不同的子索引节点下再对应更多的子索引节点。在同层的索引节点中,同层的索引节点可以对应不同的数据粒度,也可以对应相同的数据粒度,具体本申请实施例中不做限定。在上下层索引节点的对应关系中,下层索引节点的数据粒度小于上层索引节点对应的数据粒度,即下层索引节点依附于上层索引节点。

其中,在一种可能的实现方式中,最底层的索引节点对应的数据粒度最小,该最小的数据粒度为存储系统预先设置的。其中,最上层的索引节点可以命名为Max Grain,即表示最大数据粒度对应的索引节点,即最上层的索引节点对应为元数据存储单元的尺寸的最大值,最下层的索引节点可以命名为Min Grain,即表示最小数据粒度对应的索引节点,即最下层的索引节点对应为元数据存储单元的尺寸的最小值。

需要说明的是,该MGTree可以单独设置于存储索引系统中,也可以嫁接在已有的存储索引系统中。例如,MGTree可以嫁接与ARTree中。更具体的,MGTree的根索引节点对应于ARTree最下层的一个索引节点。对于ARTree来说,原先索引一个固定的数据块的功能则转变为索引一个MGTree的根索引节点。一个MGTree子索引实例整体,则对应ARTree主索引的一条记录,仍然描述一个固定大小的数据粒度,只是这个数据粒度的大小可以对应设置,例如1MB,2MB等。可以理解的是,在实际应用过程中,该MGTRee还可以嫁接在其他存储索引系统中,例如B+树的存储索引系统中,具体此处不做限定。

该存储索引框架可以应用于存储设备中,例如存储服务器,具有存储功能的终端设备等,具体此处不做限定。

在实际应用过程中,该存储设备可以包括至少一个第一元数据存储单元和至少一个第二元数据存储单元,该元数据存储单元的尺寸即表示数据粒度。元数据存储单元中存储着目标数据的元数据,该元数据即表示索引节点中存储的索引信息,存储单元则对应索引节点。

下面结合图1的存储系统框架,对本申请实施例中的数据存储方法进行描述。

本申请实施例中存储设备对写入数据对应的索引信息的方式包括两种,其中一种是重叠模式,即在写入重复数据对应的索引信息时,根据写入的顺序建立对应的索引节点,且不对之前的索引节点中已经存在的索引信息进行修改。这样在写入数据的时候可以快速的写入相关的索引信息,提升了写入数据时的效率。另外一种是线性模式,即在写入重复数据对应的索引信息时,先修改之前的索引节点中已经存在的索引信息,再建立对应的此次修改的数据的子索引节点,并将此次修改的数据的索引信息保存在该新建立的子索引节点中。线性模式在读取数据时,不需要再重新判断索引信息是否有重复,直接根据索引信息读取相应的数据即可,提升了读取数据的效率。具体的,本申请实施例为两个不同的索引信息建立的方式分别进行描述。

一、重叠模式。

请参阅图2,为本申请实施例提供的数据存储方法一个流程示意图。

在步骤201中,存储设备接收第一写请求。

当终端设备或者其他网络设备需要将数据写入存储设备时,存储设备会接收到第一写请求,该第一写请求用于写入第一数据,即该第一数据为目标数据。

具体的,在一种可能的实现方式中,该第一写请求中包含了待写入的第一数据的数据长度和相关信息。存储设备根据第一写请求中包含的第一数据的数据长度和相关信息为其分配存储地址。

本申请实施例应用的场景有多种,例如在带宽型场景下,终端设备或者其他网络设备会在单位时间内写入大量的数据,例如在1ms的时间内写入256kb或者1mb的数据。则此时的第一写请求要求写入的数据大小为256kb或者1mb。

在步骤202中,存储设备根据第一写请求生成子索引树。

存储设备在获取到第一写请求之后,存储设备根据第一写请求中携带的相关信息生成子索引树,该子索引树为主索引树中的子索引树,该主索引树用于查询存储设备存储的数据。

具体的,该主索引树为存储设备中主要的索引框架。当存储设备获取到第一写请求中待写入的第一数据的数据长度和相关信息之后,存储设备会分配对应的需要写入的地址。存储设备根据对应的地址在主索引树中找到对应的主索引树中的索引节点,并在该索引节点下生成子索树,该子索引树至少包括了一个根节点,该根节点即为MaxGrain。

需要说明的是,不同的子索引树的根节点的数据粒度可以不同,也可以相同,具体根据实际应用过程中的需求进行设置,具体此处不做限定。

在实际应用过程中,当第一写请求请求写入的第一数据的数据粒度大于预先设置的子索引树的根节点的数据粒度时,则分别在主索引树中建立多个子索引树,并将该第一数据分解成多个根节点数据粒度大小的数据,再对应的在各个不同的子索引树中保存该被分解的第一数据。

在步骤203中,存储设备根据子索引树和第一写请求生成第一索引节点。

存储设备在生成子索引树之后,根据子索引树和第一写请求中的相关信息生成第一索引节点,该第一索引节点为子索引树的子节点,第一索引节点记录了第一数据的索引信息,该第一数据的索引信息用于查询第一数据。

具体的,存储设备在生成了子索引树之后,存储设备根据该第一数据的数据长度,确定是否将该第一数据的索引信息记录在子索引树根节点中,即当目标数据的尺寸达到设定阈值时,按照第一元数据存储单元存储目标数据的元数据,此时第一元数据存储单元即为根节点。当第一数据的数据长度等于MaxGrain的数据粒度时,则存储设备将该第一数据的索引信息记录在该根节点内,即该根节点为第一索引节点。若该第一数据的数据长度小于MaxGrain的数据粒度时,即目标数据的尺寸小于设定阈值时,按照第二元数据存储单元存储目标数据的元数据,此时第二元数据存储单元即为根节点下的子索引节点。在该根节点下生成子索引节点,并将该第一数据的索引信息记录在该子索引节点中,即该子索引节点为第一索引节点。

优选的,在一种可能的实现方式中,当第一数据的数据长度大于根节点数据粒度的一半,且小于根节点数据粒度时,则存储设备将该第一数据的索引信息记录在该子索引树中的根节点内。当第一数据的数据长度小于或者等于根节点的数据粒度的一半时,则存储设备在根索引节点下生成一个新的子索引节点,并将该第一数据的索引信息记录在该新的子索引节点中。

需要说明的是,存储设备是根据第一数据的数据长度生成对应的索引信息并存在对应的索引节点之中,而不需要将第一数据拆分成若干个最小数据粒度的数据,并对应的生成最小数据粒度的索引信息。因此节省了存储设备存储索引信息的存储资源。

举例来说,当第一写请求请求写入一个2MB的数据,存储设备在索引树中对应的索引节点下生成子索引树,并将该数据的索引信息记录在根节点下。即该根节点对应的数据粒度为2MB。

在步骤204中,存储设备接收第二写请求。

存储设备保存了第一写请求的索引信息之后,存储设备接收到第二写请求,该第二写请求用于写入第二数据,第二数据写入的逻辑地址属于第一数据的索引信息所在的子索引树的逻辑地址区间内。

在步骤205中,存储设备根据第二写请求和子索引树生成第二索引节点。

当存储设备接收到第二写请求之后,存储设备根据第二写请求和子索引树生成第二索引节点,该第二索引节点中的索引信息用于查询第二数据。

在一种可能的实现方式中,当第二数据为对第一数据进行修改的数据,且第二数据的数据长度小于第一数据的数据长度时,存储设备根据第二写请求中携带的相关信息、子索引树中记录的索引信息和第一索引节点生成第二索引节点,该第二索引节点为第一索引节点的子节点。如图3所示,图3左边的条格从Old至New方向,最下层的条格表示最先写入的第一数据对应的索引信息,最上层的条格表示最后写入的第一数据的修改的数据对应的索引信息。条格从最下面一层到最上面一层,依次表示不同批次的写请求对第一数据的修改数据对应的索引信息,其中,不同的网格条代表着不同的修改数据对应的不同的索引信息。图3右边的树状图中,最上层的节点为根节点,依次往下为该子索引树的子索引节点。

具体的,在一种可能的实现方式中,第二写请求中携带的第二数据的逻辑地址信息指示将第二数据写入第一数据所在的子索引树中,且第二数据的数据长度小于第一数据的数据长度,即表示第二数据为第一数据中进行修改的数据。存储设备在第一数据对应的第一索引节点的下一层建立新的索引节点,即第二索引节点,并将第二数据对应的索引信息保存在该第二索引节点中。在实际应用过程中,第一数据为目标数据,第二数据为更新后的目标数据,设定的阈值为第一数据对应的数据粒度,差值元数据表示第一数据中进行修改的数据对应的索引信息,则更新后的目标数据的尺寸小于设定的阈值,将差值元数据存储在第二元数据存储单元中,该第二元数据存储单元即为第二索引节点。

在一种可能的实现方式中,当第二数据的数据长度大于或者等于第一数据的数据长度时,即表示第二数据覆盖了第一数据。存储设备通过第二数据的逻辑地址信息和查找到的对应于第二数据的逻辑地址信息的子索引树,并确定第二数据为对第一数据进行修改的数据。存储设备查找到对应的第一索引节点之后,将该第一索引节点删除。

当第二数据的数据长度等于第一数据的数据长度时,存储设备在第一索引节点的相同位置生成第二索引节点,或者,存储设备在第一索引节点平行的位置生成第二索引节点,具体此处不做限定。

当第二数据的数据长度大于第一数据的数据长度时,存储设备在第一索引节点的母节点位置生成第二索引节点。其中,在一种可能的实现方式中,生成第二索引节点的位置可以根据第二数据的数据长度确定。例如,当该子索引树从根节点开始,每下降一层代表数据粒度减少一半,该子索引树层高为log2(最大数据粒度/最小数据粒度)。当第一数据的数据长度为根节点数据粒度的四分之一时,则第一数据对应的索引节点在根节点的下两层。若第二数据的数据长度大于第一数据的数据长度,且小于第一数据的数据长度的两倍时,则在该子索引树的第二层生成第二子索引节点,即第一子索引节点的母节点位置。若第二数据的数据长度大于第一数据的数据长度的两倍时,则将第二数据的索引信息写入根节点,即此时第二子索引节点为根节点。在实际应用过程中,第一数据为目标数据,第二数据为更新后的目标数据,设定的阈值为第一数据对应的数据粒度,第一元数据存储单元即为根节点,第二元数据存储单元为子索引节点,则更新后的目标数据的尺寸大于设定的阈值,则删除第二元数据存储单元中目标数据的元数据,并将更新后的目标数据的元数据存储在第一元数据存储单元中。

举例来说,如图4所示,为在重叠模式下,数据对应的索引信息的写入流程。图4中左上方图表示在现有的ARTree的结构。图4中右上方图表示接收到了一个第一写请求,则在对应的ARTree的最下层的索引节点上生成对应的子索引树,并在该根节点的下两层生成第一子索引节点。图4中右下方图表示接收到一个第二写请求,且该第二写请求请求写入数据的数据长度小于第一写请求请求写入的数据的数据长度,则在第一索引节点下层生成一个子索引节点。图4中左下方图表示接收到一个第二写请求,且该第二写请求请求写入数据的数据长度大于或者等于第一写请求请求写入的数据的数据长度,则在第一写请求的母节点生成第二索引节点,并将该第二索引节点下的子索引节点删除。

对应的,存储设备在生成了第二子索引节点之后,存储设备根据第二写请求更新存储设备中存储的第一数据得到第三数据。

在步骤206中,存储设备获取第一读请求。

存储设备获取第一读请求,该第一读请求用于读取第四数据,该第四数据属于第一数据,且第四数据的数据长度小于第一数据的数据长度,即该第四数据为第一数据中的一部分。第一读请求中携带了第四数据的逻辑地址信息和第四数据的数据长度的信息。

在步骤207中,存储设备根据第四数据的逻辑地址信息和第四数据的数据长度从第一数据中读取第四数据。

存储设备获取到第一读请求之后,存储设备根据第一读请求中携带的第四数据的逻辑地址信息和第四数据的数据长度,从第一数据中读取第四数据。

具体的,如图5所示,存储设备从第一读请求中确定第四数据的逻辑地址信息,并根据该逻辑地址信息确定第四数据对应的子索引树。在查找到了对应的子索引树后,存储设备在子索引树中继续查找对应的子索引节点。当第四数据的索引信息存在于第一数据的索引信息对应的第一子索引节点的子索引节点中时,则存储设备根据第一子索引节点的子索引节点提取第四数据。其中,在读取对应的第一子索引节点时,判断该第一子索引节点是否有对应的子索引节点,如图6所示,若存在对应的子索引节点,则需要该第一子索引节点的子索引节点对应的数据也同时读取上来,进而再进行数据的拼接。

当第四数据的索引信息不存在于第一数据的索引信息对应的第一子索引节点的子索引节点中时,如图10所示,存储设备获取第一子索引节点对应的索引信息,并根据第一读请求中逻辑地址和数据长度,计算出相对于第一子索引节点中逻辑地址的偏移量,并根据该相对于第一子索引节点中逻辑地址的偏移量得到物理偏移量,再根据该物理偏移量在第一数据对应的数据块中读取对应的第四数据的数据块。

因此,根据该种方法进行数据的读取,可以做到读取小的数据粒度的数据时,不存在读放大的问题。

在步骤208中,存储设备获取第二读请求。

存储设备获取第二读请求,该第二读请求用于读取第二数据和第三数据,其中,第二数据为第二写请求写入的数据,第三数据为根据第二写请求更新第一数据得到的数据。

在步骤209中,存储设备根据第二读请求查找第一索引节点和第二索引节点。

存储设备获取到第二读请求之后,存储设备根据第二读请求查找第一索引节点和第二索引节点。

具体的,存储设备根据第二读请求中第二数据和第三数据的逻辑地址信息,从主索引树中确定第二数据和第三数据的逻辑地址信息对应的子索引树,在查找到了对应的子索引树后,存储设备在子索引树中继续查找第三数据和第四数据对应的子索引节点。

在步骤210中,存储设备根据第二索引节点更新第一索引节点得到第三索引节点。

存储设备查找到了第一索引节点和第二索引节点之后,存储设备根据第二索引节点中的索引信息,更新第一索引节点得到第三索引节点,该第三索引节点用于查询第三数据。

具体的,存储设备确定的第二索引节点中的索引信息对应的逻辑地址区间和第一索引节点中的索引信息对应的逻辑地址区间有重叠,则存储设备将第一索引节点中的索引信息对应的逻辑地址区间和第二索引节点中的索引信息对应的逻辑地址区间重叠的部分删除,得到一份新的索引信息,即第三索引节点为第一索引节点更新索引信息之后的索引节点。该新的索引信息即对应了第三数据。在实际应用过程中,第一索引节点对应第一元数据存储单元,则删除第一元数据存储单元中目标数据的元数据的差值元数据,该差值元数据即表示更新后的目标数据的元数据与目标数据的元数据之间的差值,即第一索引节点中的索引信息对应的逻辑地址区间和第二索引节点中的索引信息对应的逻辑地址区间重叠的部分。

在步骤211中,存储设备根据第二索引节点和第三索引节点读取第二数据和第三数据。

存储设备在获取到了第三索引节点之后,存储设备根据第三索引节点和第二索引节点从存储设备中读取出第二数据和第三数据。

具体的,存储设备根据第二索引节点中的索引信息中逻辑地址信息与物理地址信息的对应关系,从存储设备中获取对应的第二数据。同理,存储设备从根据第三索引节点中的索引信息的逻辑地址信息与物理地址信息的对应关系,从存储设备中获取对应的第三数据。

在实际应用过程中,如果同样的数据被反复写,则对应的子索引树内会存在大量的子索引节点,增加了索引数据的冗余性。因此,存储设备还可以对子索引树对应的数据进行碎片整理。

具体的,存储设备将子索引树中不连续的数据都提取上来,对应的再作为一个完整数据的写入。因此,不连续的数据对应的多个子索引节点会被之后写入的一个完整数据对应的新的子索引节点覆盖,从而减少了子索引树中的子索引节点的数量,节省了存储资源。

在一种可能的实现方式中,多个第二元数据存储单元对应大量的子索引节点,且该多个元数据存储单元中分别存储有不同的目标数据的元数据时,该多个第二元数据存储单元叠加的尺寸小于或者等于第一元数据存储单元的尺寸,则删除多个第二元数据存储单元中的元数据,并且将不同的目标数据的元数据存储到第一元数据存储单元中,此时该第一元数据存储单元可以对应根节点,也可以对应一个上层的子索引节点。

从整理的时机来看,可以如下表1所示。

表1碎片整理建议表

是否整理
强烈建议
建议
不建议
不建议

其中,读热表示该子索引树中读数据的频率比较高。读冷则表示该子索引树中读数据的频率比较低。写热表示该子索引树中写数据的频率比较高。写冷表示该子索引树中写数据的频率比较低。

当子索引树对应的状态为读热写冷时,则强烈建议对该子索引树进行碎片整理,因为在读热写冷时,表示经常需要根据子索引节点查找对应的数据,且生成或者更新子索引节点的频率比较低,因此如果子索引节点过多时,则会影响查找数据的效率。

当子索引树对应的状态为读冷写冷时,也建议对该子索引树进行碎片整理,因为在读冷写冷时,表示读取数据和写入数据的频率都比较低,此时系统的资源消耗教少,可以进行对应的碎片整理。

当子索引树对应的状态为读热写热时,则不建议对该子索引树进行碎片整理。因为在读热写热时,表示经常需要频繁的写入数据,从而会频繁的生成或者更新子索引节点,因此就算碎片整理完成,也会快速的产生更多的子索引节点。

当子索引树对应的状态为读冷写热时,和读热写热时的原因相同,也不建议对该子索引树进行碎片整理。

在实际应用过程中,步骤204至步骤211为可选步骤。当不执行步骤204至步骤211时,即存储设备只接收到第一写请求,并生成该第一写请求对应的子索引树和对应的子索引节点。

本实施例中,步骤204至205和步骤206至207之间没有先后顺序关系,即可以在接收第二写请求之前获取第一读请求,也可以在接收第二写请求之后获取第一读请求,具体此处不做限定。

本申请实施例中,存储设备根据第一数据生成对应的第一索引节点,且该第一索引节点对应的数据粒度大于最小数据粒度,因此不需要对应的生成多个对应最小粒度的索引节点,节省了存储资源,进而提升了数据读写的效率。

一、线性模式。

请参阅图7,为本申请实施例提供的元数据存储方法另一流程示意图。

在步骤701中,存储设备接收第一写请求。

在步骤702中,存储设备根据第一写请求生成子索引树。

在步骤703中,存储设备根据子索引树和第一写请求生成第一索引节点。

在步骤704中,存储设备接收第二写请求。

本实施例中的步骤701至步骤704与前述图2所示的实施例中的步骤201至204类似,具体此处不再赘述。

在步骤705中,存储设备根据第二写请求和子索引树生成第二索引节点。

接收到第二写请求之后,存储设备根据第二写请求和子索引树生成第二索引节点,该第二索引节点中的索引信息用于查询第二数据。

在一种可能的实现方式中,当第二数据为对第一数据进行修改的数据,且第二数据的数据长度小于第一数据的数据长度时,存储设备根据第二写请求中携带的相关信息、子索引树中记录的索引信息和第一索引节点生成第二索引节点,该第二索引节点为第一索引节点的子节点。如图8所示,图8左边的一个条格记录为一个子索引树的根节点对应的索引信息,其中,该条格中不同的网格格子代表着不同的修改数据对应的不同的索引信息,从上至下,依次表示第一次写入该根节点中的元数据,到最近一次写入根节点的元数据,即每次写入元数据,直接在原来的元数据中进行修改。

具体的,在一种可能的实现方式中,第二写请求中携带的第二数据的逻辑地址信息指示将第二数据写入第一数据所在的子索引树中,且第二数据的数据长度小于第一数据的数据长度,即表示第二数据为第一数据中进行修改的数据。如图8右边的子索引树所示,存储设备对第一数据对应的第一索引节点进行更新得到第三索引节点。具体的,将第一索引节点拆分为两个下层的子索引节点,即第二索引节点和第三索引节点。第二索引节点对应第二数据,第三索引节点对应第一数据中未进行修改的数据。在实际应用过程中,第一数据为目标数据,第二数据为更新后的目标数据,设定的阈值为第一数据对应的数据粒度,差值元数据表示第一数据中进行修改的数据对应的索引信息,则更新后的目标数据的尺寸小于设定的阈值,将差值元数据存储在第二元数据存储单元中,该第二元数据存储单元即为第二索引节点。

需要说明的是,线性模式可以通过如图8左边的链表方式进行元数据的写入,也可以通过图8右边的二叉树模式进行元数据的写入,可以理解的是,在实际应用过程中,还可以通过其他方式写入元数据,例如通过数组的方式写入元数据,具体此处不做限定。

在一种可能的实现方式中,当第二数据的数据长度大于或者等于第一数据的数据长度时,即表示第二数据覆盖了第一数据。存储设备通过第二数据的逻辑地址信息和查找到的对应于第二数据的逻辑地址信息的子索引树,并确定第二数据为对第一数据进行修改的数据。存储设备查找到对应的第一索引节点之后,将该第一索引节点删除。

当第二数据的数据长度等于第一数据的数据长度时,存储设备在第一索引节点的相同位置生成第二索引节点,或者,存储设备在第一索引节点平行的位置生成第二索引节点,具体此处不做限定。

当第二数据的数据长度大于第一数据的数据长度时,存储设备在第一索引节点的母节点位置生成第二索引节点。其中,在一种可能的实现方式中,生成第二索引节点的位置可以根据第二数据的数据长度确定。例如,当该子索引树从根节点开始,每下降一层代表数据粒度减少一半,该子索引树层高为log2(最大数据粒度/最小数据粒度)。当第一数据的数据长度为根节点数据粒度的四分之一时,则第一数据对应的索引节点在根节点的下两层。若第二数据的数据长度大于第一数据的数据长度,且小于第一数据的数据长度的两倍时,则在该子索引树的第二层生成第二子索引节点,即第一子索引节点的母节点位置。若第二数据的数据长度大于第一数据的数据长度的两倍时,则将第二数据的索引信息写入根节点,即此时第二子索引节点为根节点。在实际应用过程中,第一数据为目标数据,第二数据为更新后的目标数据,设定的阈值为第一数据对应的数据粒度,第一元数据存储单元即为根节点,第二元数据存储单元为子索引节点,则更新后的目标数据的尺寸大于设定的阈值,则删除第二元数据存储单元中目标数据的元数据,并将更新后的目标数据的元数据存储在第一元数据存储单元中。

举例来说,如图9所示,为在线性模式下,数据对应的索引信息的写入流程。图4中最上层的条格表示为空白的元数据,该空白的元数据即对应一个子索引树,其中一个数据粒度的小条格即对应一个子索引节点。在接收到一个第一写请求时,将元数据中的两个数据粒度的元数据更新为第一写请求对应的元数据。当接收到一个第二写请求时,且该第二写请求请求写入数据的数据长度小于第一写请求写入的数据的数据长度,则将两个数据粒度的元数据中的其中一个数据粒度更新为第二写请求对应的元数据。当接收到一个第二写请求,且该第二写请求请求写入数据的数据长度大于或者等于第一写请求写入的数据的数据长度,则将之前两个数据粒度的元数据覆盖为第二写请求中携带的第二数据对应的元数据,即此时覆盖的元数据对应第二索引节点。

对应的,存储设备在得到了第二索引节点之后,存储设备根据第二写请求更新存储设备中存储的第一数据得到第三数据。

在步骤706中,存储设备获取第一读请求。

在步骤707中,存储设备根据第三数据的逻辑地址信息和第三数据的数据长度从第一数据中读取第三数据。

在步骤708中,存储设备获取第二读请求。

本实施例中的步骤706至步骤708与前述图2所示的实施例中的步骤206至208类似,具体此处不再赘述。

在步骤709中,存储设备根据第二读请求读取第二数据和第三数据。

存储设备获取到第二读请求之后,存储设备根据第二读请求查找第一索引节点和第二索引节点。

具体的,存储设备根据第二读请求中第二数据和第三数据的逻辑地址信息,从主索引树中确定第二数据和第三数据的逻辑地址信息对应的子索引树,在查找到了对应的子索引树后,存储设备在子索引树中继续查找第二数据和第三数据对应的第二子索引节点和第三子索引节点。

存储设备根据第三索引节点和第二索引节点从存储设备中读取出第二数据和第三数据。

具体的,存储设备根据第二索引节点中的索引信息中逻辑地址信息与物理地址信息的对应关系,从存储设备中获取对应的第二数据。同理,存储设备从根据第三索引节点中的索引信息的逻辑地址信息与物理地址信息的对应关系,从存储设备中获取对应的第三数据。

在实际应用过程中,如果同样的数据被反复写,则对应的子索引树内会存在大量的子索引节点,增加了索引数据的冗余性。因此,存储设备还可以对子索引树对应的数据进行碎片整理。

具体的,如图11所示,存储设备将子索引树中不连续的数据都提取上来,对应的再作为一个完整数据的写入。因此,不连续的数据对应的多个子索引节点会被之后写入的一个完整数据对应的新的子索引节点覆盖,从而减少了子索引树中的子索引节点的数量,节省了存储资源。

在一种可能的实现方式中,多个第二元数据存储单元对应大量的子索引节点,且该多个元数据存储单元中分别存储有不同的目标数据的元数据时,该多个第二元数据存储单元叠加的尺寸小于或者等于第一元数据存储单元的尺寸,则删除多个第二元数据存储单元中的元数据,并且将不同的目标数据的元数据存储到第一元数据存储单元中,此时该第一元数据存储单元可以对应根节点,也可以对应一个上层的子索引节点。

从整理的时机来看,可以如下表1所示。

表1碎片整理建议表

是否整理
强烈建议
建议
不建议
不建议

其中,读热表示该子索引树中读数据的频率比较高。读冷则表示该子索引树中读数据的频率比较低。写热表示该子索引树中写数据的频率比较高。写冷表示该子索引树中写数据的频率比较低。

当子索引树对应的状态为读热写冷时,则强烈建议对该子索引树进行碎片整理,因为在读热写冷时,表示经常需要根据子索引节点查找对应的数据,且生成或者更新子索引节点的频率比较低,因此如果子索引节点过多时,则会影响查找数据的效率。

当子索引树对应的状态为读冷写冷时,也建议对该子索引树进行碎片整理,因为在读冷写冷时,表示读取数据和写入数据的频率都比较低,此时系统的资源消耗教少,可以进行对应的碎片整理。

当子索引树对应的状态为读热写热时,则不建议对该子索引树进行碎片整理。因为在读热写热时,表示经常需要频繁的写入数据,从而会频繁的生成或者更新子索引节点,因此就算碎片整理完成,也会快速的产生更多的子索引节点。

当子索引树对应的状态为读冷写热时,和读热写热时的原因相同,也不建议对该子索引树进行碎片整理。

在实际应用过程中,步骤704至步骤709为可选步骤。当不执行步骤704至步骤709时,即存储设备只接收到第一写请求,并生成该第一写请求对应的子索引树和对应的子索引节点。

本实施例中,步骤704至705和步骤706至707之间没有先后顺序关系,即可以在接收第二写请求之前获取第一读请求,也可以在接收第二写请求之后获取第一读请求,具体此处不做限定。

本实施例中,存储设备根据线性模式进行存取对应的元数据,减少了元数据的冗余,从而节省了存储资源。

上面对本申请实施例中的元数据存储方法进行了描述,下面对本申请实施例中的存储设备进行描述。

请参阅图12,为本申请实施例提供的存储设备一个结构示意图。

一种存储设备,包括:

第一元数据存储单元1202和第二元数据存储单元1203,其中第一元数据存储单元1202的尺寸大于第二元数据存储单元1203的尺寸;

处理单元1201,用于当目标数据的尺寸达到设定阈值时,按照第一元数据存储单元1202存储目标数据的元数据;或者

处理单元1201还用于当目标数据的尺寸小于设定阈值时,按照第二元数据存储单元1203存储目标数据的元数据。

本实施例中,存储设备各单元所执行的操作与前述图2和图7所示实施例描述的类似,具体此处不再赘述。

请参阅图13,为本申请实施例提供的存储设备另一结构示意图。

一种存储设备,包括:

第一元数据存储单元1302和第二元数据存储单元1303,其中第一元数据存储单元1302的尺寸大于第二元数据存储单元1303的尺寸;

处理单元1301,用于当目标数据的尺寸达到设定阈值时,按照第一元数据存储单元1302存储目标数据的元数据;或者

处理单元1301还用于当目标数据的尺寸小于设定阈值时,按照第二元数据存储单元1303存储目标数据的元数据。

可选地,存储设备还包括:

设置单元1304,用于设置元数据存储单元的尺寸的最大值和最小值,第一元数据存储单元1302的尺寸位于最小值和最大值之间,第二元数据存储单元1303的尺寸位于最小值和最大值之间。

可选地,当目标数据的尺寸小于设定阈值时,存储设备还包括:

删除单元1305,用于目标数据的尺寸被更新为大于设定阈值时,删除第二数据存储单元1303中目标数据的元数据;

处理单元1301还用于将更新后的目标数据的元数据存储在第一元数据存储单元1302中。

可选地,当目标数据的尺寸大于设定阈值时,存储设备还包括:

删除单元1305还用于目标数据的尺寸被更新为小于设定阈值时,删除第一数据存储单元1302中目标数据的元数据的差值元数据,差值元数据表示更新后的目标数据的元数据与目标数据的元数据之间的差值;

处理单元1301还用于将差值元数据存储在第二元数据存储单元1303中。

可选地,当存在多个第二元数据存储单元1303,多个第二元数据存储单元1303中分别存储有不同的目标数据的元数据时,且多个第二元数据存储单元1303叠加的尺寸小于或者等于第一元数据存储单元1302的尺寸,删除单元1305还用于删除多个第二元数据存储单元1303中的元数据;

处理单元1301还用于将不同的目标数据的元数据存储到第一元数据存储单元1302中。

本实施例中,存储设备各单元所执行的操作与前述图2和图7所示实施例描述的类似,具体此处不再赘述。

本申请实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被计算机执行时实现上述任一方法实施例中与存储设备所执行的方法流程。对应的,该计算机可以为上述存储设备。

应理解,本申请以上实施例中的提及的控制器或处理器,可以是中央处理单元(central processing unit,CPU),还可以是其他通用处理器、数字信号处理器(digitalsignal processor,DSP)、专用集成电路(application specific integrated circuit,ASIC)、现成可编程门阵列(field programmable gate array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等中的一种或多种的组合。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

还应理解,本申请中以上实施例中的存储设备中的处理器或控制器的数量可以是一个,也可以是多个,可以根据实际应用场景调整,此处仅仅是示例性说明,并不作限定。本申请实施例中的存储器的数量可以是一个,也可以是多个,可以根据实际应用场景调整,此处仅仅是示例性说明,并不作限定。

还应理解,本申请实施例中以上实施例中的存储设备等中提及的存储器或可读存储介质等,可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(read-only memory,ROM)、可编程只读存储器(programmable ROM,PROM)、可擦除可编程只读存储器(erasable PROM,EPROM)、电可擦除可编程只读存储器(electrically EPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(random access memory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(static RAM,SRAM)、动态随机存取存储器(dynamic RAM,DRAM)、同步动态随机存取存储器(synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(double data rate SDRAM,DDR SDRAM)、增强型同步动态随机存取存储器(enhanced SDRAM,ESDRAM)、同步连接动态随机存取存储器(synchlinkDRAM,SLDRAM)和直接内存总线随机存取存储器(direct rambus RAM,DR RAM)。

本领域普通技术人员可以理解实现上述实施例的全部或部分由存储设备或者处理器执行的步骤可以通过硬件或程序来指令相关的硬件完成。程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,随机接入存储器等。具体地,例如:上述处理单元或处理器可以是中央处理器,通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。上述的这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

当使用软件实现时,上述实施例描述的方法步骤可以全部或部分地以计算机程序产品的形式实现。计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本申请实施例的流程或功能。计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质等。

本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的术语在适当情况下可以互换,这仅仅是描述本申请的实施例中对相同属性的对象在描述时所采用的区分方式。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,以便包含一系列单元的过程、方法、系统、产品或设备不必限于那些单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它单元。

在本申请实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本申请实施例中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,在本申请的描述中,除非另有说明,“/”表示前后关联的对象是一种“或”的关系,例如,A/B可以表示A或B;本申请中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况,其中A,B可以是单数或者复数。

取决于语境,如在此所使用的词语“如果”或“若”可以被解释成为“在……时”或“当……时”或“响应于确定”或“响应于检测”。类似地,取决于语境,短语“如果确定”或“如果检测(陈述的条件或事件)”可以被解释成为“当确定时”或“响应于确定”或“当检测(陈述的条件或事件)时”或“响应于检测(陈述的条件或事件)”。

以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。

28页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:保持非易失性存储器装置中的一致写入延迟

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类