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

数据访问方法、存储系统及存储节点

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


数据访问方法、存储系统及存储节点

技术领域

本申请涉及存储技术领域,尤其涉及一种数据访问方法、存储系统及存储节点。

背景技术

存算分离是指把计算和存储进行分离,把存储节点的存储空间由所有计算节点进行共享。目前,在存储分离的存储系统中,存储节点上部署有文件系统,计算节点在访问存储节点之前,需要将所访问的数据转换为文件系统的中的访问路径,以数据库存算分离系统为例,计算节点需要将对某个表中的某个页的访问转换为对文件系统中某个文件的访问路径,而在对文件的访问过程中,存储节点需要根据文件的访问路径及文件系统的目录结构解析出所访问的数据的存储位置,这导致数据的访问效率比较低。因此,如何提高存储系统中的数据的访问效率成为亟待解决的技术问题。

发明内容

本申请提供了一种数据访问方法、存储系统、及存储节点。本申请提供的技术方案在数据访问时,不需要经过文件系统,提高了数据的访问效率。

第一方面,本申请提供一种存储系统。所述存储系统包括计算节点和第一存储节点。计算节点用于发送写请求至第一存储节点,写请求携带数据集标识、数据及数据的数据标识,该数据归属于数据集标识对应的数据集。第一存储节点用于接收写请求,为写请求中的数据分配存储地址,将该数据存储至该存储地址,并建立写请求中的数据集标识、数据标识与该存储地址的映射。

在本申请提供的存储系统中,计算节点在写请求中直接携带数据集标识及数据标识,而不携带数据所述文件的路径。存储节点在接收到写请求时,在将数据存储至存储空间之后,记录数据集标识、数据标识和该存储空间的存储地址之间的映射关系,从而使得以后读数据或写数据时可以基于该映射关系之间找到存储空间,而不需要经过文件系统的目录结构及文件的路径去逐级去确定数据的存储地址,从而提供数据的存储效率。

此外,存储节点上建立数据集标识、数据标识与该存储地址的映射,可以使得计算节点从存储节点上读取数据时,存储节点可以基于该映射快速地确定数据的存储空间,从而可以快速地读取到数据,即提高数据读取速率。

在一些实现方式中,所述计算节点还用于发送读请求,读请求中携带数据集标识及数据标识。第一存储节点还用于接收读请求,并根据读请求中的数据集标识、数据标识及第一存储节点上的映射获取数据的存储地址,并从该存储地址处读取数据。

该实现方式中,因为在第一存储节点中记录了数据集标识、数据标识和数据之间的映射,因此可以使得第一存储节点基于该映射可以便捷地确定数据的存储地址,从而使得第一存储节点可以高效率地读取到数据。

在一些实现方式中,计算节点还用于发送数据库实例的创建请求至第一存储节点。第一存储节点还用于根据创建请求为数据库实例设置数据集,生成数据集标识,并将数据集标识返回给计算节点。

在一些实现方式中,创建请求中携带数据库实例的标识;第一存储节点在生成数据集标识时,具体用于:为数据集设置存储卷,并根据数据库实例的标识、存储卷的标识及数据集的标识生成数据集标识。

在一些实现方式中,所述方法还包括:存储系统还包括第二存储节点,计算节点还用于发送数据库实例的创建请求至第二存储节点;第二存储节点还用于:根据创建请求为数据库实例设置数据集,生成数据集标识,并将数据集标识返回给计算节点。

该实现方式中,数据在第一存储节点上的存储空间是系统中第二存储节点分配的,这样可以减轻第一存储节点的处理开销,从而可以使得第一存储节点有更多的计算资源来完成数据的存储,进而可以提高数据的存储效率。

在一些实现方式中,创建请求中携带数据库实例的标识;第二存储节点在生成数据集标识时,具体用于:为数据集设置存储卷及归属节点信息,并根据数据库实例的标识、存储卷的标识、归属节点信息及数据集的标识生成数据集标识。

在一些实现方式中,在发送写请求至第一存储节点之前,计算节点还用于根据数据集标识中的归属节点信息确定数据集的归属节点为第一存储节点。

在一些实现方式中,所述数据集为页面池,所述页面池用于记录所述数据库实例所生成的页面。

在一些实现方式中,数据集为日志对象,日志对象用于记录数据库实例对应的日志,日志用于记录计算节点对述数据库实例的页面的修改。

第二方面,本申请提供了一种存储节点。该存储节点包括接收模块和处理模块。接收模块用于接收写请求,写请求携带数据集标识、数据及数据的数据标识,所述数据归属于数据集标识对应的数据集。处理模块用于:为数据分配存储地址,将数据存储至所述存储地址,建立数据集标识、数据标识与所述存储地址的映射。

在一些实现方式中,接收模块还用于接收读请求,读请求中携带数据集标识及数据标识;处理模块还用于:根据数据集标识、数据标识及所述映射获取存储地址,并从所述存储地址处读取数据。

在一些实现方式中,接收模块还用于接收数据库实例的创建请求;处理模块还用于:根据创建请求为数据库实例设置数据集,生成数据集标识。存储节点还包括发送模块,用于将数据集标识返回给计算节点。

在一些实现方式中,创建请求中携带数据库实例的标识;处理模块在生成数据集标识时,具体用于:为数据集设置存储卷,并根据数据库实例的标识、存储卷的标识及数据集的标识生成数据集标识。

在一些实现方式中,处理模块在生成数据集标识时,具体用于:为数据集设置存储卷及归属节点信息,并根据数据库实例的标识、存储卷的标识、归属节点信息及数据集的标识生成数据集标识。

在一些实现方式中,数据集为页面池,页面池用于记录数据库实例所生成的页面。

在一些实现方式中,数据集为日志对象,日志对象用于记录数据库实例对应的日志,日志用于记录计算节点对数据库实例的页面的修改。

第三方面,本申请提供了一种数据访问方法。该方法包括:接收计算节点发送的写请求,写请求携带数据集标识、数据及数据的数据标识,所述数据归属于数据集标识对应的数据集;为所述数据分配存储地址,将所述数据存储至所述存储地址,建立数据集标识、数据标识与所述存储地址的映射。

在一些实现方式中,所述方法还包括:接收计算节点发送的读请求,读请求中携带数据集标识及数据标识;根据数据集标识、数据标识及所述映射获取所述存储地址,并从所述存储地址处读取数据。

在一些实现方式中,所述方法还包括:接收数据库实例的创建请求;根据创建请求为数据库实例设置数据集,生成所述数据集标识;将数据集标识返回给计算节点。

在一些实现方式中,创建请求中携带数据库实例的标识;生成数据集标识,包括:为数据集设置存储卷,并根据数据库实例的标识、存储卷的标识及数据集的标识生成数据集标识。

在一些实现方式中,生成所述数据集标识包括:为数据集设置存储卷及归属节点信息,并根据数据库实例的标识、存储卷的标识、归属节点信息及数据集的标识生成数据集标识。

在一些实现方式中,数据集为页面池,页面池用于记录数据库实例所生成的页面。

在一些实现方式中,数据集为日志对象,日志对象用于记录数据库实例对应的日志,日志用于记录计算节点对述数据库实例的页面的修改。

第四方面,本申请提供了一种计算节点。该计算节点包括该计算节点包括发送模块,该发送模块用于发送写请求至第一存储节点,写请求携带数据集标识、数据及数据的数据标识,该数据归属于数据集标识对应的数据集。

在一些实现方式中,发送模块还用于向第一存储节点发送读请求,读请求中携带数据集标识及数据标识。

在一些实现方式中,发送模块还用于发送数据库实例的创建请求至第一存储节点。计算节点还包括接收模块,用于接收来自第一存储节点的数据集标识。

可选地,创建请求中可以携带数据库实例的标识。相应地,数据集标识是根据数据库实例的标识、存储卷的标识及数据集的标识生成的。

在一些实现方式中,发送模块还用于发送数据库实例的创建请求至第二存储节点。计算节点还包括接收模块,用于接收第二存储节点发送的数据集标识。

在一些实现方式中,创建请求中可以携带数据库实例的标识。相应地,数据集标识根据数据库实例的标识、存储卷的标识、归属节点信息及数据集的标识生成的。

在一些实现方式中,数据集为页面池,页面池用于记录数据库实例所生成的页面。

在一些实现方式中,所述数据集为日志对象,所述日志对象用于记录所述数据库实例对应的日志,所述日志用于记录所述计算节点对所述述数据库实例的页面的修改。

第五方面,本申请提供了一种数据访问方法。该方法包括:计算节点发送写请求至第一存储节点,写请求携带数据集标识、数据及数据的数据标识,该数据归属于数据集标识对应的数据集。

在一些实现方式中,所述方法还包括:计算节点发送读请求,读请求中携带数据集标识及数据标识。

在一些实现方式中,所述方法还包括:计算节点发送数据库实例的创建请求至第一存储节点;计算节点接收来自第一存储节点的数据集标识。

可选地,创建请求中可以携带数据库实例的标识。相应地,数据集标识是根据数据库实例的标识、存储卷的标识及数据集的标识生成的。

在一些实现方式中,所述方法还包括:计算节点发送数据库实例的创建请求至第二存储节点;计算节点接收第二存储节点发送的数据集标识。

在一些实现方式中,创建请求中可以携带数据库实例的标识。相应地,数据集标识根据数据库实例的标识、存储卷的标识、归属节点信息及数据集的标识生成的。

在一些实现方式中,数据集为页面池,页面池用于记录数据库实例所生成的页面。

在一些实现方式中,所述数据集为日志对象,所述日志对象用于记录所述数据库实例对应的日志,所述日志用于记录所述计算节点对所述述数据库实例的页面的修改。

第六方面,本申请提供了一种存储节点,该存储节点包括存储器、通信接口和处理器。其中,通信接口的一种示例为网卡,处理器与可以称为控制器或控制单元。该存储节点可以用于实现第三方面中的数据访问方法。

第七方面,本申请提供了一种计算节点,该计算节点包括存储器、通信接口和处理器。其中,通信接口的一种示例为网卡,处理器与可以称为控制器或控制单元。该存储节点可以用于实现第五方面中的数据访问方法。

第八方面,本申请提供了一种计算机可读存储介质,该计算机可读介质存储用于存储节点执行的程序代码,该程序代码包括用于实现第三方面中的方法的指令。

第九方面,本申请提供了一种计算机可读存储介质,该计算机可读介质存储用于计算节点执行的程序代码,该程序代码包括用于实现第五方面中的方法的指令。

附图说明

图1为本申请一个实施例的存储系统的示例性架构图;

图2为本申请另一个实施例的存储系统的示例性架构图;

图3为本申请一个实施例的数据库示例注册方法的示例性流程图;

图4为本申请一个实施例的数据访问方法的示例性流程图;

图5为本申请一个实施例的日志数据的存储示意图;

图6为本申请一个实施例的页面数据的存储示意图;

图7为本申请另一个实施例的数据库实例注册方法的示例性流程图;

图8为本申请另一个实施例的数据访问方法的示意性流程图;

图9为本申请一个实施例的计算装置的示例性结构图;

图10为本申请一个实施例的存储装置的示例性结构图。

具体实施方式

图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,在实际应用中,一个计算节点110中的CPU 112的数量可以有多个,其中,一个CPU 112又可以具有一个或多个CPU核。本实施例不对CPU的数量,以及CPU核的数量进行限定。

内存113是指与处理器直接交换数据的内部存储器,它可以随时读写数据,而且速度很快,作为操作系统或其他正在运行中的程序的临时数据存储器。内存包括至少两种存储器,例如内存既可以是随机存取存储器,也可以是只读存储器(read only memory,ROM)。举例来说,随机存取存储器是动态随机存取存储器(dynamic random access memory,DRAM),或者存储级存储器(storage class memory,SCM)。

DRAM是一种半导体存储器,与大部分随机存取存储器(random access memory,RAM)一样,属于一种易失性存储器(volatile memory)设备。SCM是一种同时结合传统储存装置与存储器特性的复合型储存技术,存储级存储器能够提供比硬盘更快速的读写速度,但存取速度上比DRAM慢,在成本上也比DRAM更为便宜。然而,DRAM和SCM在本实施例中只是示例性的说明,内存还可以包括其他随机存取存储器,例如静态随机存取存储器(staticrandom access memory,SRAM)等。而对于只读存储器,举例来说,可以是可编程只读存储器(programmable read only memory,PROM)、可抹除可编程只读存储器(erasableprogrammable read only memory,EPROM)等。

另外,内存113还可以是双列直插式存储器模块或双线存储器模块(dual in-linememory 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需要将读/写数据请求中携带的地址转换为硬盘能够识别的地址。由此可见,控制单元101也具有一些简单的计算功能。

在实际应用中,控制单元101可具有多种形态。一种情况下,控制单元101包括CPU和内存。CPU用于执行地址转换以及读写数据等操作。内存用于临时存储将要写入硬盘105的数据,或者从硬盘105读取出来将要发送给计算节点110的数据。另一种情况下,

控制单元101的数量可以是一个,也可以是两个或两个以上。当存储节点100包含至少两个控制单元101时,硬盘105与控制单元101之间可具有归属关系。当硬盘105与控制单元101之间具有归属关系时,每个控制器只能访问归属于它的硬盘,因此这往往涉及到在控制单元101之间转发读/写数据请求,导致数据访问的路径较长。另外,如果存储空间不足,在存储节点100中增加新的硬盘105时需要重新绑定硬盘105与控制单元101之间的归属关系,操作复杂,导致存储空间的扩展性较差。

因此在另一种实施方式中,控制单元101的功能可以卸载到网卡104上。换言之,在图1所示的实施方式中,存储节点100内部不具有控制器101,而是由网卡104来完成数据读写、地址转换以及其他计算功能。此时,网卡104是一个智能网卡。它可以包含CPU和内存。CPU用于执行地址转换以及读写数据等操作。内存用于临时存储将要写入硬盘105的数据,或者从硬盘105读取出来将要发送给计算节点110的数据。存储节点100中的网卡104和硬盘105之间没有归属关系,网卡104可访问该存储节点100中任意一个硬盘105,因此在存储空间不足时扩展硬盘会较为便捷。

存储节点100中的硬盘105与控制单元101以及网卡104可以部署在相同的物理节点上,也可以部署在分离的物理节点上。

图1所示的为分布式存储系统的架构图,本申请实施例的方案还可以应用于集中式存储系统。在集中式存储系统中,计算节点的数据存储在一个存储节点中。集中式存储系统的架构如图2所示。其中存储节点100与计算节点110结构与图1中的相同,在此不再赘述。

在各个计算节点110中运行有各种应用,应用产生的数据通过计算节点发送至存储节点存储。以所述应用为数据库为例,在相关技术中,计算节点与存储节点之间通过文件系统进行数据的存储及访问。在存储节点中创建的文件系统需要挂载至计算节点使用,计算节点在存储或者读取存储节点中的数据时,需要首先将所访问的数据转换为对文件系统中的文件的访问,然后把文件在文件系统中的访问路径发送给存储节点,存储节点再根据访问路径及文件系统的目录结构找到对应的文件,从而实现对数据的访问,由于上述数据访问过程复杂,导致数据的访问效率低。本申请提供的实施例在进行数据访问时,计算节点直接携带数据本身的信息,而不需要将其转换为文件系统中的文件,存储节点根据数据的信息可以直接获取数据的地址,并根据所获取的地址访问数据,而不需要经过文件系统的目录结构去查找数据,从而提高了数据的访问效率。下面将对本申请实施例提供的技术方案做详细描述。为了方便描述,本申请实施例以数据库为例进行说明。

如图3所示,为本申请第一实施例提供的通过计算节点在存储节点注册数据库实例的方法的流程图。本实施第一实施例提供的是在图2的集中式存储系统中注册数据库实例的方法的流程图。

在S310中,计算节点110向存储节点100发送数据库实例的创建请求。相应地,存储节点100接收该创建请求。

在S320中,存储节点100为数据库实例设置数据集,并生成数据集标识。

在本实施例中,数据库实例可以包括两种类型的数据,一种为页面,一种为日志(log)。页面为数据库实例所对应的表的数据被分割为多个页面,每个页面存储多个行或者多个列的数据,用户对表中的操作会转换为对页面的操作。日志用于记录用户对每个页面的修改,在计算节点响应用户的操作对页面进行修改之后,生成日志用于记录对页面所做的修改,并将页面写入存储节点,这样,可以避免每做一次修改需要将页面存储至存储节点。

在本申请实施例中,针对这两种数据类型,设置了两种类型的数据集,一种类型的数据集为页面池,用于记录数据库实例所操作的表的页面的集合;另外一种类型的数据集是log对象,log对象用于记录数据库实例对应的日志的集合。

数据集为log对象时,数据集标识可以称为log对象标识。数据集为页面池时,数据集标识可以称为页面池标识。

在本实施的一种实现方式中,所述数据集标识包括数据库实例的标记加上数据集的标记。这样,通过该数据集标识就可获取数据集所归属的数据库实例。

在本实施例的另外一种实现方式中,存储节点100在为数据库实例设置后数据集后,还可以为数据集设置存储卷。该存储卷可以分配给一个数据集,也可以分配给多个数据集。在存储节点生成数据集标识时,可以将存储卷的标记加入所述数据集标识中,这样数据集的标识就包括数据库实例的标记、存储卷的标记及、数据集的标记。这样,通过该数据集标识就可获取数据集所归属的数据库实例及存储卷。

在S330中,存储节点100向计算节点110发送数据库实例的创建响应,该创建响应中携带数据集标识。

计算节点接收数据库实例的创建响应之后,可以记录数据库实例的创建响应中携带的数据集标识。

执行完S330之后,可以理解为计算节点在存储节点注册了数据库实例。此后,计算节点在根据用户的操作对数据库实例对应的表进行操作时,需要把所产生的数据记录在对应的数据集中。例如,将所操作的页面记录在页面池中,将生成的log记录在log对象中。计算节点将数据写入对应数据集的方法的一个示例性流程图如图4所示。

在S410中,计算节点向存储节点发送写请求,写请求携带数据集标识、数据及数据的数据标识,该数据归属于数据集标识对应的数据集。相应地,存储节点接收该写请求。

可选地,写请求中还可以携带数据大小。作为一个示例,该数据包括一个或多个日志时,写请求中还可以携带每个日志的数据大小。作为另一个示例,该数据包括一个或多个页面时,该写请求中可以携带每个页面的页面大小和页面标识。

在S420中,存储节点为写请求中的数据分配存储空间,将该数据存储至该存储空间,并建立写请求中的数据集标识、数据标识与该存储空间的存储地址之间的映射关系。

本实施例中,存储节点写入写请求中的数据时,可以进行写保序处理。写保序处理可以包括:地址偏移量大的数据的写操作结果返回前,要保证地址偏移量小的数据的写操作结构先返回。

此外,存储节点写入数据时,可以保证写操作的原子性,即要么全部数据写成功,要么全部数据写失败。

本实施例中,可选地,还可以包括:存储节点向计算节点发送写响应消息,该写响应消息用于指示数据写成功或写失败。

下面介绍计算节点请求向存储节点写入数据库实例的日志的一种实现方式。该实现方式中,S410中的写请求携带log对象标识(即数据集标识)、log标识(即数据标识)以及log(即数据)。

该实现方式中,存储卷以64兆(M)字节为一个寻址单元,即存储卷中每个存储地址对应的存储空间的大小为64M字节。

该实现方式中,在S420中,如图5所示,存储节点从一个存储卷的第一个寻址单元开始为写请求中的log分配多个寻址单元作为log对象。这多个寻址单元中的第一个寻址单元为log对象的元数据头存储空间,该第一个寻址单元中的8千字节用于记录其他每个寻址单元的起始地址和结束地址;其他寻址单元用于存储写请求中的log,并且,其他每个寻址单元中每个寻址单元尾部的8千字节存储空间用于记录该寻址单元的起始地址和结束地址。可以理解的是,这多个寻址单元的存储空间的大小应大于写请求中的log的大小。

存储节点可以按顺序为这多个个寻址单元中除第一个寻址单元外其他寻址单元中写入写请求中的log。其中,存储节点可以基于每个log的大小计算用于存储该log的存储空间相对于log对象的起始地址的偏移地址,然后将该log写入该存储空间中。

此外,存储节点还建立写请求中携带的log对象标识和写请求中的log标识以及该log对象的存储地址之间的映射关系。

下面介绍计算节点请求向存储节点写入数据库实例的页面的一种实现方式。该实现方式中,存储节点接收写请求之后,为数据库实例分配页面池对象,并生成该页面池对象的地址、页面标识和页面池对象标识之间的映射关系。写请求中携带的数据包括一个或多个页面时,存储节点可以基于写请求中携带的每个页面的页面标识和页面大小计算每个页面相对于页面池对象的存储地址的地址偏移量。例如,offset=page id*page_size,其中,offset表示页面标识为page id的页面的地址偏移量,page_size表示页面大小。

以page id从0开始编号且page_size为8千字节为例,如图6所示,page id为1、2、3时,对应的页面分别写到存储卷上地址偏移量为第2、3、4个8千字节的位置。

计算节点向存储节点写入数据之后,计算节点可以向存储节点发送读请求,从存储节点中读取数据库实例中的数据。计算节点从存储节点中读取数据的方法的一种实现方式如下:计算节点向存储节点发送读请求,该读请求携带与数据库实例对应的数据集标识和数据库实例中的数据的数据标识;存储节点接收计算节点发送的读请求,并根据读请求中的数据集标识、数据标识及存储节点在图4所示实施例中建立的映射关系获取该数据标识和该数据集标识同时关联的存储地址,从该存储地址处读取数据,并向计算节点发送读取到的数据。

图7为本申请另一个实施例的计算节点向存储节点注册数据库实例的方法的示例性流程图。本实施例提供的方法可以应用在图1所示的分布式存储系统中。

在S710中,计算节点向存储节点控制器发送数据库实例的创建请求。相应地,存储节点控制器接收该创建请求。

该计算节点可以是图1所示存储系统中任意计算节点110,该存储节点控制器可以是图1所示存储系统中指定的存储节点100。可选地,存储系统中的存储节点控制器可以是一个,也可以是多个。存储系统中哪些存储节点可以作为存储节点控制器可以是预先设置好的。

存储系统中有多个存储节点控制器的情况下,作为一种示例,计算节点可以通过轮询的方式选择当前应向哪个存储节点控制器发送数据库创建请求消息。

在S720中,存储节点控制器为数据库实例设置数据集,并生成数据集标识。

存储节点控制器为数据库实例设置数据集并生成数据集标识的实现方式,可以参考S320中存储节点为数据库实例设置数据集和生成数据集标识的实现方式。

参考S320的基础上,存储节点控制器还可以为数据库实例设置归属节点信息,并且,在生成数据集标识时,存储节点控制器基于该归属节点信息生成数据集标识。例如,该归属节点信息可以作为数据集标识的一部分。

作为一个示例,存储节点可以基于数据库实例标识、归属节点信息、数据集的标识和存储卷的标识生成数据集标识。基于数据库实例标识、归属节点信息、数据集的标识和存储卷的标识生成的数据集标识的一种示例如下:

在一些实现方式中,存储节点控制器可以通过轮询或负载均衡的方式为数据库实施例分配归属存储节点。

以轮询方式为例,若存储节点控制器为上一个数据库实例分配的归属存储节点为存储系统中的第一个存储节点100,则存储节点控制器为当前数据库实例分配的归属存储节点为存储系统中的第二个存储节点100。

以负载均衡方式为例,存储节点控制器所管理的每个存储节点可以周期性地向该存储节点控制器发送每个存储节点的存储负载,这样,存储节点控制器可以基于所管理的存储节点的存储负载为当前数据库实例分配归属存储节点,以使得存储节点控制器所管理的存储节点上的存储负载较为均衡。

在S730中,存储节点控制器向计算节点发送数据库实例的创建响应,该响应消息中携带数据集标识。相应地,计算节点接收该创建响应,并记录该创建响应中的数据集标识。

执行完S730之后,可以理解为计算节点在存储节点注册了数据库实例。此后,计算节点在根据用户的操作对数据库实例对应的表进行操作时,需要把所产生的数据记录在对应的数据集中。例如,将所操作的页面记录在页面池中,将生成的log记录在log对象中。计算节点将数据写入对应数据集的方法的一个示例性流程图如图8所示。

在S810中,计算节点生成写请求,计算节点确定处理所述写请求的存储节点。写请求携带数据集标识、数据库实例中的数据及数据的数据标识,该数据归属于数据集标识对应的数据集。

在计算节点的数据集标识中包括所述数据集的归属节点信息,可以根据所述数据集中的归属节点信息确定所述数据集的归属节点,所确定的归属节点即为处理所述写请求的节点

在S820中,计算节点向归属存储节点发送所述写请求。相应地,归属存储节点接收该写请求。该步骤可以参考S410,只需将其中的存储节点替换为归属存储节点即可。

在S830中,归属存储节点为写请求中的数据分配存储空间,将该数据存储至该存储空间,并建立写请求中的数据集标识、数据标识该存储空间的存储地址之间的映射关系。

该步骤可以参考S420,只需将其中的存储节点替换为归属存储节点即可。

本实施例中,可选地,还可以包括:归属存储节点向计算节点发送写响应消息,该写响应消息用于指示数据写成功或写失败。

该实施例中,计算节点向存储节点写入数据之后,计算节点可以向存储节点发送读请求,从存储节点中读取数据库实例中的数据。计算节点从存储节点中读取数据的方法的一种实现方式如下:计算节点向存储节点发送读请求,该读请求携带与数据库实例对应的数据集标识和数据库实例中的数据的数据标识;存储节点接收计算节点发送的读请求,并根据读请求中的数据集标识、数据标识及存储节点在图4所示实施例中建立的映射关系获取该数据标识和该数据集标识同时关联的存储地址,从该存储地址处读取数据,并向计算节点发送读取到的数据。

本实施例的一些实现方式中,计算节点可以将数据写入存储节点之前,可以将该数据划分为多个分片,并为每个分片确定对应的归属存储节点。

例如,计算节点可以将数据集标识中归属节点信息所指示的存储节点作为基准归属存储节点,并且,将该数据划分为M个分片,并为该M个分片生成N个校验分片,然后将基准归属存储节点作为这M+N个分片中的第一个分片的归属存储节点,将基准归属存储节点的下一个存储节点作为这M个分片中的第二分片的归属存储节点,将该下一个归属存储节点的下一个存储节点作为第三个分片的归属存储节点,以此类推得到每个分片的归属存储节点。其中,存储系统中的存储节点之间的排序可以是预先设置好的,即每个存储节点的下一个接存储节点是哪个存储节点是预设好的。

该实现方式中,计算节点为每个分片确定好归属存储节点之后,可以向每个归属存储节点发送写请求,每个归属存储节点对应的写请求中携带数据集标识、分片中的数据和该数据的数据标识。

每个存储节点接收到相应写请求之后,为写请求中的数据分配存储空间,将该数据存储至该存储空间,并建立写请求中的数据集标识、数据标识该存储空间的存储地址之间的映射关系。

该实现方式中,计算节点读取数据库实例中的数据时,携带数据集标识和数据标识,这样,在存储节点收到数据读请求时,可以根据写数据时建立的数据标识与存储地址的对应关系及读请求中携带的数据集标识和数据标识确定所读取数据的存储地址,并从所述存储地址中读取数据。

图9为本申请一个实施例的计算装置的结构示意图。如图9所示,计算装置900包括接收模块901、发送模块902和处理模块903。

计算装置900可以用于执行图3、图4、图7或图8中任意图所示的方法中由计算节点实现的操作。

作为第一个示例,计算装置900可以用于实现图3所示实施例中由计算节点实现的操作。其中,接收模块901可以用于指定S330中由计算节点执行的操作和/或接收从存储节点读取的数据,发送模块902可以用于执行S310中由计算节点执行的发送步骤,处理模块903可以用于对接收模块901接收的信息进行处理等。

作为第二个示例,计算装置900可以用于实现图4所示实施例中由计算节点实现的操作。其中,接收模块901可以用于接收存储节点发送的写响应,发送模块902可以用于执行S410中由计算节点执行的发送步骤。

作为第三个示例,计算装置900可以用于实现图7所示实施例中由计算节点实现的操作。其中,接收模块901可以用于执行S730中由计算节点执行的接收操作和/或接收归属存储节点发送的写响应,发送模块902可以用于执行S710中由计算节点执行的发送操作,处理模块903可以用于对接收模块901接收的信息进行处理等。

作为第四个示例,计算装置900可以用于实现图8所示实施例中由计算节点实现的操作。其中,接收模块901可以用于接收归属存储节点发送的写响应,发送模块902可以用于执行S820中由计算节点执行的发送操作,处理模块903可以用于执行S810。

图10为本申请一个实施例的存储装置的结构示意图。如图7所示,存储装置1000包括接收模块1001、发送模块1002和处理模块1003。

存储装置1000可以用于执行图3或图4中由存储节点实现的操作,或可以用于执行图7中由存储节点控制器或图8中由归属存储节点控制器实现的操作。

作为第一个示例,存储装置1000可以用于实现图3所示实施例中由存储节点实现的操作。其中,接收模块1001可以用于执行S310中由存储节点执行的接收操作,发送模块1002可以用于执行S330中有存储节点执行的发送操作、向计算节点发送写响应或者发送计算节点读取的数据,处理模块1003可以用于执行S320。

作为第二个示例,存储装置1000可以用于实现图4所示实施例中由存储节点实现的操作。其中,接收模块1001可以用于执行S410中由存储节点执行的接收操作,处理模块1003可以用于执行S420,发送模块1002可以用于向计算节点发送写响应和/或发送计算节点读取的数据。

作为第三个示例,存储装置1000可以用于实现图7所示实施例中由存储节点控制器实现的操作。其中,接收模块1001可以用于执行S710中由存储节点控制器执行的接收操作,发送模块1002可以用于执行S730中由存储节点控制器执行的发送操作,处理模块1003可以用于执行S720。

作为第四个示例,存储装置1000可以用于实现图8所示实施例中由归属存储节点控制器实现的操作。其中,接收模块1001可以用于执行S820中由归属存储节点执行的接收操作,发送模块1002可以用于向计算节点发送写响应和/或发送计算节点读取的数据,处理模块1003可以用于执行S830。

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

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

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

本申请中,“至少一个”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B的情况,其中A,B可以是单数或者复数。在本申请的文字描述中,字符“/”,一般表示前后关联对象是一种“或”的关系;在本申请的公式中,字符“/”,表示前后关联对象是一种“相除”的关系。

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

技术分类

06120115626635