掌桥专利:专业的专利平台
掌桥专利
首页

数据处理方法及装置

文献发布时间:2023-06-19 18:53:06


数据处理方法及装置

技术领域

本申请涉及数据存储领域,尤其涉及一种数据处理方法及装置。

背景技术

目前,一个存储系统中通常可以包括多个存储节点。以集中式存储系统为例,一个存储系统中可以包括多个硬盘或硬盘框,其中一个硬盘或硬盘框可以作为一个存储节点;以分布式存储系统为例,一个存储系统可以包括多个存储服务器,其中一个存储服务器可以作为一个存储节点。

为了保证存储系统的数据可靠性,在向存储系统写入数据的过程中,通常会在写入数据积累到一定大小后,按照预设大小将写入数据分为多个数据分片,并生成该多个数据分片的校验分片,然后再将这些数据分片和校验分片分别写入不同的存储节点,进行持久化存储。然而,这样一来会造成存储节点上读/写数据消耗资源较多的问题。

发明内容

本申请提供一种数据处理方法及装置,解决了存储系统中读/写数据消耗资源较多的问题。

为达到上述目的,本申请采用如下技术方案:

第一方面,提供一种数据处理方法,该方法包括:获取写请求;写请求中携带第一数据。根据第一数据的大小,选择存储第一数据的分条。将第一数据存储到分条的数据分片对应的一个存储节点。其中,根据第一数据的大小,确定存储第一数据的分条包括:根据第一数据的大小,从具有不同分片大小的分条中选择一个分片大小不小于第一数据大小的分条;或者,根据第一数据的大小,选择数据分片位于一个存储节点的多个分条。

通过上述方法,可以将单次写请求中携带的第一数据,存储到同一存储节点中。从而可以在单个存储节点上完成上述第一数据的读/写操作,降低数据读写时的资源消耗。具体的,一方面,上述方法中可以根据第一数据的大小,从不同分片大小的分条中,选择能够将第一数据承载在一个分片中(即分片大小不小于第一数据大小)的分条,进而将第一数据存储在该分条的一个数据分片中,从而达到将第一数据存储在同一存储节点的目的。另一方面,上述方法中还可以根据第一数据的大小,选择多个分条,进而将第一数据存储到该多个分条对应的数据分片中位于同一存储节点的数据分片中,从而达到将第一数据存储在同一存储节点的目的。

在一种可能的设计中,具有不同分片大小的分条中,各分条的分片大小为存储系统中逻辑块组的条带单元大小的整数倍。

上述设计中,考虑到在将数据写入硬盘区域的过程中,通常是以逻辑块组中的条带单元为一次数据读写的最小单元。因此,采用按照条带单元的大小的整数倍来划分分片中分片的大小,从而可以便于数据的读写。

在一种可能的设计中,该方法还包括:确定已存储在存储系统中的与第一数据相关联的第二数据。上述将第一数据存储到分条的数据分片对应的一个存储节点中,包括:将第一数据存储到分条的数据分片对应的存储有第二数据的一个存储节点中。

通过上述设计,本申请可以选择已经存储有与第一数据相关联的数据(即目标数据)的存储节点,来存储第一数据。这样一来,当需要一并读取目标数据和第一数据,则仅通过一个存储节点的读操作,即可完成数据读取。

在一种可能的设计中,该方法还包括:获取垃圾收集GC指令。GC指令用于指示回收逻辑块组。根据GC指令,并行对逻辑块组中的逻辑块上的数据进行迁移。在逻辑块组中的逻辑块上的有效数据迁移完成后,释放逻辑块组。

上述设计中,考虑到在采用将单次IO请求对应的数据存在同一存储节点的这种方式下,一方面从逻辑块组侧来看一个IO请求对应的数据所属的条带单元可能不是连续的,另一方面从逻辑块组下层的逻辑盘侧来看,一个IO请求对应的数据可以是连续的。因此,在对逻辑块组进行GC过程中,可以通过并行对多个逻辑块上的有效数据进行迁移,例如可以通过执行多个进程其中各进程用于对逻辑块组中一个数据块上的数据进行迁移。这样可以避免在进行数据迁移过程中在多个逻辑盘之间来回切换以读取有效数据,从而降低资源开销。

在一种可能的设计中,该方法还包括:获取读请求。读请求中携带有第一数据的标识。根据第一数据的标识,确定第一数据在存储系统的逻辑块组中的第一起始位和第一数据长度。根据第一起始位和第一数据长度,确定逻辑块组中从第一起始位开始的属于同一存储节点的多段存储空间,多段存储空间的数据长度之和为第一数据长度。读取多个条带中的数据,得到该第一数据。

在上述设计中,一方面,考虑到相关技术中,通常采用根据待读取数据在逻辑块组中的起始位和数据长度,从逻辑块组中读取从该起始位开始并且长度为上述数据长度的连续多个条带单元的方式,来读取待读取数据。另一方面,在本申请采用将单次IO请求对应的数据存储在同一存储节点的这种方式下,从逻辑块组侧来看,数据所属的存储空间可能不是连续的,因此可能无法根据待读取数据在逻辑块组中的起始位和数据长度直接读取该数据。进而,本设计中,在获取读取第一数据的读请求后,通过先确定第一数据在逻辑块组中的起始位(即第一起始位)和数据长度(即第一数据长度),再根据第一起始位和第一数据长度,确定逻辑块组中属于同一存储节点的多段存储空间(例如,这多段存储空间可以是逻辑块中多个连续的条带单元。这些条带单元在逻辑块组中可以不是连续的)。进而通过读取多段存储空间中数据,便可以得到第一数据。

在一种可能的设计中,上述存储节点可以为硬盘、硬盘框或存储服务器中任一种。

第二方面,提供一种数据处理装置,包括:获取单元,用于获取写请求。该写请求中携带第一数据。处理单元,用于根据第一数据的大小,选择存储第一数据的分条。读写单元,用于将第一数据存储到分条的数据分片对应的一个存储节点。其中,根据第一数据的大小,确定存储第一数据的分条包括:根据第一数据的大小,从具有不同分片大小的分条中选择一个分片大小不小于第一数据大小的分条;或者,根据第一数据的大小,选择数据分片位于一个存储节点的多个分条。

在一种可能的设计中,具有不同分片大小的分条中,各分条的分片大小为存储系统中逻辑块组的条带单元大小的整数倍。

在一种可能的设计中,处理单元,还用于确定已存储在存储系统中的与第一数据相关联的第二数据。读写单元,用于将第一数据存储到分条的数据分片对应的一个存储节点,包括:读写单元,用于将第一数据存储到分条的数据分片对应的存储有第二数据的一个存储节点中。

在一种可能的设计中,处理单元,还用于获取垃圾收集GC指令;GC指令用于指示回收逻辑块组。处理单元,还用于根据GC指令,并行对逻辑块组中的逻辑块上的数据进行迁移。读写单元,还用于在逻辑块组中的逻辑块上的有效数据迁移完成后,释放逻辑块组。

在一种可能的设计中,获取单元,还用于获取读请求。该读请求中携带有第一数据的标识。处理单元,还用于根据第一数据的标识,确定第一数据在存储系统的逻辑块组中的第一起始位和第一数据长度。处理单元,还用于根据第一起始位和第一数据长度,确定逻辑块组中从第一起始位开始的属于同一存储节点的多段存储空间,多段存储空间的数据长度之和为第一数据长度。读写单元,还用于读取多个条带中的数据,得到第一数据。

在一种可能的设计中,上述存储节点为硬盘、硬盘框或存储服务器中任一种。

第三方面,提供一种存储设备,包括存储器和处理器,存储器用于存储计算机指令,处理器用于从存储器中调用并运行计算机指令,以实现如上述第一方面或第一方面中各设计中任一项的方法。

第四方面,提供一种存储系统,包括控制器和多个存储节点,多个存储节点用于存储数据,控制器用于执行如上述第一方面或第一方面中各设计中任一项的方法。

第五方面,提供一种存储系统,包括多个存储服务器,多个存储服务器用于存储数据,多个存储服务器中的一个或多个服务器用于执行如上述第一方面或第一方面中各设计中任一项的方法。

第六方面,提供一种芯片,包括存储器和处理器,存储器用于存储计算机指令,处理器用于从存储器中调用并运行计算机指令,以实现如上述第一方面或第一方面中各设计中任一项的方法。

第七方面,提供一种计算机可读存储介质,该存储介质中存储有计算机程序,当计算机程序被处理器执行时,实现如上述第一方面或第一方面中各设计中任一项的方法。

第八方面,提供一种计算机程序产品,计算机程序产品包括指令,当指令在处理器上运行时,实现如上述第一方面或第一方面中各设计中任一项的方法。

上述第二方面至第八方面的有益效果可以参加第一方面和第一方面中各设计的有益效果,在此不再赘述。

附图说明

图1为本申请提供的一种存储系统的结构示意图;

图2为本申请提供的一种逻辑块组的结构示意图之一;

图3为本申请提供的一种逻辑块组的结构示意图之二;

图4为本申请提供的一种数据处理方法的流程示意图之一;

图5为本申请提供的一种数据处理方法的流程示意图之二;

图6为本申请提供的一种数据处理方法的流程示意图之三;

图7为本申请提供的一种数据处理方法的流程示意图之四;

图8为本申请提供的一种数据处理方法的流程示意图之五;

图9为本申请提供的一种数据处理装置的结构示意图;

图10为本申请提供的一种芯片的结构示意图。

具体实施方式

下面将结合本实施例中的附图,对本实施例中的技术方案进行描述。其中,为了便于清楚描述本实施例的技术方案,在本申请的实施例中,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分。本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定,并且“第一”、“第二”等字样也并不限定一定不同。同时,在本实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念,便于理解。

为了便于理解本实施例,首先对本实施例所提供技术方案的应用场景进行介绍:

示例性的,图1所示为本实施例提供的一种存储系统的结构示意图。在图1所示应用场景中,可以通过运行应用程序来存取存储系统120中的用户数据。其中,运行应用程序的计算机可以称为“应用服务器”、应用服务器100可以是物理机也可以是虚拟机。应用服务器100包括但不限于桌面电脑、服务器、笔记本电脑以及移动设备。应用服务器通过交换机110访问存储系统120以存取用户数据。然而,交换机110只是一个可选设备,应用服务器100也可以直接通过网络与存储系统120通信。或者,交换机110也可以替换成以太网交换机、InfiniBand交换机、RoCE(RDMA over Converged Ethernet)交换机等。

存储系统120为用于存储用户数据的设备或设备集群。具体的,在实际应用过程中,存储系统120可以为集中式存储系统。集中式存储系统的特点是由一个统一的入口,所有从外部设备如应用服务器来的数据都要经过这个入口。

如图1所示,集中式存储系统的入口具体可以是集中式存储系统的引擎121。其中,引擎121中可以包括一个或多个控制器,图1中以一个控制器122为例进行说明。另外,当引擎121中有多个控制器时,可以通过镜像通道的方式使多个控制器互为备份,当其中一个控制器发生故障时,其他控制器可以接管该故障控制器的业务,从而避免硬件故障导致整个存储系统的不可用。

另外,引擎121中还可以包含前端接口125和后端接口126,其中前端接口125用于与应用服务器100通信,从而为应用服务器100提供存储服务。后端接口126用于与硬盘127通信,以扩充存储系统的容量。通过后端接口126,引擎121可以连接更多的硬盘127,从而形成一个非常大的存储资源池。

另外,在控制器122内,可以包括处理器123、内存124。处理器112可以为一个中央处理器(central processing unit,CPU),用于处理来自存储系统外部(如应用服务器或其他存储系统)的数据访问请求,也用于处理存储系统内部发生的请求。示例性的,CPU 123通过前端接口125接收应用服务器100发送的写数据请求时,会将这些写数据请求中的用户数据暂时保存在内存124中。当内存124中的用户数据总量达到一定阈值时,CPU 123通过后端接口将内存124中存储的用户数据发送至硬盘127进行持久化存储。

内存124是用于与处理器直接交换数据的内部存储器,它可以随时读写数据,而且读写速度快,可以作为操作系统或其他正在运行中的程序的临时数据存储器。其中内存124可以包括多种存储器,例如内存既可以是随机存取存储器,也可以是只读存储器(ReadOnly Memory,ROM)。举例来说,随机存取存储器是动态随机存取存储器(Dynamic RandomAccess Memory,DRAM)或者存储级存储器(Storage Class Memory,SCM)。DRAM是一种半导体存储器,与大部分随机存取存储器(Random Access Memory,RAM)一样,属于一种易失性存储器(volatile memory)设备。SCM是一种同时结合传统存储装置和存储器特性的复合型存储技术,SCM能够提供比硬盘更快的读写速度,但存取速度上比DRAM慢,在成本上也比DRAM更便宜。然而,DRAM和SCM在本实施例中指示示例性的说明,内存还可以包括其他随机存取存储器,例如静态随机存取存储器(Static Random Access Memory,SRAM)等。而对于只读存储器,举例来说,可以是可编程只读存储器(Programmable Read Only Memory,PROM)、可抹除可编程只读存储器(Erasable Programmable Read Only Memory,EPROM)等。另外,内存124还可以是双列直插式存储器模块或双线存储器模块(Dual In-line MemoryModule,简称DIMM),即由DRAM组成的模块,还可以是固态硬盘(Solid State Disk,SSD)。实际应用中,控制器122中可配置多个内存124,以及不同类型的内存124。本实施例不对内存124的数量和类型进行限定。此外,可对内存124进行配置使其具有保电功能。保电功能是指系统发生掉电又重新上电时,内存124中存储的数据也不会丢失。具有保电功能的内存被称为非易失性存储器。

需要说明的是,图1中只示出了一个引擎121,然而在实际应用中,存储系统中可包含两个或两个以上引擎121,多个引擎121之间做冗余或者负载均衡。另外,在一种实现方式中,引擎121还可以包括硬盘槽位,这种情况下硬盘127可以直接部署在引擎121中,后端接口126属于可选配置,当系统的存储空间不足时,可以通过后端接口126连接更多的硬盘或硬盘框。

另外需要说明的是,图1仅示例性的提供了一种集中式存储系统的结构示意图。在另一些应用场景中,存储系统120可以由多个独立的存储服务器构成,其中存储服务器之间可以相互通信。其中,各存储服务器可以分别包括处理器、内存、网卡和硬盘等硬件部件。其中,处理器与内存用于提供计算资源;处理器用于处理来自存储服务器外的数据访问请求;内存用于与处理器直接交换数据的内部存储器,它可以随时读写数据,而且速度很快,可以作为操作系统或其他正在运行中的程序的临时数据存储器。硬盘用于提供存储资源,例如存储数据,它可以是磁盘或其他类型的存储介质,例如固态硬盘或叠瓦式磁记录硬盘等。另外,存储服务器中还可以包括用于与应用服务器通信的网卡。容易理解的,本实施例对于应用本申请所提供技术方案的存储系统的框架结构可以不做限制。

另外,从存储系统内部的逻辑层结构来讲,如图1所示,存储系统120所包括的硬盘(如图中的多个硬盘127)所提供的存储空间的实际地址可以不直接暴露给应用服务器100使用。

进一步,如图1中,每个硬盘可以被划分为若干个物理块(chunk),这些物理chunk映射成逻辑chunk从而构成一个存储池(pool),存储池用于向上提供存储空间,该存储空间实际来源于存储系统所包含的硬盘。当然,并非所有硬盘都提供空间给上述存储池。在实际应用中,存储系统中可包含一个或多个存储池,一个存储池可以包括部分或全部硬盘。其中,来自不同存储节点(在图1中不同存储节点可以理解为不同硬盘)的多个逻辑chunk组成一个逻辑块组(chunk group),所述逻辑块组是所述存储池的最小分配单位。例如,图1中,来自不同存储节点的逻辑块0、逻辑块1、逻辑块2、逻辑块3、逻辑块4和逻辑块5,构成一个逻辑块组。

当存储服务层向存储池申请存储空间时,存储池可以提供一个或多个逻辑块组给存储服务层。存储服务层进一步将逻辑块组提供的存储空间虚拟化为逻辑单元(logicalunit,LU)提供给应用服务器100使用。每个逻辑单元具有唯一的逻辑单元号(logical unitnumber,LUN)。由于应用服务器100能直接感知到逻辑单元号,因此本领域技术人员通常直接用LUN代指逻辑单元。每个LUN具有LUN ID,用于标识对应的LUN。数据位于一个LUN内的具体位置可以由起始地址和该数据的长度(length)确定。对于起始地址,本领域技术人员通常称作逻辑块地址(logical block address,LBA)。可以理解的是,LUN ID、LBA和length这三个因素标识了一个确定的地址段。应用服务器生成的数据访问请求,通常在该请求中携带LUN ID、LBA和length。

对于逻辑块组而言,一个逻辑块组可以划分为多个条带(stripe),其中每个条带包括同一逻辑块组中多个逻辑块上的条带单元(stripe unit,SU),条带单元通常为一次数据读写的最小单元,是组成条带的元素。其中条带单元的容量大小可称为“条带深度”,条带中逻辑块个数可称为“条带宽度”。示例性的,如图1中逻辑块组中包括条带0、条带1、…条带N,其中条带0中包括:位于逻辑块0的条带单元SU 0、位于逻辑块1的条带单元SU 1、位于逻辑块2的条带单元SU 2、位于逻辑块3的条带单元SU 3、位于逻辑块4的条带单元SU 4和位于逻辑块5的条带单元SU 5。

在逻辑块组中通常按照条带进行编址,例如图1中在逻辑块组的等效逻辑存储空间中,SU 0、SU 1、SU 2…依次地址相邻。若假设逻辑块组中一个条带单元的大小为8KB,则在逻辑块组中,起始地址开始的8KB存储空间即为SU 0,起始地址加8KB的偏移量(offset)开始的8KB存储空间即为SU 1,以此类推。

在一个逻辑块组中,通常以条带为单位进行数据写入,当一个条带写满后再向下一个条带写入数据。例如,当需要向逻辑块组中写入数据时,存储系统中引擎可以先将数据存入内存,当内存中存储的数据达到一定大小后,引擎再按照条带单元的大小将内存中的数据划分为多个数据分片,然后将这多个数据分片发送给硬盘,以实现将这些多个数据分片存储到逻辑块组中的一个条带中。

其中,在数据存储过程中,一个逻辑块组中还可以采用相应机制来保证数据可靠性。例如,可以采用多副本技术或纠删码(erasure coding,EC)校验机制来存储数据。

示例性的,在向图1所示存储系统写入数据的场景下,以EC校验机制的独立磁盘冗余数据(redundant array of independent disks,RAID)类型为RAID6为例,引擎先将应用服务器写入的数据存入内存,当内存中存储的数据量达到8KB×4=32KB(此处以逻辑块组的条带单元为8KB为例)时,引擎将这32KB数据划分为4个数据分片,每个数据分片的大小为8KB,并计算这四个数据分片对应的2个校验分片,每个校验分片也是8KB。处理器将这些数据分片和校验分片发送给硬盘,以将上述4个数据分片和2个校验分片存储在逻辑块组中的一个条带中。需要说明的是,本实施例中为了便于描述,将利用EC技术划分的数据分片和校验分片统称为EC分片,将相互对应的数据分片和校验分片的集合称为一个EC分条(例如上述示例中4个数据分片和2个校验分片构成一个EC分条)。下文中若无特殊说明,对于EC分片和EC分条均可以做上述理解。

可以看出,在上述数据存储过程中,当应用服务器100侧一次输入/输出(input/output,IO)请求的数据量大于条带单元的大小时,则单次IO请求的数据会被分成多个数据分片,写入不同逻辑块(也就是不同存储节点)中的条带单元中。也就是说,执行上述IO请求需要涉及在两个以上存储节点进行读/写操作。而因为在数据量相同的情况下,从单个存储节点上读/写数据比从多个存储节点上读/写数据占用的资源更少,所以上述相关技术存在消耗资源较多的问题。

进而,为了解决上述读写数据消耗资源较多的问题,本实施例提供一种数据处理方法,该方法中通过将来自应用服务器的单次IO请求的数据存储在同一存储节点中,这样一来,便可以在单个存储节点上完成这些数据的读/写操作,以降低数据读写时的资源消耗。

具体的,本实施例可以通过以下两方面,来实现将单次IO请求的数据存储在同一存储节点中:

第一方面,本实施例采用将数据分片的大小与逻辑块组中的条带单元大小解耦合,即不按照条带单元的大小来划分数据分片。而是在写入数据时,根据写请求的数据量大小,来确定数据分片的大小。这样便可以将写请求的数据携带在一个数据分片中,进而写入存储系统中的一个存储节点。

示例性的,以图1中所示逻辑块组为例,其中该逻辑块组中各条带单元(即SU 0、SU1等)的大小为8KB,EC技术采用EC4+2(即1个EC分条中包括4个数据分片和2个校验分片)。存储系统中引擎121接收来自应用服务器的IO写请求,该IO写请求所携带待存储数据的数据量为32KB。

若按照现有技术的方式,引擎121可以将待存储数据按照8KB划分为4个数据分片,并生成4个数据分片对应的2个校验分片,然后将4个数据分片和2个校验分片分别发送给硬盘127(一个硬盘127可以理解为一个存储节点),将这6个EC分片分别写入一个逻辑块组中一个条带中来自不同存储节点的6个条带单元中(例如SU 0-SU 5中)。

而按照本实施例上述第一方面的方式,引擎121可以根据待存储数据的数据量确定EC分片的大小,例如将EC分片的大小确定为32KB,进而可以将上述待存储数据携带在一个数据分片(可称为第一数据分片),并将上述第一数据分片、携带其他数据的3个数据分片以及对应的2个校验分片构成EC分条。然后,引擎121将这6个EC分片发送给硬盘127,以将这些EC分片写入逻辑块组中不同存储节点(即不同逻辑块)所对应的条带单元。例如,该EC分条中,如图2所示,将数据分片a(即携带待存储数据的分片)写入SU 0、SU 6、SU 12和SU 18,四个条带单元中。其他3个数据分片(即图2中数据分片b、数据分片c和数据分片d)和2个校验分片(如图2中数据分片e和数据分片f)分别占用一个逻辑块中的4个条带单元。这样一来,便可以实现一个IO请求对应的数据存储在同一存储节点中的效果。

第二方面,本实施例还可以将单次写请求的待存储数据,划分为多个EC分条中的多个数据分片。然后,在向存储节点写入这些EC分条时,将待存储数据对应的数据分片写入同一存储节点对应的条带单元中。

依然以图1中所示逻辑块组为例,其中该逻辑块组中各条带单元(即SU 0、SU 1等)的大小为8KB,EC技术采用EC4+2(即1个EC分条中包括4个数据分片和2个校验分片)。存储系统接收来自应用服务器的IO写请求,该IO写请求所携带待存储数据的数据量为32KB。

如上文所述,若按照现有技术的方式,引擎121可以将待存储数据按照8KB划分为4个数据分片,并生成4个数据分片对应的2个校验分片,将这6个EC分片分别写入一个逻辑块组中一个条带中来自不同存储节点的6个条带单元中(例如SU 0-SU 5中)。

而按照本实施例上述第二方面的方式,引擎121可以将待存储数据按照8KB划分为4个数据分片,然后利用这4个数据分片,分别构成4个EC分条,其中上述4个数据分片分别为4个EC分条中的一个数据分片。然后,引擎121将这4个EC分条发送给硬盘127,以将这4个EC分条写入逻辑块组中,其中4个EC分条中上述待存储数据所对应的4个数据分片写入同一存储节点对应的条带单元中。例如,图3中,引擎121将4个EC分条(即图中EC分条a、EC分条b、EC分条c和EC分条d)分别写入条带0~条带3中,其中4个EC分条中,待存储数据对应的4个数据分片均存储在逻辑块0(即同一存储节点)上的条带单元中。这样一来,也可以实现一个IO请求对应的数据存储在同一存储节点中的效果。

以下结合附图,对本实施例所提供数据处理方法进行详细介绍:

在一些场景中,该方法可以应用于如图1所示的集中式存储系统120。例如,存储系统120中,控制器122可以通过处理器123调用存储器(该存储器可以是图1中的内存124,也可以是位于中央处理器123中的缓存)中的程序指令来执行,以实现本实施例所提供的数据处理方法。在另一些场景中,该方法也可以应用于其他架构的存储系统中,例如本实施例所提供方法可以应用于分布式存储系统中,在该分布式存储系统中可以通过具有管理数据读写功能的存储服务器或存储服务器内的部分硬件执行相应程序指令,来实现本实施例所提供的数据处理方法。

下面以存储系统120的运行过程为例,对上述第一方面所提供方法进行介绍。具体的,如图4所示,该方法包括:

S201、存储系统120获取写请求。

其中,该写请求(为便于区分,下文将该写请求称为“第一写请求”)中携带待存储数据。

在一种实现方式中,第一写请求可以是存储系统120接收外部设备发送的IO请求。例如图4所示,第一写请求可以是存储系统120中控制器122通过前端接口125接收到的来自应用服务器100的写请求。

在另一种实现方式中,该第一写请求也可以是存储系统执行业务时所生成的IO请求。例如,该业务可以是存储系统120执行的垃圾回收(garbage collection,GC)过程,第一写请求可以是在GC过程中,将有效数据从被回收的逻辑块组写入新的逻辑块组的写请求。

具体的,如图4中,存储系统120在获取待第一写请求后,可以由处理器123将该第一写请求保存在控制器122的内存124中,以便后续处理。

S202、存储系统120根据待存储数据的大小,从具有不同分片大小的分条中选择一个分片大小不小于待存储数据大小的分条。

其中,本实施例中的分条具体可以指EC分条。

示例性的,如图4中,存储系统120中,处理器123可以调取内存124中的第一写请求,以确定第一写请求中携带的待存储数据的大小(即待存储数据的数据量),然后根据待存储数据的大小,选择存储待存储数据的分条。具体的,可以预先设置多种不同分片大小的分条,然后根据待存储数据的大小,从多种不同分片大小的分条中,选择分片大小不小于待存储数据大小的分条,来存储待存储数据。

在一种实现方式中,上述预先设置的多种不同分片大小的分条,可以是以存储系统中逻辑块组的条带单元大小的整数倍作为分片大小的分条。

也就是说,S202中具有不同分片大小的分条中各分条的分片大小为存储系统中逻辑块组的条带单元大小的整数倍。

例如,在逻辑块组中是以8KB为一个条带单元的,则分片的大小可以为8KB、16KB、24KB、32KB…。示例性的,当第一写请求中的待存储数据为10KB时,则选择分片的大小为16KB的第一分条存储待存储数据;再示例性的,当第一写请求中的待存储数据为25KB时,则选择分片的大小为32KB的第一分条存储待存储数据。

上述实现方式中,考虑到在将数据写入硬盘区域的过程中,通常是以逻辑块组中的条带单元为一次数据读写的最小单元。因此,采用按照条带单元的大小的整数倍来划分分片中分片的大小,从而可以便于数据的读写。

S203、存储系统120将待存储数据存储到分条的数据分片对应的一个存储节点。

下文中,为便于区分,将存储待存储数据的分条称为“第一分条”。

示例性的,如图4中,内存124中不仅存储有第一写请求,另外还存储有存储系统120接收到的其他写请求。处理器123在按照S202选择分条后,可以将上述第一写请求中的待存储数据承载在分条中的一个数据分片中,另外将其他写请求中的数据承载在分条中的其他数据分片中,并根据这些数据分片生成对应的至少一个校验分片,从而确定出第一分条。

其中,第一分条中包括多个数据分片和这多个数据分片对应的至少一个校验分片。上述待存储数据承载在这多个数据分片中的一个数据分片中。

示例性的,如图4所示,处理器123通过后端接口126将第一EC分条中数据分片和校验分片写入存储系统中对应的存储节点中。其中,逻辑块1281所属存储节点将数据分片a(携带有待存储数据)连续写入逻辑块1281中。从逻辑块组侧看就相当于将数据分片a写入了逻辑块1281上的多个条带单元中(相当于图2中,将数据分片a写入逻辑块0(相当于逻辑块1281)上的SU 0、SU 6、SU 12和SU18中。)数据分片b、数据分片c、数据分片d以及校验分片e、校验分片f同理,分别存储至逻辑块1282、逻辑块1283、逻辑块1284、逻辑块1285和逻辑块1286中。

其中,本实施例中存储节点在不同应用场景中,可以采用存储服务器、硬盘或硬盘框等不同的硬件形式。例如,本申请实施例所提供方法应用于分布式存储系统中时,该方法中所称存储节点可以为分布式系统中实现存储节点功能的存储服务器、硬盘或硬盘框。再例如,本申请实施例所提供方法应用于集中式存储系统时,该方法中所称存储节点分别可以为一个或多个硬盘或硬盘框等。

另外,在一种实现方式中,在将待存储数据写入存储系统的过程中,本实施例中还可以通过选择已经存储有与待存储数据相关联的数据(下文称为目标数据)的存储节点,来存储待存储数据。这样一来,当需要一并读取目标数据和待存储数据,则仅通过一个存储节点的读操作,即可完成数据读取。

因此,如图5所示,在将第一分条存储至存储节点中之前,该方法还包括:

S204、确定已存储在存储系统中的与待存储数据相关联的目标数据。

示例性的,如图5中处理器123可以通过内存124获取到目标数据的地址(可以是逻辑地址或硬盘中的物理地址等),从而确定目标数据。

进一步,S204具体可以包括:将第一分条中承载待存储数据的数据分片存储至存储有目标数据的存储节点中。

具体的,可以理解为将待存储数据存储到第一分条的数据分片对应的存储有目标数据的一个存储节点中。

示例性的,如图5中,处理器123通过后端接口126将第一分条中数据分片和校验分片写入存储系统中对应的存储节点中。其中,承载待存储数据的数据分片a存储在存储有目标数据的逻辑块上,即存储在目标数据所属的存储节点中。

另外,在读取存储系统120中的数据的场景下,一方面,相关技术中通常采用根据待读取数据在逻辑块组中的起始位(其中该起始位可以用逻辑块组的偏移量(offset)等信息表示)和数据长度,从逻辑块组中读取从该起始位开始并且长度为上述数据长度的数据的方式,来读取待读取数据。例如图1中,若逻辑块组中条带单元为8KB,可以根据待读取数据在逻辑块组中的起始位offset=0(即逻辑块组的第一个条带单元开始),数据长度length=32KB,从逻辑块组中读取SU 0、SU 1、SU 2和SU 3,从而得到待读取数据。另一方面,在采用将单次IO请求对应的数据存储在同一个存储节点的这种方式(例如上述S201-S203的这种存储数据的方式)下,从逻辑块组侧来看,数据所属的存储空间(即条带单元)可能不是连续的。例如图2中,待存储数据被存储在SU 0、SU 6、SU 12和SU 18四个条带单元中。因此,在读取数据时,可能无法根据待读取数据在逻辑块组中的起始位和数据长度直接读取该数据。

因此,在读取存储系统120中的数据的场景下,例如读取图2中存储在条带单元SU0、SU 1、SU 2和SU 3中的待存储数据的场景下,如图6所示,本实施例所提供方法还可以包括:

S205、存储系统120获取读请求。

在一种实现方式中,该读请求(为便于区分,下文中将该读请求简称为“第一读请求”)可以是存储系统120接收外部设备发送的IO请求。例如图6所示,第一读请求可以是存储系统120中控制器122通过前端接口125接收到的来自应用服务器100的读请求。

在另一种实现方式中,该第一读请求也可以是存储系统执行业务时所生成的IO请求。例如,该业务可以是存储系统120执行的垃圾回收(garbage collection,GC)过程,第一读请求可以是在GC过程中,被回收的逻辑块组读取有效数据的读请求。

具体的,如图6中,存储系统120在获取待第一读请求后,可以由处理器123将该第一读请求保存在控制器122的内存124中,以便后续处理。

其中,第一读请求中携带有待读取数据的标识。

具体的,该待读取数据的标识(下文中为便于描述,将该待读取数据的标识简称为“第一标识”),可以为待读取数据在文件系统中的文件路径或者待读取数据在存储系统中的逻辑地址(例如待读取数据对应的LUN ID、LBA和数据长度)等。

S206、存储系统120根据第一标识,确定待读取数据在存储系统的逻辑块组中的起始位(下文中为便于描述,将待读取数据在存储系统的逻辑块组中的起始位称为“第一起始位”)和数据长度(下文称为“第一数据长度”)。

示例性的,如图6中,处理器123可以通过读取内存124,确定第一读取请求中携带的第一标识。然后,根据第一标识确定第一起始位和第一数据长度,如图6中第一起始位为offset=0和第一数据长度length=32KB。

S207、存储系统120根据第一起始位和第一数据长度,确定逻辑块组中从第一起始位开始的属于同一存储节点的多段存储空间。

其中,多段存储空间的数据长度之和为第一数据长度。

示例性的,图6中,处理器123可以根据第一起始位,确定逻辑块组128中从第一起始位offset=0开始的第一个条带单元SU 0,以及与SU 0同一逻辑块(即同一存储节点)的条带单元(即SU 6、SU 12、SU 18等等)。并且,由于逻辑块组128中条带单元为8KB,所以四个条带单元的数据量即为32KB(第一数据长度)。所以,条带单元SU 0、SU 6、SU 12和SU 18的存储空间,即为上述多段存储空间。

其中,条带单元SU 0、SU 6、SU 12和SU 18的存储空间,可以用逻辑块组中起始位加数据长度的方式表示,即:vec1[0,8KB],vec2[48KB,8KB],vec3[96KB,8KB],vec4[144KB,8KB]。

S208、存储系统120读取上述多段存储空间,得到待读取数据。

示例性的,如图6中,处理器123通过后端接口126,分别读取逻辑块组128中的多段存储空间vec1[0,8KB],vec2[48KB,8KB],vec3[96KB,8KB],vec4[144KB,8KB],从而获得待读取数据。

在另一种实现方式中,在存储系统120可以不通过逻辑块组中的编址方式,直接感知逻辑块组的下层逻辑盘的编址方式的情况下。例如,存储系统120可以直接根据读请求中的待读取数据的标识,确定待读取数据在存储节点中逻辑盘的盘号和该待读取数据在逻辑盘上的起始位的情况下,也可以不通过上述S206-S208的方式获取待读取数据,而直接根据存储节点中逻辑盘的盘号、待读取数据在逻辑盘上的起始位以及待读取数据的数据长度,获取待读取数据。也就是说,本实施例中在读取数据过程中,可以通过不同方式实现数据读取,本实施例的实现并不限于上述S206-S208的读取方式。

另外,在进行GC的场景下,相关技术中通常以逻辑块组为单位来执行GC。举例来说,在GC过程中,如图1中控制器122可以按照逻辑块组的编址顺序(例如图1中,按照SU 0、SU 1、SU 2…的顺序),依次获取一个逻辑块组中有效数据的逻辑地址。然后将所述有效数据的逻辑地址发送给硬盘127,使得各个硬盘127可以根据所述有效数据的逻辑地址读取数据并发送给控制器122。控制器122为所述有效数据分配新的逻辑地址,该新的逻辑地址属于新的逻辑块组,并将该分配的新的逻辑地址发送给硬盘127,以便各个硬盘127将所述有效数据写入新的逻辑块组。其中,由于逻辑块组中,不同逻辑块来自不同存储节点,因此在上述过程中,会在多个硬盘之间多次切换,来读取有效数据。

进而在一种实现方式中,本实施例中在进行GC的场景下,该方法还可以包括:

S209、存储系统120获取GC指令。

其中,该GC指令用于指示对逻辑块组(以下称为第一逻辑块组)进行垃圾回收。

例如,如图7所示,该GC指令可以是在系统的可用空间低于设定的空间阈值后,处理器123触发的指令,或者该GC指令可以是在系统的已用空间达到设定的空间阈值后,处理器123触发的指令。

S210、存储系统120根据GC指令,并行对第一逻辑块组中的逻辑块上的有效数据进行迁移。

例如,存储系统120在获取GC指令后,可以并行执行多个线程。其中各线程分别用于对第一逻辑块组中不同逻辑块上的有效数据进行迁移。

示例性的,图7中存储系统120在获取GC指令后处理器123执行线程1-线程6。其中,线程1-线程6分别对应逻辑块组128中的一个逻辑块(即如图中,线程1-线程6依次对应逻辑块1281-逻辑块1286),用于对一个逻辑块上的有效数据进行迁移。

S211、存储系统120在第一逻辑块组中的逻辑块上的有效数据迁移完成后,释放第一逻辑块组。

例如图7中,处理器123可以通过释放内存124中存储的逻辑块组128对应的逻辑地址信息以及该逻辑地址信息对应的硬盘区域中实际物理空间(也可以理解为实际地址),从而实现释放逻辑块组128。

本实施例中,在采用将单次IO请求对应的数据存储在同一个存储节点的这种方式(例如上述S201-S203的这种存储数据的方式)下,一方面从逻辑块组侧来看一个IO请求对应的数据所属的存储空间(即条带单元)可能不是连续的(例如图2中,第一写请求对应的待存储数据存储在条带单元SU 0、SU 6、SU12和SU18中,这些条带单元在逻辑块组中并不连续),但另一方面从逻辑块组下层的逻辑盘侧来看,则一个IO请求对应的数据可以是连续的(例如图2中,第一写请求对应的待存储数据存储在条带单元SU 0、SU 6、SU12和SU18中,这些条带单元在逻辑盘中的数据块0上是连续的)。因此,在对逻辑块组进行GC过程中,可以通过并行对逻辑块组中的多个逻辑块上的有效数据进行迁移。例如,可以通过执行多个线程,其中每个线程用于对逻辑块组中一个数据块上的数据进行迁移,来进行数据迁移。这样可以避免在进行数据迁移过程中在多个硬盘之间多次切换读取有效数据,从而降低资源开销。

另外,在一种设计中,在采用将单次IO请求的待存储数据,划分为多个分条中的多个数据分片的情况下,如图8所示,该方法包括:

S301、存储系统120获取第一写请求。

其中,第一写请求中携带待存储数据。另外,对于第一写请求的相关描述可参照上文S201,在此不再赘述。

S302、存储系统120根据待存储数据,选择数据分片位于一个存储节点的多个分条。

例如,如图8所示,逻辑块组128中分条a、分条b、分条c…分条n,这n个分条的数据分片对应的存储节点相同的(即这n个分条都对应了逻辑块1281-逻辑块1286,这6个逻辑块对应的存储节点),则选择这n个分条中的多个分条。

S303、存储系统120将待存储数据存储到多个分条的数据分片对应的一个存储节点。

例如,图8中,存储系统中逻辑块组128中条带单元大小为8KB,另外待存储数据为24KB。则选择数据分片位于一个存储节点的3个分条(如图8中分条a、分条b和分条c),将待存储数据分为3个8KB数据块,并将这3个数据块分别作为上述选择出的3个分条中的一个数据分片(包括图8第一数据分片1-第一数据分片3)存储在一个存储节点中(即都存储在逻辑块1281中)。

进一步的,还可以将除第一写请求之外的其他写请求中的数据承载在3个分条中的其他数据分片中,并存储相应的校验分片。

上述设计中,通过将单次IO请求的待存储数据,划分为多个EC分条中的多个数据分片。并在向存储节点写入这些EC分条时,将待存储数据对应的数据分片写入同一存储节点对应的条带单元中。从而实现一个IO请求对应的数据存储在同一存储节点中,降低了数据读写时的资源消耗。

另外,在一种实现方式中,在上述设计中,也可以通过选择已经存储有与待存储数据相关联的目标数据的存储节点,来存储上述多个第一数据分片,从而当需要一并读取目标数据和待存储数据,则仅通过一个存储节点的读操作,即可完成数据读取。

该实现方式的具体内容,可以参照上文图5的相关描述,在此不再赘述。

另外,在一种实现方式中,在上述设计中,在读取存储系统中数据的场景下,也可以采用上文S205-S208的方式进行数据读取,相关内容可参照上文图6以及S205-S208的相关描述,在此不再赘述。

另外,在一种实现方式中,在上述设计中,在进行执行GC的场景下,也可以也可以采用上文S209-S211的方式进行GC,相关内容可参照上文图7以及S209-S211的相关描述,在此不再赘述。

另外,本实施例该提供一种数据处理装置,该数据处理装置能够用于执行本实施例上述数据处理方法中的部分或全部步骤。

可以理解的是,为了实现上述数据处理方法中功能,数据处理装置包括了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本实施例中描述的各示例的单元及方法步骤,本实施例所提供技术方案能够以硬件或硬件和计算机软件相结合的形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用场景和设计约束条件。

在本实施例中,该数据处理装置可以运行在存储系统中用于管理存储数据的硬件设备中。例如,数据处理装置可以运行在集中式存储系统中的控制器或控制器中的部分硬件中。再例如,数据处理装置可以运行在分布式存储系统中具有管理数据读写功能的存储服务器或存储服务器内的部分硬件中。

图9为本实施例提供的一种数据处理装置的结构示意图。该数据处理装置40包括获取单元401、处理单元402以及读写单元403。该数据处理装置可以用于实现上述图4-图8所述的方法中部分或全部步骤的功能。

例如,获取单元401用于执行图4或图5中的S201、图6中的S205和图8中的S301中的一项或多项。

处理单元402用于执行图4或图5中的S202、图5中S204、图6中S206、S207和图7中S209-S211中的一项或多项。

读写单元403用于执行图4或图5中的S203、图6中的S208和图8中的S303中的一项或多项。

有关上述获取单元401、处理单元402以及读写单元403更详细的描述,可以直接参考图4-图8所示的方法中相关描述,这里不再赘述。

图10为本申请提供的一种芯片的结构示意图。该芯片50用于实现本申请所提供的数据处理方法。具体的,该芯片可以用于实现上述数据处理方法中的部分或全部步骤。其中,该芯片50包括:

处理器501用于执行本申请所提供的数据处理方法。

具体的,处理器501可以包含通用中央处理器(central processing unit,CPU)和存储器,处理器501还可以为微处理器、现场可编程逻辑门阵列(Field Programmable GateArray,FPGA)或者特定应用集成电路(application-specific integrated circuit,ASIC)等。在处理器501包含CPU和存储器的场景中,CPU执行存储器中存储的计算机指令,用于执行本申请所提供的数据处理方法。

另外,该芯片50还可以包括:存储器502。存储器502中存储有计算机指令,处理器501执行存储器中存储的计算机指令,用于执行本申请所提供的数据处理方法。

具体的,存储器502可以是只读存储器(read-only memory,ROM)或可存储静态信息和指令的其他类型的静态存储设备,随机存取存储器(random access memory,RAM)或者可存储信息和指令的其他类型的动态存储设备,也可以是电可擦可编程只读存储器(electrically erasable programmable read-only memory,EEPROM)、只读光盘(compactdisc read-only memory,CD-ROM)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的程序代码并能够由计算机存取的任何其他介质,但不限于此。

另外,该芯片50还可以包括:接口503。接口503可以用于接收和发送数据。接口502可以为通信接口或收发器等。

另外,芯片50还可以包括通信线路504。例如,通信线路504可以为数据总线,用于在上述组件之间传输信息。

关于上述芯片50更详细的描述可以直接参考上述数据处理方法中相关描述,这里不再赘述。

本申请的实施例中的方法步骤可以通过硬件的方式来实现,也可以由处理器执行软件指令的方式来实现。软件指令可以由相应的软件模块组成,软件模块可以被存放于RAM、闪存、ROM、PROM、EPROM、EEPROM、寄存器、硬盘、移动硬盘、CD-ROM或者本领域熟知的任何其它形式的存储介质中。一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于ASIC中。另外,该ASIC可以位于网络设备或终端设备中。当然,处理器和存储介质也可以作为分立组件存在于网络设备或终端设备中。

在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机程序或指令。在计算机上加载和执行所述计算机程序或指令时,全部或部分地执行本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、网络设备、用户设备或者其它可编程装置。所述计算机程序或指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机程序或指令可以从一个网站站点、计算机、服务器或数据中心通过有线或无线方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是集成一个或多个可用介质的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,例如,软盘、硬盘、磁带;也可以是光介质,例如,数字视频光盘(digital video disc,DVD);还可以是半导体介质,例如,SSD。

在本申请的各个实施例中,如果没有特殊说明以及逻辑冲突,不同的实施例之间的术语和/或描述具有一致性、且可以相互引用,不同的实施例中的技术特征根据其内在的逻辑关系可以组合形成新的实施例。

本申请中,“至少一个”是指一个或者多个,“多个”是指两个或两个以上,其它量词与之类似。“和/或”描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。此外,对于单数形式“a”,“an”和“the”出现的元素(element),除非上下文另有明确规定,否则其不意味着“一个或仅一个”,而是意味着“一个或多于一个”。例如,“a device”意味着对一个或多个这样的device。再者,至少一个(at least one of).......”意味着后续关联对象中的一个或任意组合,例如“A、B和C中的至少一个”包括A,B,C,AB,AC,BC,或ABC。在本申请的文字描述中,字符“/”,一般表示前后关联对象是一种“或”的关系;在本申请的公式中,字符“/”,表示前后关联对象是一种“相除”的关系。

可以理解的是,在本申请的实施例中涉及的各种数字编号仅为描述方便进行的区分,并不用来限制本申请的实施例的范围。上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定。

相关技术
  • 话音数据处理方法以及支持该话音数据处理方法的电子装置
  • 一种数据处理方法、装置和用于数据处理的装置
  • 一种数据处理方法、装置和用于数据处理的装置
  • 一种数据处理方法、装置和用于数据处理的装置
  • 一种数据处理方法、装置和用于数据处理的装置
  • 数据处理设备、数据处理方法、程序转换处理设备和程序转换处理方法、程序转换处理设备、数据处理设备、程序转换处理方法和数据处理方法、数据处理设备、数据处理方法、程序分析处理设备和程序分析处理方法、数据处理设备、历史保存设备、数据处理方法和程序、以及编译处理设备
  • 图像数据处理方法、用于图像数据处理方法的程序、记录有用于图像数据处理方法的程序的记录介质和图像数据处理装置
技术分类

06120115723868