CN115793957A - 写数据的方法、装置及计算机存储介质 - Google Patents

写数据的方法、装置及计算机存储介质 Download PDF

Info

Publication number
CN115793957A
CN115793957A CN202111061561.9A CN202111061561A CN115793957A CN 115793957 A CN115793957 A CN 115793957A CN 202111061561 A CN202111061561 A CN 202111061561A CN 115793957 A CN115793957 A CN 115793957A
Authority
CN
China
Prior art keywords
data
target
storage
partition
data blocks
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202111061561.9A
Other languages
English (en)
Inventor
李楚
郑勇
李亚飞
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN202111061561.9A priority Critical patent/CN115793957A/zh
Publication of CN115793957A publication Critical patent/CN115793957A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

公开了一种写数据的方法、装置及计算机存储介质,在该方法中,接收写数据请求,该写数据请求携带需要被写入存储系统的目标数据;然后将目标数据写入存储系统中,其中,该存储系统包括多个存储节点,同一个校验组的数据块存储在不同的存储节点,不同校验组存储于同一存储节点的数据块中至少有两个数据块在目标数据中相邻。这样后续负责处理该相邻数据块中的数据的计算节点在执行任务时,便可从同一存储节点读取到该相邻数据块中的数据。相对于相关技术将目标数据中一段连续数据打散分别存储在不同的存储点节点上,避免了需要跨存储节点才能访问到该相邻数据块中的数据,提高了读取相邻数据块中的数据的效率,提升了计算节点执行任务的效率。

Description

写数据的方法、装置及计算机存储介质
技术领域
本发明涉及计算机存储技术领域,特别涉及一种写数据的方法、装置及计算机存储介质。
背景技术
目前,在将一个文件写入分布式存储系统时,是将文件划分为多个文件分块,然后将多个文件分块存储在分布式存储系统中的不同存储节点上。其中,每个文件分块的大小例如可以为128兆字节(megabyte,M)。
相关技术中,为了降低存储成本,通常是采用纠删码(erasure code,EC)技术来存储这多个文件分块。具体地,将每个文件分块划分为更小粒度的数据块,划分后的数据块的大小例如可以为1M。对于每个文件分块划分后的数据块,通过EC技术计算得到校验块,然后将数据块和校验块分别打散存储在不同的存储节点上。
上述基于EC技术存储文件后,在读取某个文件分块时,需要从不同的存储节点上分别读取各个数据块,这样就会产生跨节点的网络访问,从而降低了读取文件的速度。
发明内容
本发明方案提供了一种写数据的方法、装置及计算机存储介质,可以提高读取文件中的数据的速度。所述技术方案如下:
第一方面,提供了一种写数据方法,在该方法中,接收写数据请求,该写数据请求携带需要被写入存储系统的目标数据;将目标数据写入存储系统中,其中,该存储系统包括多个存储节点,同一个校验组的数据块存储在不同的存储节点,不同校验组存储于同一存储节点的数据块中至少有两个数据块在目标数据中相邻。
通过本发明方案提供的写数据方法,能够实现将目标数据中的部分相邻数据块写在同一存储节点上,这样后续负责处理该相邻数据块中的数据的计算节点在执行任务时,便可从同一存储节点读取到该相邻数据块中的数据。相对于相关技术将目标数据中一段连续数据打散分别存储在不同的存储点节点上,本发明方案提供的写数据方法避免了需要跨存储节点才能访问到该相邻数据块中的数据,从而提高了读取相邻数据块中的数据的效率,进而提升了计算节点执行任务的效率。也即是,通过本发明方案提供的写数据方法,不仅可以通过校验组技术实现存储系统的低成本,又能保证后续计算节点执行任务的高性能。
在一种可能的实现方式中,这多个存储节点中每个存储节点包括多个存储器;其中,存储于同一存储节点的目标数据中相邻数据块分布在该同一存储节点的不同存储器中。基于该配置,可以将目标数据的一段连续数据存储在同一存储节点的不同硬盘上,进而提升本地访问的并发度。
在一种可能的实现方式中,同一校验组的数据块中至少两个数据块在目标数据中不相邻。通过该配置,提供了一种如何得到校验组的方法。
在一种可能的实现方式中,在该方法中,还将目标数据划分为多个数据亲和组DAG,多个DAG中每个DAG包括多个数据块,多个数据块中的至少两个数据块在目标数据中相邻;相应地,同一校验组中的数据块分布于不同DAG,不同校验组中属于同一DAG的数据块存储在同一存储节点上。
通过将目标数据划分成多个DAG,以便于后续快速基于各个DAG中的数据块生成校验组。
在另一种可能的实现方式中,这多个存储节点中每个存储节点包括多个存储器,针对该存储系统配置有分区表,该分区表包括多个分区,每个分区对应多个存储器。这种场景下,将目标数据写入存储系统中的实现方式具体可以为:对于任一校验组,从多个分区中选择目标分区,基于目标分区所对应的存储器将该任一校验组中的数据块写入存储系统。其中,多个分区中至少有两个分区对应的部分或全部存储器所在的存储节点相同,将不同校验组中属于目标数据中的相邻数据块存储在同一存储节点上。
通过预先将存储系统中各个存储设备划分分区,可以在得到一个校验组时,基于选择的分区快速将校验组写入存储系统,提高了写数据的效率。
在一种可能的实现方式中,每个分区对应N+M个存储器,其中,N为一个校验组包括的数据块的数量,M为一个校验组包括的校验块的数量;这多个分区中至少有两个分区对应的N个存储器所在的存储节点相同。
进一步地,每个分区的存储器数量可以和校验组包括块数量相同,以便于快速将一个校验组写入分区所对应的各个存储器。此外,多个分区中至少有两个分区对应的N个存储器所在的存储节点相同,这样在遇到不同校验组中目标数据的相邻数据块时,便可将相邻数据块写在不同分区的相同存储节点上。
在一种可能的实现方式中,在该方法中,还可以将多个分区中对应的部分或全部存储器所在存储节点相同的分区归类为一个分区位置组PLG,得到一个或多个PLG。这种场景下,对于任一校验组,从多个分区中选择目标分区,基于目标分区所对应的存储器将任一校验组中的数据块写入存储系统的实现方式可以为:对于第一校验组,从一个或多个PLG中选择目标PLG,从目标PLG中选择第一目标分区,基于第一目标分区将第一校验组中的数据块写入存储系统,第一校验组为其中一个校验组;对于第二校验组,从目标PLG中选择第二目标分区,基于第二目标分区将第二校验组中的数据块写入存储系统,第二校验组中至少一个数据块和第一校验组中的数据块在目标数据中相邻。
进一步地,通过提前配置PLG,对于存在相邻数据块的不同校验组,可以在已经存储了一个校验组的情况下,对于另一个待存储的校验组快速锁定要存储的分区,进而提高写数据的效率。
在一种可能的实现方式中,同一PLG的不同分区中属于同一存储节点的存储设备不同。基于该配置,可以将目标数据的一段连续数据存储在同一存储节点的不同硬盘上,进而提升本地访问的并发度。
在一种可能的实现方式中,该校验组是EC校验组。本发明方案可以基于EC技术来存储数据,从而实现存储系统的低成本。
第二方面,提供了一种写数据装置,所述写数据装置具有实现上述第一方面中写数据方法行为的功能。所述写数据装置包括至少一个模块,该至少一个模块用于实现上述第一方面所提供的写数据方法。
第三方面,提供了一种写数据装置,所述写数据装置的结构中包括处理器和存储器,所述存储器用于存储支持写数据装置执行上述第一方面所提供的写数据方法的程序,以及存储用于实现上述第一方面所提供的写数据方法所涉及的数据。所述处理器被配置为用于执行所述存储器中存储的程序。所述存储设备的操作装置还可以包括通信总线,该通信总线用于该处理器与存储器之间建立连接。
第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述第一方面所述的写数据方法。
第五方面,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面所述的写数据方法。
上述第二方面、第三方面、第四方面和第五方面所获得的技术效果与第一方面中对应的技术手段获得的技术效果近似,在这里不再赘述。
附图说明
图1是本发明方案提供的一种存算分离的分布式存储系统的架构示意图;
图2是本发明方案提供的一种存算一体的分布式存储系统的架构示意图;
图3是本发明方案提供的一种EC分区表的示意图;
图4是本发明方案提供的一种DAG的划分示意图;
图5是本发明方案提供的一种PLG的划分示意图;
图6是本发明方案提供的一种写数据的方法流程图;
图7是本发明方案提供的一种写数据的流程示意图;
图8是本发明方案提供的一种写数据后的存储结果示意图;
图9是本发明方案提供的一种写数据装置的结构示意图。
具体实施方式
为使本发明方案的目的、技术方案和优点更加清楚,下面将结合附图对本发明方案作进一步地详细描述。
在对本发明方案进行详细说明之前,先对本发明方案的应用场景进行解释说明。目前,在大数据分析场景下,底层的分布式存储系统(hadoop distributed file system,HDFS)通常对文件按照分块大小进行分割(比如可以将文件按照128M为单位进行划分),然后将分割后的各个分块分布式存储在存储系统的不同存储节点上。后续上层计算引擎(比如可以为Hive、Spark、FlinK等引擎)在处理用户提交的分析作业的时候,会根据分析作业确定出待处理的数据,然后基于待处理的数据对分析作业进行任务切割。具体地将待处理数据中一段连续数据对应的作业作为一个任务,得到多个任务。然后将多个任务分别发送到不同的计算节点,以使不同的计算节点并发执行这多个任务。其中,在每个计算节点中,计算节点从存储系统读出相应任务所需的文件数据并进行分析,返回结果给上层计算引擎进行汇总,循环直到处理完整个待处理数据,然后由上层计算引擎汇总所有计算节点返回的结果,以得到分析作业的处理结果。在整个处理过程中,计算节点读取相应任务所需的文件数据的速度对整个分析作业的执行效率有着至关重要的影响。而计算节点如何读取文件数据分块则取决于文件分块如何存储在各个存储节点。基于此,本发明方案提供了一种写数据的方法,目的在于提供一种数据存储方式,以提高计算节点读取文件数据的效率。
需要说明的是,上述是以存储文件为例说明本发明的应用场景,但是本发明方案涉及需要被写入存储系统的数据并不限定在文件格式的数据。可选地,本发明方案涉及的数据也可以为其他格式的数据,示例地还可以为对象格式的数据。也即是,本发明方案并不限定需要被写入存储系统的数据的具体格式。
另外,为了后续便于说明,将需要被写入存储系统的数据称为目标数据。
此外,本发明方案提供的写数据方法应用于分布式存储系统中,为了便于后续说明,在此对分布式存储系统的系统架构进行解释说明。其中,本发明方案涉及的分布式存储系统可以为存算分离的分布式存储系统,也可以为存算一体的分布式存储系统。下面分别对此进行简单说明。
1、存算分离的分布式存储系统
图1是本发明方案提供的一种存算分离的分布式存储系统的架构示意图。所谓存算分离也即是存储节点和计算节点配置在不同的设备上。如图1所示,该存算分离的分布式存储系统包括计算节点集群和存储节点集群。计算节点集群包括一个或多个计算节点110(图1中示出了三个计算节点110,但不限于三个计算节点110),各个计算节点110之间可以相互通信。计算节点110是一种计算设备,如服务器、台式计算机或者存储阵列的控制器等。在硬件上,如图1所示,计算节点110至少包括处理器112、内存113和网卡114。其中,处理器112可以是一个中央处理器(central processing unit,CPU),用于处理来自计算节点110外部的数据访问请求,或者计算节点110内部生成的请求。示例性的,处理器112接收用户发送的写数据请求时,会将这些写数据请求中的数据暂时保存在内存113中。当内存113中的数据总量达到一定阈值时,处理器112将内存113中存储的数据发送给存储节点100进行持久化存储。除此之外,处理器112还用于数据进行计算或处理,例如元数据管理、重复数据删除、数据压缩、虚拟化存储空间以及地址转换等。图1中仅示出了一个CPU 112,在实际应用中,CPU 112的数量往往有多个,其中,一个CPU 112又具有一个或多个CPU核。本实施例不对CPU的数量,以及CPU核的数量进行限定。
内存113是指与处理器直接交换数据的内部存储器,它可以随时读写数据,而且速度很快,作为操作系统或其他正在运行中的程序的临时数据存储器。内存包括至少两种存储器,例如内存既可以是随机存取存储器,也可以是只读存储器(Read Only Memory,ROM)。举例来说,随机存取存储器是动态随机存取存储器(Dynamic Random Access Memory,DRAM),或者存储级存储器(Storage Class Memory,SCM)。DRAM和SCM在本实施例中只是示例性的说明,内存还可以包括其他随机存取存储器,例如静态随机存取存储器(StaticRandom Access Memory,SRAM)等。而对于只读存储器,举例来说,可以是可编程只读存储器(Programmable Read Only Memory,PROM)、可抹除可编程只读存储器(ErasableProgrammable Read Only Memory,EPROM)等。另外,内存113还可以是双列直插式存储器模块或双线存储器模块(Dual In-line Memory Module,简称DIMM),即由动态随机存取存储器(DRAM)组成的模块,还可以是固态硬盘(Solid State Disk,SSD)。实际应用中,计算节点110中可配置多个内存113,以及不同类型的内存113。本实施例不对内存113的数量和类型进行限定。此外,可对内存113进行配置使其具有保电功能。保电功能是指系统发生掉电又重新上电时,内存113中存储的数据也不会丢失。具有保电功能的内存被称为非易失性存储器。
网卡114用于与存储节点100通信。例如,当内存113中的数据总量达到一定阈值时,计算节点110可通过网卡114向存储节点100发送请求以对所述数据进行持久化存储。另外,计算节点110还可以包括总线,用于计算节点110内部各组件之间的通信。在功能上,由于图1中的计算节点110的主要功能是计算业务,在存储数据时可以利用远程存储器来实现持久化存储,因此它具有比常规服务器更少的本地存储器,从而实现了成本和空间的节省。但这并不代表计算节点110不能具有本地存储器,在实际实现中,计算节点110也可以内置少量的硬盘,或者外接少量硬盘。
任意一个计算节点110可通过网络访问存储节点集群中的任意一个存储节点100。存储节点集群包括多个存储节点100(图1中示出了三个存储节点100,但不限于三个存储节点100)。一个存储节点100包括一个或多个控制器101、网卡104与多个硬盘105。网卡104用于与计算节点110通信。硬盘105用于存储数据,可以是磁盘或者其他类型的存储介质,例如固态硬盘或者叠瓦式磁记录硬盘等。控制器101用于根据计算节点110发送的读/写数据请求,往硬盘105中写入数据或者从硬盘105中读取数据。在读写数据的过程中,控制器101需要将读/写数据请求中携带的地址转换为硬盘能够识别的地址。
2、存算一体的分布式存储系统
图2是本发明方案提供的一种存算一体的分布式存储系统的架构示意图。所谓存算一体也即是存储节点和计算节点配置在同一设备上。如图2所示,本发明方案提供的存算一体的分布式存储系统包括存储集群。存储集群包括一个或多个服务器200(图2中示出了三个服务器200,但不限于三个服务器200),各个服务器200之间可以相互通信。服务器200是一种既具有计算能力又具有存储能力的设备,如服务器、台式计算机等。示例的,ARM服务器或者X86服务器都可以作为这里的服务器200。也即是,对于图2所示的存储系统,服务器200既是计算节点也是存储节点。
在硬件上,如图2所示,服务器200至少包括处理器202、内存203、网卡204和硬盘205。处理器202、内存203、网卡204和硬盘205之间通过总线连接。其中,处理器202和内存203用于提供计算资源。具体地,处理器202是一个中央处理器(central processing unit,CPU),用于处理来自服务器200外部(应用服务器或者其他服务器200)的数据访问请求,也用于处理服务器200内部生成的请求。示例性的,处理器202接收写数据请求时,会将这些写数据请求中的数据暂时保存在内存203中。当内存203中的数据总量达到一定阈值时,处理器202将内存203中存储的数据发送给硬盘205进行持久化存储。除此之外,处理器202还用于数据进行计算或处理,例如元数据管理、重复数据删除、数据压缩、数据校验、虚拟化存储空间以及地址转换等。图2中仅示出了一个CPU 202,在实际应用中,CPU 202的数量往往有多个,其中,一个CPU 202又具有一个或多个CPU核。本实施例不对CPU的数量,以及CPU核的数量进行限定。
内存203是指与处理器直接交换数据的内部存储器,它可以随时读写数据,而且速度很快,作为操作系统或其他正在运行中的程序的临时数据存储器。内存203的相关内容可以参考图1中的内存113的相关内容,在此不再赘述。
硬盘205用于提供存储资源,例如存储数据。它可以是磁盘或者其他类型的存储介质,例如固态硬盘或者叠瓦式磁记录硬盘等。此外,网卡204用于与其他应用服务器200通信。
需要说明的是,图1和图2所示的存储系统用于示例说明本发明方案涉及的存储系统,本发明方案涉及的存储系统的硬件架构并不限于图1或图2所示的架构,在此就不再一一举例说明。在应用本发明方案时,任意具有多个存储节点的分布式存储系统均可以实现本发明方案提供的写数据方法。
也即是,本发明方案提供的存储系统包括多个存储节点,这多个存储节点用于分布式存储数据。每个存储节点下挂载有一个或多个存储器。该存储器示例地为图1或图2所示的硬盘。
此外,本发明方案是基于编码容错技术存储目标数据的。编码容错技术具体是指:将目标数据通过编码得到校验信息,然后将目标数据和校验信息一起作为校验组存储。后续可以根据校验信息来恢复目标数据或验证目标数据的正确性。该编码容错技术示例地可以为EC技术、海明码校验技术或误差校正码(error correcting code,ECC)技术。下面以EC技术为例说明。
EC技术是指将目标数据中不同的数据块计算得到校验块,然后将数据块和校验块作为一个EC校验组(EC校验组也称为EC条带)进行存储,在存储时将EC校验组中的各个数据块和各个校验块分别存储在不同的存储节点上。其中,在某个数据块丢失时,便可基于校验块和其他数据块来恢复该数据块上的数据,因此通过EC技术可保证存储系统上存储的数据的可靠性。每个EC校验组包括N个数据块和M个校验块,其中,N和M均为正整数。通常N是大于M的,如此便可提高存储系统的存储利用率。示例地,N=3、M=2,或者N=22、M=2。
需要说明的是,本发明方案涉及的校验组(stripe)还可以称为条带或条片,校验组中的基本单元(stripe unite)还可以称为分条单元,比如前述的数据块还可以称为数据分条单元,前述的校验块还可以称为校验分条单元。此外校验组中的“块(block)”还可以称为“分片(fragment)”,如此前述的数据块还可以称为数据分片,前述的校验块还可以称为校验分片。后续实施例均以校验组、数据块和校验块为例进行说明。
基于上述分布式存储系统的架构可知,在分布式存储系统中,每个存储节点对应配置有多个存储器,这多个存储器均用于存储数据。为了便于后续快速基于编码容错技术存储数据,可以预先对存储系统上的存储空间进行了划分,得到一个分区表,也即是针对存储系统配置有分区表,以便于后续基于该分区表写数据。在此先对分区表进行解释说明。
在一种可能的实现方式中,该分区表包括多个分区,这多个分区的每个分区对应存储系统中的多个存储器。当写数据时,对于任一校验组,便可从分区表中选择一个分区,然后将该校验组写入选择的分区中,以实现将数据写入存储系统。
示例地,当通过EC技术存储数据时,前述分区表还可称为EC分区表。这种情况下,该EC分区表包括多个分区,这多个分区中每个分区对应N个数据块存储器和M个校验块存储器。也即是,每个分区对应N+M个存储器。其中,N为EC校验组包括的数据块数量,M为EC校验组包括的校验块数量。如此,在写数据时,如果需要写入一个EC校验组,直接从EC分区表中选择一个分区,然后将该EC校验组写入选择的分区即可。
上述数据块存储器是指用于存储数据块的存储器,校验块存储器是指用于存储校验块的存储器。需要说明的是,在本发明方案中,数据块存储器和校验块存储器用于示例说明存储器的功能,在应用本发明方案时,可能并没有根据存储器的功能分别命名不同的存储器,而是统称为存储器。
图3是本发明方案提供的一种EC分区表的示意图。如图3所示,假设存储系统包括6个存储节点(node),分别表示为N1、N2、N3、N4、N5、N6(图3中示例地画出了N1、N2和N6)。每个存储节点包括多个磁盘(图3中示例地以每个存储节点有5个磁盘为例进行说明)。每个EC校验组包括4个数据块和2个校验块,因此如图3所示,EC分区表也称为4+2EC分区表。
如图3所示,EC分区表中示例了n个分区,分别表示为分区(partition)1、分区2、…、分区n。每个分区包括6个元素(member),图3中分别表示为Mem1、Mem2、Mem3、Mem4、Mem5、Mem6。每个元素代表一个存储器,其中,Mem1至Mem4代表数据块存储器,Mem5和Mem6代表校验块存储器。如图3所示,分区1中的6个元素分别为存储节点1上的磁盘1(图3中表示为N1-D1)、存储节点2上的磁盘3(图3中表示为N2-D3)、存储节点3上的磁盘7(图3中表示为N3-D7)、存储节点4上的磁盘4(图3中表示为N4-D4)、存储节点5上的磁盘6(图3中表示为N5-D6)、存储节点6上的磁盘4(图3中表示为N6-D4)。图3中其他分区中各个元素的解释分别可以参考上述分区1中各个元素的说明,在此不再一一展开说明。
为了提高数据的存储分散性,进而提高数据丢失后的恢复成功率,同一分区中N个数据块存储器可以分别为不同存储节点上的存储器,这样后续同一校验组中不同数据块就分别存储在不同的存储节点中。如图3所示,分区1至分区n的每个分区中各个数据块存储器均为不同存储节点上的存储器。
可选地,同一分区中各个数据块存储器所属的存储节点中允许存在相同的存储节点,此时一个校验组中的数据块中就可能有部分数据块存储在同一存储节点上。比如,对于图3所示的EC分区表,分区1中的Mem2可以为节点1上的磁盘3。这种场景下,对于一个EC校验组,该EC校验组中并不是全部数据块分别存储在不同的存储节点上,只是有部分数据块分布式存储。
此外,同一分区中各个校验块存储器和数据块存储器可以为不同的存储节点上的存储器,这样实现同样是为了提高数据丢失后的恢复成功率,进而提高存储系统的数据可靠性。也即是,同一校验组中的校验块和数据块存储在不同的存储节点上。示例地,如图3所示,分区1中的Mem5和Mem6代表的校验块存储器所属的存储节点为节点5和节点6,而Mem1至Mem4代表的数据块存储器所属的存储节点分别为节点1至节点4。可选地,同一分区中各个校验块存储器中允许存在校验块器和数据块存储器位于同一存储节点上。
另外,本发明方案中,对同一分区中各个校验块存储器是否为同一存储节点上的存储器并不做明确限定。进一步地,为了提高数据丢失后的恢复成功率,不同校验块存储器可以分别为不同存储节点上的存储器。
进一步地,为了保证后续存储系统中各个存储器的负载均衡,上述分区表中各个存储器的出现次数之间的差值在参考差值之内。也即是,分区表中各个存储器的出现次数基本上相同,这样后续在根据分区表存储数据时能够均衡地将数据存储在各个存储器上。比如,上述存储器示例地为磁盘,在图3所示的EC分区表中大部分磁盘可能出现了三次,仅有部分磁盘出现了二次。
上述参考差值可以基于存储系统对负载均衡的需求来定。可选地,该参考差值也可以由用户直接配置,本发明方案对此不做限定。
配置完分区表之后,在存储文件等目标数据时,先将目标数据划分为各个分块,再将各个分块继续划分为更小粒度的数据块。将目标数据划分为分块时可以按照第一参考数据大小进行划分,将分块划分为数据块时可以按照第二参考数据大小进行划分,第一参考数据大小示例地为128M,第二参考数据大小示例地为1M。此外,划分时将连续的数据放在同一文件分块中,以便于后续快速读取数据。因此,在本发明方案中,划分后的分块还可以称为数据亲和组(data affinity group,DAG)。
图4是本发明方案提供的一种DAG的划分示意图。如图4所示,将需要被写入存储系统的目标文件划分为3个DAG,在图4中分别表示为DAG1、DAG2和DAG3,每个DAG中的数据为目标文件中的连续数据。每个DAG的大小为128M,且每个DAG中划分出128个1M的数据块。
上述划分后的每个DAG包括的数据块在目标数据中是全部相邻的,可选地,上述划分后的每个DAG包括的数据块中部分数据块在目标数据中是相邻的。也即是,针对需要被写入存储系统的目标数据,将目标数据划分为多个DAG,这多个DAG中每个DAG包括多个数据块,这多个数据块中的至少两个数据块在目标数据中相邻。
在将目标数据划分为多个DAG之后,对于其中的N个DAG,每次从这N个DAG包括的各个数据块中分别取出一个数据块,得到N个数据块,将取出的N个数据块作为一个校验组中的数据块,将取出的N个数据块的校验块作为同一校验组中的校验块,然后从前述分区表中确定一个分区,再将该校验组写入确定的分区所对应的存储器,从而实现目标数据的快速写入。具体实现方式将在后续方法实施例中详细说明,在此就先不展开说明。
在本发明方案中,为了避免后续需要从不同存储节点读取目标数据中的连续数据,需要保证不同校验组存储于同一存储节点的数据块中至少有两个数据块在目标数据中相邻,这样后续负责处理该相邻数据块中的数据的计算节点在执行任务时,便可从同一存储节点读取到该相邻数据块中的数据,避免了需要跨存储节点才能访问到该相邻数据块中的数据,从而提高了计算节点获取数据的速度,进而提高了计算节点执行任务的效率。
示例地,在上述将目标数据划分为多个DAG的场景中,假设校验组为EC校验组,则不同EC校验组中属于同一DAG的数据块存储在同一存储节点上。由于每个DAG包括多个数据块中的至少两个数据块在目标数据中相邻,因此便可实现同一DAG中相邻数据块写在同一存储节点上。具体地,对于上述的N个DAG,在首次从这N个DAG中分别取出一个数据块后,将取出的N个数据块写入一个分区所对应的存储器,为了后续便于说明,将该首次确定的分区称为第一目标分区。那么在非首次取出N个数据块后,确定的分区中数据块存储器所在的存储节点需要和第一目标分区中的数据块存储器所在的存储节点相同。比如,第一目标分区中的数据块存储器所在的存储节点为存储节点1、存储节点2、存储节点3和存储节点4,那么非首次确定的分区中的数据块存储器所在的存储节点也需要为存储节点1、存储节点2、存储节点3和存储节点4。如此才能保证同一DAG在不同EC校验组中的数据块写在同一存储节点上。
基于上述写不同EC校验组的过程可知,非首次取出N个数据块后确定的分区数据块存储器所在的存储节点需要和首次确定的分区中的数据块存储器所在的存储节点相同,因此,在本发明方案中,为了便于后续非首次取出N个数据块后快速确定待写入的分区,可以预先将上述分区表中的各个分区进行分组。具体地,将各个分区中数据块存储器所在的存储节点相同的分区划分为一个分区位置组(partition location group,PLG)。
比如,对于图3所示的EC分区表,分区1、分区2以及分区3中的数据块存储器所在的存储节点均为存储节点1、存储节点2、存储节点3和存储节点4,因此,图5所示,将分区1、分区2和分区3划分为一个PLG。在划分PLG之后,对于首次取出N个数据块后确定的分区,只需记录该分区所在的PLG即可,在非首次取出N个数据块之后,从该PLG包括的分区中确定一个分区即可,提高了写数据的效率。
需要说明的是,同一PLG中各个分区只需满足数据块存储器所在的存储节点相同即可,不需要要求分区表中同一Mem位置上的数据块存储器所在的存储节点相同。也即是,对于同一PLG中的各个分区,对于每个分区,将该分区中数据块存储器所在的存储节点合并,得到该分区对应的存储节点集合,则同一PLG中各个分区对应的存储节点集合相同。
比如,对于图3所示的EC分区表,分区3中Mem1至Mem3位置上的存储器所在的存储节点和分区1各个Mem位置上的存储器所在的存储节点不同,但是分区1中4个数据块存储器所在的存储节点为节点1-节点4,分区3中4个数据块存储器所在的存储节点也为节点1-节点4。因此,分区3和分区1属于同一PLG。此外,分区1和分区2上各个Mem1至Mem3位置上的存储器所在的存储节点完全相同,因此,分区1、分区2以及分区3可以划分到一个PLG中。
可选地,由于每个DAG中包括的多个数据块中可以是部分数据块在目标数据中相邻,因此,同一PLG的不同分区中也可以是部分存储节点相同,而不要求是全部存储节点相同。也即是,将分区表多个分区中对应的部分或全部存储器所在存储节点相同的分区归类为一个PLG,得到一个或多个PLG
此外,同一PLG中不同分区中属于同一存储节点的存储器可以不同,这样可以充分利用同一存储节点内的多个存储器的并发访问带宽。如图3所示,分区1和分区2中相同存储节点上的磁盘均不同。
另外,目前数据是以物理日志(physical log,Plog)为基本单元存储在存储系统中的。其中,一个Plog中可以存储一个或多个校验组。也即是,对于前述分区表中的每个分区,每个分区中包括多个Plog,每个Plog对应分区中的N个数据块存储器和M个校验块存储器中每个存储器的一段存储空间。比如,图5是本发明方案提供的一种Plog的格式示意图。如图5所示,分区1包括两个Plog,分别表示为Plog1和Plog2。分区2也包括两个Plog,分别表示为Plog3和Plog4。关于如何将校验组存储到Plog中,这部分内容将在后续实施例中详细说明,在此同样先不展开阐述。
下面对本发明方案提供的写数据方法进行详细解释说明。
图6是本发明方案提供的一种写数据的方法流程图。如图6所示,该方法包括如下步骤。
步骤601:计算节点接收写数据请求,该写数据请求携带需要被写入存储系统的目标数据。
对于图1所示的存算分离的分布式存储系统或者图2所示的存算一体的分布式存储系统,本发明方案提供的方法均应用于计算节点。也即是通过计算节点的写数据流程将目标数据写入存储节点。因此,后续图4所示的实施例中均以计算节点作为执行主体。
在步骤601中,计算节点接收写数据请求,以触发后续的写数据流程。需要说明的是,计算节点接收的写数据请求可以为多个,因此步骤601中的写数据请求可以为一个写数据请求也可以为多个写数据请求。
步骤602:计算节点将目标数据写入存储系统中,其中,该存储系统包括多个存储节点,同一个校验组的数据块存储在不同的存储节点,不同校验组存储于同一存储节点的数据块中至少有两个数据块在目标数据中相邻。
在本发明方案中,目标数据在存储系统中是以数据块为单元存储的,因此,在步骤602中,将目标数据写入存储系统中具体是指:将目标数据中的各个数据块通过校验组的方式写入存储系统。
示例地,在基于EC技术存储数据时,将目标数据中的各个数据块划分为不同EC校验组中的数据块,然后将各个EC校验组存储至存储系统中。
在将不同校验组写入存储系统时,需要满足这两个条件:同一个校验组的数据块存储在不同的存储节点,不同校验组存储于同一存储节点的数据块中至少有两个数据块在目标数据中相邻。
其中,同一个校验组的数据块存储在不同的存储节点是为了提高写数据的效率,如此同一校验组的不同数据块可以并发写入不同的存储节点。不同校验组存储于同一存储节点的数据块中至少有两个数据块在目标数据中相邻,是为了能够实现目标数据中的部分相邻数据块存储在同一存储节点上,这样后续负责处理该相邻数据块中的数据的计算节点在执行任务时,便可从同一存储节点读取到该相邻数据块中的数据,避免了需要跨存储节点才能访问到该相邻数据块中的数据,从而提高了计算节点获取数据的速度,进而提高了计算节点执行任务的效率。
示例地,如前述DAG的相关介绍可知,得到目标数据中的各个数据块的实现方式可以为:计算节点将目标数据划分为多个DAG,这多个DAG中每个DAG包括多个数据块。
具体地,如步骤601所示,写数据请求可能不止一个,因此,在一种可能的实现方式中,在步骤602中,在每次接收到一个接数据请求后,如果该写数据请求中携带的目标数据大于128M,则按照每128M的数据为一个单位对该目标数据进行划分。如果划分得到多个DAG后,还剩下不足128M的数据,则将剩下的数据和下一个写数据请求中的目标数据中的部分数据整合一个128M的DAG出来,继续划分下一个写数据请求中的目标数据中的其他数据。相应地,如果该写数据请求中携带的目标数据不超过128M,则将该目标数据和下一个写数据请求中的目标数据合并后划分DAG。依次对每个写数据请求均执行上述操作。通过上述过程,每个DAG中均包括128M的数据,且每个DAG中可能包括不同目标数据中的数据,但是每个DAG中属于同一目标数据的数据块均是相邻的。
可选地,在另一种可能的实现方式中,在步骤602中,在每次接收到一个接数据请求后,直接按照每128M的数据为一个单位对该目标数据进行划分,如果划分得到多个DAG后,还剩下不足128M的数据,则将剩下的数据中添加空白数据以整合一个128M的DAG出来,其中空白数据是指逻辑的空白数据,该空白数据不占用实际存储空间。相应地,如果该写数据请求中携带的目标数据不超过128M,则将该目标数据空白数据整合后划分一个DAG。依次对每个写数据请求均执行上述操作。通过上述过程,每个DAG中仍然包括128M的数据,不过某个DAG中的数据可能是空白数据,且每个DAG中包括的数据块一定是同一目标数据中相邻的数据块。
需要说明的是,在上述划分DAG的两种实现方式中,同一DAG中属于同一目标数据的各个数据块在目标数据中全部相邻的。可选地,也可以采用其他划分DAG的方式,只需要保证每个DAG的多个数据块中的至少两个数据块在目标数据中相邻即可。
在划分得到多个DAG之后,计算节点是先将各个DAG缓存在内存中,然后在后续到达刷盘时机时,再通过步骤602将各个DAG下刷到存储节点。其中,刷盘时机可以为刷盘周期到达或外部指令触发刷盘,本发明方案对此不做限定。
在一种可能的实现方式,计算节点将各个DAG缓存在内存的各个缓存节点中,其中,每个DAG缓存在一个缓存节点中,也即是,每个DAG对应有一个缓存节点。
此外,缓存中各个DAG的索引可以基于DAG的标识和目标数据标识来确定。在一种可能的实现方式中,对于任一DAG,将该DAG的标识和该DAG包括的数据所在的目标数据的标识一起组合作为该DAG的索引。
图7是本发明方案提供的一种写数据的流程示意图。如图7所示,将各个需要被写入存储系统的文件(图7中示例为文件1、文件2、文件3、…文件t)划分后得到各个DAG。每个DAG缓存在一个缓存节点中,且每个DAG的索引为文件标识+DAG标识,图7中表示为FileUUID_DAGID。
其中,对于任一DAG,可以将DAG中的数据的地址偏移值和分块大小之间的商值来作为该DAG的标识,其中,DAG中的数据的地址偏移值可以是指该DAG中的起始数据的逻辑偏移地址,分块大小具体可以为128M。
需要说明的是,各个DAG写入缓存节点时,也是以数据块为单位依次写入的。如图7所示,每个DAG的128M数据以1M为单位依次写入缓存节点,每1M的数据写在缓存节点的一个缓存页面上,各个缓存页面上的数据通过数据链表来指示如何连接的。
具体地,计算节点在向缓存中写入一个DAG中的数据块时,对于该DAG中的任一数据块,先查找等待队列(wait queue)是否有该DAG对应的缓存节点,如果有对应的缓存节点,则将该数据块写入该缓存节点,并更新该缓存节点的数据链表。如果等待队列中没有对应的缓存节点,则等待分配新的缓存节点,在有的新的缓存节点后,将该新的缓存节点添加到等待队列中,并在缓存队列中建立该新的缓存节点和该DAG之间的对应关系,然后将该数据块写入该新的缓存节点,并更新该新的缓存节点的数据链表。
如图7所述,等待队列中每个缓存节点对应一个DAG的索引,每个缓存节点负责存储对应的DAG的各个1M的数据块。
在本发明方案中,由于每个DAG中至少包括目标数据中的部分连续数据,因此为了避免后续需要从不同存储节点读取目标数据中的连续中的数据,可以让属于同一DAG的数据块存储在同一存储节点上。如此,后续在读取某个DAG中目标数据中的相邻数据块时,便可从同一存储节点读取,避免了需要跨节点才能获取到同一DAG中的数据,从而提高了读取目标数据中的连续数据的效率。
具体地,对于写数据过程中生成的各个校验组,同一校验组中的数据块分布于不同DAG中的数据块,不同校验组中属于同一DAG的数据块存储在存储系统的同一存储节点上,从而避免后续需要从不同存储节点读取同一目标数据中的部分连续数据。
因此,在一种可能的实现方式中,步骤602的实现过程可以为:对于多个DAG的N个DAG,按照“每次从N个DAG中分别取出一个数据块,将取出的N个数据块作为一个校验组中的数据块,将取出的N个数据块的校验块作为同一校验组中的校验块”的方式,将N个DAG写入存储系统。在写入的过程中,需要保证不同EC校验组中属于同一DAG的数据块存储在存储系统的同一存储节点上。
在配置了前述分区表的情况下,上述存储N个DAG实现过程具体可以为:在首次取出N个数据块后,从分区表的多个分区中确定第一目标分区,将首次取出的N个数据块写入第一目标分区对应的N个数据块存储器中,将首次取出的N个数据块的校验块写入第一目标分区对应的M个校验块存储器中。确定每个DAG取出的数据块写入的数据块存储器所在的存储节点,得到与N个DAG各自对应的存储节点,将N个DAG各自对应的存储节点组合为一个存储节点集合,为了后续便于说明,将该存储节点集合称为第一存储节点集合。在非首次从这N个DAG中分别取出一个数据块后,从分区表的多个分区中确定第二目标分区,第二目标分区需要满足这样的条件:第二目标分区对应的各个数据块存储器所在的存储节点组成的存储节点集合和前述的第一存储节点集合为同一存储节点集合。然后根据与N个DAG各自对应的存储节点,将非首次取出的N个数据块分别写入第二目标分区的N个数据块存储器中,以使同一DAG非首次取出的数据块和首次取出的数据块写在同一存储节点上。
比如,对于图3所示的EC分区表(也即是N=4),在首次从4个DAG(4个DAG分别标记为DAG1、DAG2、DAG3、DAG4)中分别取出4个数据块后,假设随机从该分区表中确定的第一目标分区为分区1,则将首次取到的4个数据块分别写至分区1的Mem1至Mem4对应位置上的存储器上,也即是,这4个数据块中DAG1的数据块写至N1-D1,DAG2的数据块写至N2-D3,DAG3的数据块写至N3-D7,DAG4的数据块写至N4-D6。记录DAG和存储接节点之间的对应关系则为:DAG1对应存储节点1、DAG2对应存储节点2、DAG3对应存储节点3、DAG4对应存储节点4。并且这4个DAG各自对应的存储节点组成的存储节点集合为(存储节点1、存储节点2、存储节点3和存储节点4)。
后续在非首次从这个4个DAG中分别取出4个数据块后,需要从EC分区表中查找满足如下条件的分区:分区中数据块存储器所在的存储节点组成的存储节点集合为(存储节点1、存储节点2、存储节点3和存储节点4)。如图3所示,分区1、分区2以及分区3满足该条件,因此在非首次取出4个数据块后,则从这三个分区中再随机确定一个第二目标分区。假设第二目标分区为分区3,因为分区3中Mem3位置上的存储器为存储节点1上的存储器,而前述DAG1对应的存储节点为存储节点1,因此将此次取出的DAG1的数据块写至分区3的Mem3位置上的N1-D3,依次类推,将此次取出的DAG2的数据块写至分区3的Mem1位置上的N2-D4,此次取出的DAG3的数据块写至分区3的Mem2位置上的N3-D2,此次取出的DAG4的数据块写至分区3的Mem4位置上的N4-D3。
也即是,对于任一校验组,将该校验组写入存储系统的实现方式具体可以为:从分区表的多个分区中选择目标分区,基于目标分区所对应的存储器将该校验组中的数据块写入存储系统。其中,这多个分区中至少有两个分区对应的部分或全部存储器所在的存储节点相同,以实现将不同校验组中属于目标数据中的相邻数据块存储在同一存储节点上。
进一步地,在将分区表中的各个分区划分为PLG的情况下,上述存储N个DAG实现过程具体可以为:先从分区表中为这N个DAG分配一个目标PLG,在首次取出N个数据块后,从目标PLG的多个分区中选择一个分区作为第一目标分区,将首次取出的N个数据块写入第一目标分区的N个数据块存储器中,将首次取出的N个数据块的校验块写入第一目标分区的M个校验块存储器中。确定每个DAG取出的数据块写入的数据块存储器所在的存储节点,得到与N个DAG各自对应的存储节点。在非首次从这N个DAG中分别取出一个数据块后,从该目标PLG的多个分区中直接选择一个分区作为第二目标分区。然后根据与N个DAG各自对应的存储节点,将非首次取出的N个数据块分别写入第二目标分区的N个数据块存储器中,以使同一DAG非首次取出的数据块和首次取出的数据块写在同一存储节点上。
比如,对于图3所示的EC分区表(也即是N=4),假设预先已经将分区1至分区3划分为一个PLG,且标记为PLG1。对于需要下刷的4个DAG(4个DAG分别标记为DAG1、DAG2、DAG3、DAG4),在首次从这4个DAG中分别取出4个数据块后,从EC分区表已经划分好的PLG中选择一个目标PLG,假设目标PLG为PLG1,然后从PLG1包括的分区中随机选择一个分区作为第一目标分区,假设第一目标分区为分区1,则将首次取到的4个数据块分别写至分区1的Mem1至Mem4对应位置上的存储器上,也即是,这4个数据块中DAG1的数据块写至N1-D1,DAG2的数据块写至N2-D3,DAG3的数据块写至N3-D7,DAG4的数据块写至N4-D6。记录DAG和存储接节点之间的对应关系则为:DAG1对应存储节点1、DAG2对应存储节点2、DAG3对应存储节点3、DAG4对应存储节点4。
后续在非首次从这个4个DAG中分别取出4个数据块后,则直接从PLG1包括的三个分区中再随机选择一个分区作为第二目标分区。假设第二目标分区为分区3,因为分区3中Mem3位置上的存储器为存储节点1上的存储器,而前述DAG1对应的存储节点为存储节点1,因此将此次取出的DAG1的数据块写至分区3的Mem3位置上的N1-D3,依次类推,将此次取出的DAG2的数据块写至分区3的Mem1位置上的N2-D4,此次取出的DAG3的数据块写至分区3的Mem2位置上的N3-D2,此次取出的DAG4的数据块写至分区3的Mem4位置上的N4-D3。
通过以上对比不难发现,在针对EC分区表配置了PLG之后,可以明显缩短非首次取出n个数据块后写数据的流程,从而提高写数据的效率。
也即是,在针对分区表配置了PLG的情况下,将各个校验组写入存储系统的实现方式可以为:对于第一校验组,从前述的一个或多个PLG中选择目标PLG,从目标PLG中选择第一目标分区,基于第一目标分区将第一校验组中的数据块写入存储系统,第一校验组为其中一个校验组。对于第二校验组,从目标PLG中选择第二目标分区,基于第二目标分区将第二校验组中的数据块写入存储系统。其中,第二校验组中至少一个数据块和第一校验组中的数据块在目标数据中相邻。
基于提前配置的PLG,对于存在相邻数据块的不同校验组,可以在已经存储了一个校验组的情况下,对于另一个待存储的校验组快速锁定要存储的分区,进而提高写数据的效率。
另外,上述从目标PLG包括的多个分区中选择一个分区具体可以通过随机或轮询的方式实现,本发明方案对此不做详细说明。
此外,上述从EC分区表中为这N个DAG分配一个目标PLG也可以按照随机或轮询的方式从EC分区表包括的多个PLG中确定目标PLG,本发明方案同样对此不做详细说明。
此外,如前述介绍,数据块是以Plog为基本单元存储的,因此,在每次存储N个数据块时,先从确定的目标分区中申请一个Plog,然后将这N个数据块写到申请的Plog中。具体地,从目标分区包括的多个Plog中申请目标Plog;将取出的N个数据块写入目标Plog中N个数据块存储器各自所对应的存储空间,将N个数据块对应的校验块写入目标Plog中M个校验块存储器各自所对应的存储空间。此处的目标分区可以为前述的第一目标分区或第二目标分区。
具体地,图7所示,在将各个DAG缓存到各个缓存节点之后,刷盘线程在达到刷盘时机时,随机从等待队列(wait queue)中选择N个缓存节点。图7中假设N为3,刷盘线程则随机从等待队列中选择了三个缓存节点(如图7中方框所示的三个缓存节点)添加到工作队列(work queue)中。刷盘线程按一定策略(包括但不限于随机或轮询的方式)为工作队列分配PLG(图7中假设分配的PLG为PLG1),并将PLG1和这三个缓存节点所缓存的DAG之间的对应关系记入工作队列的描述信息中。
在下刷数据时,刷盘线程在工作队列中的三个缓存节点中横向摘取3个缓存页面(每个缓存页面上缓存了一个数据块中的数据)并计算EC校验块。之后刷盘线程按一定策略(包括但不限于随机或轮询)选取PLG1中的分区,并在该分区申请Plog,刷盘线程将数据块和校验块写入申请的Plog中,并将数据块存储的位置信息更新到存储系统的数据索引模块,最后刷盘线程将刷盘成功的缓存页面从缓存的数据链表中摘除并释放。
基于上述实施例的写数据方式,便可实现将同一DAG中不同数据块存储到同一存储节点上,由于每个DAG包括多个数据块中的至少两个数据块在目标数据中相邻,因此便可实现目标数据中的一段连续数据写在同一存储节点上,这样后续负责处理该连续数据中的数据的计算节点在执行任务时,便可从同一存储节点读取到该段连续数据,避免了需要跨存储节点才能访问到该段连续数据,从而提高了计算节点获取数据的速度,进而提高了计算节点执行任务的效率。
下面以图8所示的存储结构对本发明方案提供的写数据方法的存储结果进一步解释说明。
图8是本发明方案提供的一种写数据后的存储结果示意图。如图8所示,假设图7中添加至工作队列的三个缓存节点中缓存的DAG分别为DAG1、DAG2和DAG3,每个DAG中的数据块在目标数据中全部相邻。为了后续便于说明,如图7所示,将DAG1中各个数据块分别标记为1-1、1-2、1-3等等,将DAG2中各个数据块分别标记为2-1、2-2、2-3等等,将DAG3中各个数据块分别标记为3-1、3-2、3-3等等。为DAG1、DAG2和DAG3分配的PLG为图8所示的PLG。如图8所示,该PLG中包括分区1和分区2,分区1中的存储空间被划分为Plog1和Plog2,分区2中的存储空间被划分为Plog3和Plog4。各个分区中包括的磁盘的相应标记的解释和图3中磁盘的相应标记的解释一致,在此不再赘述。
如此,在首次从DAG1、DAG2和DAG3中取出三个数据块时,假设取出的数据块分别为1-1、2-1、3-1,首次从PLG中确定的第一目标分区为图8中的分区1,且申请的Plog为Plog1,则将数据块1-1写在N1-D1(也即是存储节点1的磁盘1)上,将数据块2-1写在N2-D2(也即是存储节点2的磁盘2)上,数据块3-1写在N3-D3(也即是存储节点3的磁盘3)上。
第二次取出的数据块分别为1-2、2-2、3-2,第二次从PLG中确定的第二目标分区为图8中的分区1,且申请的Plog为Plog2,则将数据块1-2写在N1-D1上,将数据块2-2写在N2-D2上,数据块3-2写在N3-D3上。
第三次取出的数据块分别为1-3、2-3、3-3,第三次从PLG中确定的第二目标分区为图8中的分区2,且申请的Plog为Plog3,则将数据块1-3写在N1-D3上,将数据块2-3写在N2-D1上,数据块3-3写在N3-D2上,以保证DAG1的数据块都写在存储节点1上,DAG2的数据块都写在存储节点2上,DAG3的数据块都写在存储节点3上。
第四次取出的数据块分别为1-4、2-4、3-4,第四次从PLG中确定的第二目标分区为图8中的分区2,且申请的Plog为Plog4,则将数据块1-4写在N1-D3上,将数据块2-4写在N2-D1上,数据块3-4写在N3-D2上,同样保证DAG1的数据块都写在存储节点1上,DAG2的数据块都写在存储节点2上,DAG3的数据块都写在存储节点3上。
基于图8所示的存储结果可知,通过本发明方案提供的写数据方法,能够实现将同一DAG的不同数据块写在同一存储节点上,也即是能够实现将目标数据中的相邻数据块存储到同一存储节点上,这样后续从同一个存储节点便可读取到目标数据中的一段连续数据,无需跨节点访问,从而提高了读取目标数据中的一段连续数据的效率。这样后续负责处理该连续数据中的数据的计算节点在执行任务时,便可从同一存储节点读取到该段连续数据,避免了需要跨存储节点才能访问到该段连续数据,从而提高了计算节点获取数据的速度,进而提高了计算节点执行任务的效率。
相对于将一段连续数据中的数据块和对应校验块分别打散存储在不同的存储节点上的存储方法,本发明方案提供的存储数据的方式在数据分块的读取带宽上可以提升2.7~3.6倍。并且存储系统中包括的存储节点越多,本发明方案提供的存储数据的方式在数据分块的读取带宽提升方面表现越明显。
综上所述,通过本发明方案提供的写数据方法,能够实现将目标数据中的部分相邻数据块写在同一存储节点上,这样后续负责处理该相邻数据块中的数据的计算节点在执行任务时,便可从同一存储节点读取到该相邻数据块中的数据。相对于相关技术将目标数据中一段连续数据打散分别存储在不同的存储点节点上,本发明方案提供的写数据方法避免了需要跨存储节点才能访问到该相邻数据块中的数据,从而提高了读取相邻数据块中的数据的效率,进而提升了计算节点执行任务的效率。也即是,通过本发明方案提供的写数据方法,不仅可以通过校验组技术实现存储系统的低成本,又能保证后续计算节点执行任务的高性能。
图9是本发明方案提供的一种写数据装置的结构示意图。该装置应用于存储系统,该存储系统包括多个存储节点。如图9所示,该装置900包括如下几个模块。
接收模块901,用于接收写数据请求,写数据请求携带需要被写入存储系统的目标数据。具体实现方式可以参考前述图6实施例中的步骤601。
存储模块902,用于将目标数据写入存储系统中,其中,存储系统包括多个存储节点,同一个校验组的数据块存储在不同的存储节点,不同校验组存储于同一存储节点的数据块中至少有两个数据块在目标数据中相邻。具体实现方式可以参考前述图6实施例中的步骤602。
可选地,多个存储节点中每个存储节点包括多个存储器;其中,存储于同一存储节点的目标数据中相邻数据块分布在同一存储节点的不同存储器中。
可选地,同一校验组的数据块中至少两个数据块在目标数据中不相邻。
可选地,装置还包括:
划分模块,用于将目标数据划分为多个数据亲和组DAG,多个DAG中每个DAG包括多个数据块,多个数据块中的至少两个数据块在目标数据中相邻;
相应地,同一校验组中的数据块分布于不同DAG,不同校验组中属于同一DAG的数据块存储在同一存储节点上。
可选地,多个存储节点中每个存储节点包括多个存储器,针对存储系统配置有分区表,分区表包括多个分区,每个分区对应多个存储器;
相应地,存储模块用于:
对于任一校验组,从多个分区中选择目标分区,基于目标分区所对应的存储器将任一校验组中的数据块写入存储系统;
其中,多个分区中至少有两个分区对应的部分或全部存储器所在的存储节点相同,将不同校验组中属于目标数据中的相邻数据块存储在同一存储节点上。
可选地,每个分区对应N+M个存储器,N为一个校验组包括的数据块的数量,M为一个校验组包括的校验块的数量;
多个分区中至少有两个分区对应的N个存储器所在的存储节点相同。
可选地,装置还包括:
归类模块,用于将多个分区中对应的部分或全部存储器所在存储节点相同的分区归类为一个分区位置组PLG,得到一个或多个PLG;
相应地,存储模块用于:
对于第一校验组,从一个或多个PLG中选择目标PLG,从目标PLG中选择第一目标分区,基于第一目标分区将第一校验组中的数据块写入存储系统,第一校验组为其中一个校验组;
对于第二校验组,从目标PLG中选择第二目标分区,基于第二目标分区将第二校验组中的数据块写入存储系统,第二校验组中至少一个数据块和第一校验组中的数据块在目标数据中相邻。
可选地,同一PLG的不同分区中属于同一存储节点的存储器不同。
可选地,校验组是纠删码EC校验组。
综上所述,通过本发明方案提供的写数据方法,能够实现将目标数据中的部分相邻数据块写在同一存储节点上,这样后续负责处理该相邻数据块中的数据的计算节点在执行任务时,便可从同一存储节点读取到该相邻数据块中的数据。相对于相关技术将目标数据中一段连续数据打散分别存储在不同的存储点节点上,本发明方案提供的写数据方法避免了需要跨存储节点才能访问到该相邻数据块中的数据,从而提高了读取相邻数据块中的数据的效率,进而提升了计算节点执行任务的效率。也即是,通过本发明方案提供的写数据方法,不仅可以通过校验组技术实现存储系统的低成本,又能保证后续计算节点执行任务的高性能。
需要说明的是:上述实施例提供的写数据装置在写数据时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的写数据装置与写数据方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意结合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机指令时,全部或部分地产生按照本发明方案所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如:同轴电缆、光纤、数据用户线(digital subscriber line,DSL))或无线(例如:红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如:软盘、硬盘、磁带)、光介质(例如:数字通用光盘(digital versatile disc,DVD))、或者半导体介质(例如:固态硬盘(solid state disk,SSD))等。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述为本发明提供的实施例,并不用以限制本发明方案,凡在本发明方案的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明方案的保护范围之内。

Claims (20)

1.一种写数据的方法,其特征在于,所述方法包括:
接收写数据请求,所述写数据请求携带需要被写入存储系统的目标数据;
将所述目标数据写入所述存储系统中,其中,所述存储系统包括多个存储节点,同一个校验组的数据块存储在不同的存储节点,不同校验组存储于同一存储节点的数据块中至少有两个数据块在所述目标数据中相邻。
2.如权利要求1所述的方法,其特征在于,所述多个存储节点中每个存储节点包括多个存储器;
存储于同一存储节点的所述目标数据中相邻数据块分布在所述同一存储节点的不同存储器中。
3.如权利要求1或2所述的方法,其特征在于,同一校验组的数据块中至少两个数据块在所述目标数据中不相邻。
4.如权利要求1至3任一所述的方法,其特征在于,所述将所述目标数据写入存储系统中之前,所述方法还包括:
将所述目标数据划分为多个数据亲和组DAG,所述多个DAG中每个DAG包括多个数据块,所述多个数据块中的至少两个数据块在所述目标数据中相邻;
相应地,同一校验组中的数据块分布于不同DAG,不同校验组中属于同一DAG的数据块存储在同一存储节点上。
5.如权利要求1至4任一所述的方法,其特征在于,所述多个存储节点中每个存储节点包括多个存储器,针对所述存储系统配置有分区表,所述分区表包括多个分区,每个分区对应多个存储器;
相应地,所述将所述目标数据写入存储系统中,包括:
对于任一校验组,从所述多个分区中选择目标分区,基于所述目标分区所对应的存储器将所述任一校验组中的数据块写入所述存储系统;
其中,所述多个分区中至少有两个分区对应的部分或全部存储器所在的存储节点相同,将不同校验组中属于所述目标数据中的相邻数据块存储在同一存储节点上。
6.如权利要求5所述的方法,其特征在于,每个分区对应N+M个存储器,所述N为一个校验组包括的数据块的数量,所述M为一个校验组包括的校验块的数量;
所述多个分区中至少有两个分区对应的N个存储器所在的存储节点相同。
7.如权利要求5或6所述的方法,其特征在于,所述方法还包括:
将所述多个分区中对应的部分或全部存储器所在存储节点相同的分区归类为一个分区位置组PLG,得到一个或多个PLG;
相应地,所述对于任一校验组,从所述多个分区中选择目标分区,基于所述目标分区所对应的存储器将所述任一校验组中的数据块写入所述存储系统,包括:
对于第一校验组,从所述一个或多个PLG中选择目标PLG,从所述目标PLG中选择第一目标分区,基于所述第一目标分区将所述第一校验组中的数据块写入所述存储系统,所述第一校验组为其中一个校验组;
对于第二校验组,从所述目标PLG中选择第二目标分区,基于所述第二目标分区将所述第二校验组中的数据块写入所述存储系统,所述第二校验组中至少一个数据块和所述第一校验组中的数据块在所述目标数据中相邻。
8.如权利要求7所述的方法,其特征在于,同一PLG的不同分区中属于同一存储节点的存储器不同。
9.如权利要求1至8任一所述的方法,其特征在于,所述校验组是纠删码EC校验组。
10.一种写数据的装置,其特征在于,所述装置包括:
接收模块,用于接收写数据请求,所述写数据请求携带需要被写入存储系统的目标数据;
存储模块,用于将所述目标数据写入所述存储系统中,其中,所述存储系统包括多个存储节点,同一个校验组的数据块存储在不同的存储节点,不同校验组存储于同一存储节点的数据块中至少有两个数据块在所述目标数据中相邻。
11.如权利要求10所述的装置,其特征在于,所述多个存储节点中每个存储节点包括多个存储器;
存储于同一存储节点的所述目标数据中相邻数据块分布在所述同一存储节点的不同存储器中。
12.如权利要求10或11所述的装置,其特征在于,同一校验组的数据块中至少两个数据块在所述目标数据中不相邻。
13.如权利要求10至12任一所述的装置,其特征在于,所述装置还包括:
划分模块,用于将所述目标数据划分为多个数据亲和组DAG,所述多个DAG中每个DAG包括多个数据块,所述多个数据块中的至少两个数据块在所述目标数据中相邻;
相应地,同一校验组中的数据块分布于不同DAG,不同校验组中属于同一DAG的数据块存储在同一存储节点上。
14.如权利要求10至13任一所述的装置,其特征在于,所述多个存储节点中每个存储节点包括多个存储器,针对所述存储系统配置有分区表,所述分区表包括多个分区,每个分区对应多个存储器;
相应地,所述存储模块用于:
对于任一校验组,从所述多个分区中选择目标分区,基于所述目标分区所对应的存储器将所述任一校验组中的数据块写入所述存储系统;
其中,所述多个分区中至少有两个分区对应的部分或全部存储器所在的存储节点相同,将不同校验组中属于所述目标数据中的相邻数据块存储在同一存储节点上。
15.如权利要求14所述的装置,其特征在于,每个分区对应N+M个存储器,所述N为一个校验组包括的数据块的数量,所述M为一个校验组包括的校验块的数量;
所述多个分区中至少有两个分区对应的N个存储器所在的存储节点相同。
16.如权利要求14或15所述的装置,其特征在于,所述装置还包括:
归类模块,用于将所述多个分区中对应的部分或全部存储器所在存储节点相同的分区归类为一个分区位置组PLG,得到一个或多个PLG;
相应地,所述存储模块用于:
对于第一校验组,从所述一个或多个PLG中选择目标PLG,从所述目标PLG中选择第一目标分区,基于所述第一目标分区将所述第一校验组中的数据块写入所述存储系统,所述第一校验组为其中一个校验组;
对于第二校验组,从所述目标PLG中选择第二目标分区,基于所述第二目标分区将所述第二校验组中的数据块写入所述存储系统,所述第二校验组中至少一个数据块和所述第一校验组中的数据块在所述目标数据中相邻。
17.如权利要求16所述的装置,其特征在于,同一PLG的不同分区中属于同一存储节点的存储器不同。
18.如权利要求10至17任一所述的装置,其特征在于,所述校验组是纠删码EC校验组。
19.一种写数据装置,其特征在于,所述装置包括存储器和处理器;
所述存储器用于存储支持所述装置执行权利要求1-9任一项所述的方法的程序,以及存储用于实现权利要求1-9任一项所述的方法所涉及的数据;
所述处理器被配置为用于执行所述存储器中存储的程序。
20.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行权利要求1-9任一项所述的方法。
CN202111061561.9A 2021-09-10 2021-09-10 写数据的方法、装置及计算机存储介质 Pending CN115793957A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111061561.9A CN115793957A (zh) 2021-09-10 2021-09-10 写数据的方法、装置及计算机存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111061561.9A CN115793957A (zh) 2021-09-10 2021-09-10 写数据的方法、装置及计算机存储介质

Publications (1)

Publication Number Publication Date
CN115793957A true CN115793957A (zh) 2023-03-14

Family

ID=85417115

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111061561.9A Pending CN115793957A (zh) 2021-09-10 2021-09-10 写数据的方法、装置及计算机存储介质

Country Status (1)

Country Link
CN (1) CN115793957A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117707437A (zh) * 2024-02-06 2024-03-15 济南浪潮数据技术有限公司 基于分布式存储系统的虚拟磁盘存储方法及装置

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117707437A (zh) * 2024-02-06 2024-03-15 济南浪潮数据技术有限公司 基于分布式存储系统的虚拟磁盘存储方法及装置

Similar Documents

Publication Publication Date Title
US9697219B1 (en) Managing log transactions in storage systems
US20190340157A1 (en) Log-structured storage device format
US11243706B2 (en) Fragment management method and fragment management apparatus
US9665485B2 (en) Logical and physical block addressing for efficiently storing data to improve access speed in a data deduplication system
US11861204B2 (en) Storage system, memory management method, and management node
CN111679795B (zh) 无锁并发io处理方法及其装置
TW201220197A (en) for improving the safety and reliability of data storage in a virtual machine based on cloud calculation and distributed storage environment
WO2017025039A1 (zh) 一种面向闪存存储的数据访问方法及其装置
US10365827B1 (en) Spread space tracking
GB2555682A (en) Repartitioning data in a distributed computing system
WO2023035646A1 (zh) 一种扩展内存的方法、装置及相关设备
CN111158602A (zh) 数据分层存储方法、读取方法、存储主机及存储系统
CN111061690B (zh) 一种基于rac的数据库日志文件读取方法和装置
US11842051B2 (en) Intelligent defragmentation in a storage system
US7725654B2 (en) Affecting a caching algorithm used by a cache of storage system
CN114780025A (zh) 软件raid请求处理方法、控制器及raid存储系统
US10268594B2 (en) Implementing paging device selection based on wear-level data
CN115793957A (zh) 写数据的方法、装置及计算机存储介质
US10061725B2 (en) Scanning memory for de-duplication using RDMA
US9009204B2 (en) Storage system
US11093169B1 (en) Lockless metadata binary tree access
US20210334236A1 (en) Supporting distributed and local objects using a multi-writer log-structured file system
CN115904795A (zh) 存储系统中的数据存储方法及装置
US11144445B1 (en) Use of compression domains that are more granular than storage allocation units
CN116450053B (zh) 数据存储方法、装置、系统、电子设备和存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication