数据存储方法、装置、相关设备及存储介质与流程

文档序号:25584263发布日期:2021-06-22 16:48阅读:105来源:国知局
数据存储方法、装置、相关设备及存储介质与流程

本申请涉及计算机技术领域,尤其涉及一种数据存储方法、装置、相关设备及存储介质。



背景技术:

随着互联网的大规模普及和应用,数据量的爆炸式增长标志着大数据时代的来临。海量数据的发展为人们的生活带来诸多便利,例如云存储、电子支付、网络购物等,但随之而来的也有存储海量数据的严峻挑战。

对象存储系统能够支持百亿甚至千亿级文件规模的存储。但目前,该存储系统在存储文件时,数据和元数据写入存储系统时,在数据传输过程中存在冗余的数据拷贝的问题,并且每写一次数据会有两次强制刷盘,影响数据存储的性能。因此,如何提升数据存储性能成为了当前的研究热点。



技术实现要素:

本发明实施例提供了一种数据存储方法、装置、相关设备及存储介质,可以提升目标节点设备的数据存储性能。

一方面,本发明实施例提供了一种数据存储方法,该数据存储方法由节点集合中的目标节点设备执行,包括:

响应于针对待存储数据的存储触发操作,从客户端获取待存储数据的内容数据,并将内容数据存储到目标磁盘中;

获取待存储数据的属性数据,并在目标节点设备为节点集合中的主节点设备时,将属性数据存储到所述目标磁盘中;

若目标节点设备不是节点集合中的主节点设备,则将属性数据发送到主节点设备,以使主节点设备将属性信息存储到目标磁盘中。

获取单元,用于响应于针对待存储数据的存储触发操作,从客户端获取所述待存储数据的内容数据;

存储单元,用于将所述内容数据写到目标磁盘中;

所述获取单元,还用于获取所述待存储数据的属性数据;

所述存储单元,还用于在所述目标节点设备为所述节点集合中的主节点设备时,将所述属性数据写到所述目标磁盘中;

发送单元,用于若所述目标节点设备不是所述节点集合中的主节点设备,则将所述属性数据发送到所述主节点设备,以使所述主节点设备将所述属性信息写到所述目标磁盘中。

其中,目标节点设备为节点集合中与客户端处于同一机架的任一节点设备;或者,目标节点设备为节点集合中与客户端存在相同网络地址的节点设备;其中,从客户端获取的内容数据的数据格式为第一数据格式。

在一个实施例中,发送单元还用于将第一数据格式的内容数据发送到目标磁盘;存储单元还用于在节点集合中除目标节点设备之外的每个其他节点设备均将第一数据格式的内容数据发送到目标磁盘后,将内容数据写到目标磁盘中;其中,其他节点设备中的第一数据格式的内容数据是由目标节点设备发送的。

在一个实施例中,采用第一数据格式对属性数据的数据格式进行转换,得到第一数据格式的属性数据;存储单元还用于采用目标协议将第一数据格式的属性数据写到目标磁盘中。

在一个实施例中,采用目标协议将第一数据格式的属性数据写到目标磁盘时,对第一数据格式的属性数据进行拷贝的次数小于预设次数阈值。

在一个实施例中,该数据存储装置还包括:

判断单元,用于判断内容数据是否被全部写到目标磁盘;

若内容数据被全部写到目标磁盘,获取单元用于获取待存储数据的属性数据;存储单元用于在目标节点设备为节点集合中的主节点设备时,将属性数据写到目标磁盘中;发送单元用于若目标节点设备不是节点集合中的主节点设备,则将属性数据发送到主节点设备,以使主节点设备将属性数据写到目标磁盘中。

在一个实施例中,一个待存储数据的内容数据被划分为一个或多个数据块;当将待存储数据的最后一个数据块写到目标磁盘后,对目标磁盘进行刷盘处理,并检测针对目标磁盘中的每次刷盘操作是否均成功;若针对目标磁盘的每次刷盘操作均成功,则确定内容数据已被全部写到目标磁盘。

一方面,本发明实施例提供了目标节点设备,包括:

处理器,适于实现一条或多条指令,以及

计算机存储介质,所述计算机存储介质存储一条或多条指令,所述一条或多条指令适于由所述处理器加载并执行:

响应于针对待存储数据的存储触发操作,从客户端获取待存储数据的内容数据,并将内容数据写到目标磁盘中;

获取待存储数据的属性数据,并在目标节点设备为节点集合中的主节点设备时,将属性数据写到目标磁盘中;

若目标节点设备不是节点集合中的主节点设备,则将属性数据发送到主节点设备,以使主节点设备将属性信息写到目标磁盘中。

一方面,本发明实施例提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有程序指令,所述程序指令被处理器执行时,用于执行:

响应于针对待存储数据的存储触发操作,从客户端获取待存储数据的内容数据,并将内容数据写到目标磁盘中;

获取待存储数据的属性数据,并在目标节点设备为节点集合中的主节点设备时,将属性数据写到目标磁盘中;

若目标节点设备不是节点集合中的主节点设备,则将属性数据发送到主节点设备,以使主节点设备将属性信息写到目标磁盘中。

一方面,本发明实施例提供了一种计算机程序产品或计算机程序,所述计算机程序产品包括计算机程序,计算机程序存储在计算机存储介质中;服务器的处理器从计算机存储介质中读取所述计算机指令,所述处理器执行:

响应于针对待存储数据的存储触发操作,从客户端获取待存储数据的内容数据,并将内容数据写到目标磁盘中;

获取待存储数据的属性数据,并在目标节点设备为节点集合中的主节点设备时,将属性数据写到目标磁盘中;

若目标节点设备不是节点集合中的主节点设备,则将属性数据发送到主节点设备,以使主节点设备将属性信息写到目标磁盘中。

本发明实施例中,客户端在需要将待存储数据存储到目标磁盘时,可基于目标节点设备来传输待存储数据,其中,该目标节点设备可先从客户端获取待存储数据的内容数据,该内容数据可以被分为一个或多个数据块,数据块的数据格式为第一数据格式,目标节点设备每次从客户端获取一个数据块,将该数据块写到目标磁盘中。当写到目标磁盘中的未进行刷盘操作的数据块的总量到达设置的阈值时,目标节点设备进行刷盘操作,相比于目标节点设备获取非第一数据格式的数据块,然后将非第一数据格式的数据块写到目标磁盘,每写4mb就会进行一次刷盘操作来说,可以减少目标节点设备将该内容数据存储到目标磁盘的刷盘次数,此外,该目标节点设备还可从客户端中获取待存储数据的属性数据,由于属性数据只能由节点集合中的主节点设备进行存储,所以,在目标节点设备接收到属性数据后,可先判断该目标节点设备是否为主节点设备,并在确定是主节点设备时,直接存储该属性数据,而完成对待存储数据的存储,而在该目标节点设备不是主节点设备时,该目标节点设备可进一步将该属性数据转发给主节点设备,并由主节点设备存储该属性数据,使得目标节点设备可在不是主节点设备时实现将待存储数据存储到目标磁盘中,且由于待存储数据中的内容数据和属性数据均是采用的第一数据格式进行传输,可以减少数据拷贝的次数,从而提升数据存储的性能。

附图说明

为了更清楚地说明本发明实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明实施例提供的一种数据存储系统的架构示意图;

图2是本发明实施例提供的一种数据存储方法的示意流程图;

图3是本发明实施例提供的一种传输第一数据格式的内容数据时进行拷贝的示意图;

图4是本发明实施例提供的一种内容数据的传输流向示意图;

图5是本发明实施例提供的一种属性数据的传输流向示意图;

图6是本发明实施例提供的一种传输非第一数据格式的属性数据时进行拷贝的示意图;

图7是本发明实施例提供的另一种数据存储方法的示意流程图;

图8是本发明实施例提供的一种数据存储方法应用于数据存储系统时的示意流程图;

图9是本发明实施例提供的一种进行第一数据格式转换的编码示意图;

图10是本发明实施例提供的一种解析第一数据格式的待存储数据的代码示意图;

图11是本发明实施例提供的另一种数据存储方法应用于数据存储系统时的示意流程图;

图12是本发明实施例提供的一种数据存储装置的结构示意图;

图13是本发明实施例提供的一种目标节点设备的结构示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

本发明实施例提出了一种数据存储方法,可使得客户端可通过节点设备集中的任一节点设备(如目标节点设备)将待存储的数据写到目标磁盘中进行存储,而不再必须通过该节点设备集合中的主节点设备进行数据存储,从而可避免将待存储的数据写到目标磁盘时造成的冗余数据拷贝的问题,同时也可减少该目标节点设备在将待存储的数据写到目标磁盘时的强制刷盘次数,也就提升了目标节点设备进行数据存储的效率。该数据存储方法可由0zone系统(继分布式文件系统的下一代统一数据湖对象存储系统)执行,也可由如图1所示的数据存储系统执行,该数据存储系统包括:客户端10、节点集合11以及目标磁盘12,其中,客户端10可以在如图1所示的终端中,该终端可以是智能手机、平板电脑、笔记本电脑等,但并不局限于此,节点集合11可包括一个或多个节点设备,其中,该节点集合11包括的节点设备例如可以是如图1所示的节点设备110、节点设备111和节点设备112。在一个实施例中,该节点集合11包括的各节点设备之间建立有通信连接,也就是说,该节点集合11中的各节点设备之间可以进行互相通信,此外,该节点集合11中的每个节点设备还分别与客户端10建立有通信连接,所以,该客户端10也可实现和节点集合11中的任一节点设备进行通信。

在一个实施例中,客户端10在需要将待存储的数据存储到目标磁盘12时,可通过该节点集合11将待存储数据存储到目标磁盘12,具体地,该客户端10可先将该待存储数据的内容数据发送给节点集合中的任一节点设备,若该任一节点设备为目标节点设备,该目标节点设备例如可以是如图1中由110标记的节点设备,目标节点设备110在接收到客户端10发送的内容数据后,可将该内容数据同步给该节点集合中的其他节点设备,该其他节点设备例如可以是如图1中由111或者112标记的节点设备,在该节点集合中的各个节点设备均获取到该待存储数据的内容数据后,则可将该内容数据写到目标磁盘12中,可以理解的是,基于每个节点设备将内容数据写到目标磁盘12中,可实现将该待存储数据的内容数据备份存储到目标磁盘12中。

在客户端10将该待存储数据的内容数据写到目标磁盘12中后,进一步地,该客户端10还可将该待存储数据的属性数据存储到目标磁盘12,在具体实现中,客户端10可先将该属性数据写入节点集合11的任一节点设备中,如果客户端10写入到节点集合11中的节点设备为由110标记的目标节点设备,在该目标节点设备110接收到客户端10发送的属性数据后,该目标节点设备110先判断该目标节点设备110是否为主节点设备,当确定该目标节点设备110为主节点设备时,则可直接将该属性数据写到目标磁盘12中,以将该属性信息存储到目标磁盘12中。如果目标节点设备110不是主节点设备时,则该目标节点设备110可基于该节点集合中各节点设备之间建立的通信连接,将该属性数据发送给主节点设备。在主节点设备从目标节点设备110中接收到属性数据后,该主节点设备则可将该属性数据写入到目标磁盘进行存储,从而将该待存储数据的属性数据存储到目标磁盘中,可以理解的是,在完成对该待存储数据的内容数据和属性数据的存储后,即完成将待存储数据存储到目标磁盘中。为了实现在目标磁盘中对该待存储数据进行备份存储,在一个实施例中,客户端在将待存储数据的内容数据(或属性数据)发送到目标节点设备后,还可进一步将该内容数据同步到其他节点设备,以使该其他节点设备将内容数据写入目标磁盘,从而完成在目标磁盘中对待存储数据的备份存储。

在一个实施例中,该客户端可该节点集合中的节点设备均可以是区块链网络中的节点设备,那么,该客户端和该节点集合中的各节点设备可基于区块链网络进行数据传输,可以理解,基于区块链网络的数据传输模式,可保证该客户端和各节点设备之间进行数据传输时的数据安全性。其中,区块链(blockchain)是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链,本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层。

请参阅图2,是本发明实施例提供的一种数据存储方法的示意流程图,该数据存储方法由上述节点集合中的目标节点设备执行,如图2所示,该方法可包括:

s201,响应于针对待存储数据的存储触发操作,从客户端获取待存储数据的内容数据,并将内容数据写到目标磁盘中。

该待存储数据可以为文件数据,文档数据,或者视频数据等,那么可以理解的是,该待存储数据的内容数据则可以是文件数据的数据内容,如文件数据中包括的文档或者图片等,也可以是文档数据中的数据内容,如文档数据中的文字或者符号等,或者,也可以是视频数据的数据内容,如视频数据包括的图像帧或者音频等。在一个实施例中,客户端在需要将待存储数据存储到目标磁盘时,可先将该待存储数据写入到节点集合的目标节点设备(或称之为primary节点设备)中,该目标节点设备在从客户端接收到该待存储数据后,则确定接收到针对该待存储数据的存储触发操作,其中,该节点集合包括的节点设备的数量为一个或多个,当该节点集合包括至少两个节点设备时,用于接收客户端写入的待存储数据的节点设备为目标节点设备,那么可以理解的是,该节点集合中除所述目标节点设备之外的节点设备为其他节点设备,该其他节点设备为目标节点设备的同胞(peer)节点设备。

在一个实施例中,目标节点设备从客户端获取的内容数据的数据格式为第一数据格式,当目标节点设备从客户端获取的内容数据的数据格式为第一数据格式时,目标节点设备传输内容数据的过程中会将目标节点设备的一段用户空间内存映射到内核空间,当映射成功后,目标节点设备对用户空间数据的修改可以直接反映到内核空间,同样的,对内核空间数据的修改也直接反映到用户空间,该映射关系使得目标节点设备传输内容数据时不需要在用户空间和内核空间进行数据拷贝。其中,第一数据格式可以为netty架构(一种数据架构)中directbytebuffer类型(一种数据类型)的数据格式,那么可以理解的是,将内容数据的数据格式转换为第一数据格式,节点集合中除目标节点设备外的其他节点设备在传输内容数据时,其他节点设备的用户空间和内核空间同样存在上述的映射关系,也就可以减少其他节点设备传输内容数据时的拷贝次数。

请参阅图3,图3是本发明实施例提供的一种传输第一数据格式的内容数据时进行拷贝的示意图,如图3所示,节点集合中的节点设备在传输第一数据格式的内容数据时涉及到堆外内存与网卡之间、堆外内存与目标磁盘之间的数据交互。其中,堆外内存是把内存对象分配在java(一门面向对象编程语言)虚拟机的堆以外的内存,以节点集合中的目标节点设备传输第一数据格式的内容数据时的数据拷贝为例,目标节点设备从客户端获取内容数据,需要通过网络从该客户端读取第一数据格式的内容数据,当目标节点设备通过网络读取第一数据格式的内容数据时,目标节点设备可以直接通过网络将第一数据格式的内容数据读取到堆外内存,同理,当目标节点设备将第一数据格式的内容数据发送给节点集合中的其他节点设备时,目标节点设备则可以将第一数据格式的内容数据由堆外内存通过网络写入其他节点设备中,其中,此处描述的网络为节点设备之间的通信网络;同样的,当目标节点设备将第一数据格式的内容数据写到目标磁盘时,目标节点设备可以通过网络将第一数据格式的内容数据由堆外内存写到目标磁盘中。

在一个实施例中,目标节点设备将第一数据格式的内容数据发送到目标磁盘,同时,目标节点设备将第一数据格式的内容数据发送给节点集合中除目标节点设备之外的其他节点设备,当其他节点设备均将第一数据格式的内容数据发送到目标磁盘后,目标节点设备将内容数据写到目标磁盘中。节点集合中每个peer节点设备接收到来自目标节点设备发送的第一数据格式的内容数据,均将第一数据格式的内容数据发送到目标磁盘后,每个peer节点设备向目标节点设备发送反馈消息,目标节点设备接收来自节点集合中每个peer节点设备发送的反馈消息,该反馈消息为节点集合中peer节点设备将第一数据格式的内容数据写到目标磁盘成功的消息。目标节点设备接收到到每个peer节点设备发送的反馈消息,且目标节点设备将内容数据写到目标磁盘成功后,目标节点设备发送反馈消息给客户端,该反馈消息为节点集合中的所有节点设备将第一数据格式的内容数据写到目标磁盘成功的消息。

请参阅图4,图4是本发明实施例提供的一种内容数据的传输流向示意图。如图4所示,如果客户端和节点设备1、节点设备2在同一机架(即机架1)上,节点设备3和节点设备1以及节点设备2处于不同机架,假设节点设备3所在的机架为机架2,如果目标节点设备为与客户端处于同机架的节点设备1,那么,节点设备2和节点设备3则为peer节点设备。客户端在将待存储数据存储到磁盘时,则可先将该待存储数据的内容数据发送给给节点设备1,节点设备1在获取到该内容数据后,则可将该内容数据写到目标磁盘中,同时节点设备1也可将该内容数据传给peer节点设备(如图4中的节点设备2和节点设备3),peer节点设备收到该内容数据后则可将该内容数据写到目标磁盘,基于节点集合中的每个节点设备将内容数据写到目标磁盘中,可实现对待存储数据的内容数据备份存储到目标磁盘中,由于客户端在将待存储数据存储到目标磁盘时,是将内容数据发送到的同机架的节点设备1,那么可减少对待存储数据的内容数据进行传输时的网络时延减少。

s202,获取待存储数据的属性数据,并在目标节点设备为节点集合中的主节点设备时,将属性数据写到所述目标磁盘中。

属性数据可以理解为描述数据属性的信息,属性数据用于反映数据的某方面特征,例如,数据的长度,类型,大小等,其中,属性数据也可称为元数据。在一个实施例中,目标节点设备采用第一数据格式对属性数据的数据格式进行转换,得到第一数据格式的属性数据,进而目标节点设备可采用目标协议将第一数据格式的属性数据写到目标磁盘中,其中,目标协议可以为raft协议(一种分布式一致性协议),在raft协议中所有操作请求都要转发到主节点设备(leader节点设备),再由leader节点设备将操作请求转发到各从属节点设备(follower节点设备),同时,leader节点设备会发送日志到各follower节点设备进行同步。当目标节点设备为主节点设备时,目标节点设备则可将第一数据格式的属性数据写到目标磁盘中,并且目标节点设备采用目标协议将第一数据格式的属性数据发送给节点集合中的其他节点设备。节点集合中的follower节点设备将第一数据格式的属性数据写到目标磁盘,并强制刷盘,同时follower节点设备将日志raftlog写到目标磁盘,并强制刷盘。

若目标节点设备为主节点设备时,如图4所示,在节点设备1为主节点设备时,节点设备2和节点设备3作为follower节点设备,此时,属性数据的传输流向示意图也可参考图4。客户端将属性数据发送给节点设备1(主节点设备),节点设备1接收到客户端发送的属性数据后将属性数据写到目标磁盘,并且节点设备1采用目标协议将该属性数据传给节点设备2(follower节点设备)和节点设备3(follower节点设备),两个follower节点设备将属性数据写到目标磁盘后强制刷盘。从客户端到节点设备1传输属性数据,和从节点设备1到节点设备2传输属性数据都是同机架传输,能够减少网络时延。

s203,若目标节点设备不是节点集合中的主节点设备,则将属性数据发送到主节点设备,以使主节点设备将属性信息写到目标磁盘中。

在一个实施例中,当目标节点设备不是主节点设备时,目标节点设备将第一数据格式的属性数据发送给主节点设备,主节点设备将第一数据格式的属性数据写到目标磁盘中,并且主节点设备采用目标协议将第一数据格式的属性数据发送给节点集合中的follower节点设备。节点集合中的follower节点设备将第一数据格式的属性数据写到目标磁盘,并强制刷盘,同时节点集合中的follower节点设备将日志raftlog写到目标磁盘,并强制刷盘。

例如,若目标节点设备不是主节点设备时,请参阅图5,图5是本发明实施例提供的一种属性数据的传输流向示意图。如图5所示,客户端和节点设备1、节点设备2在同一机架(即机架1)上,节点设备3在机架2上。与客户端处于同一机架的节点设备1为目标节点设备,节点设备2为主节点设备。客户端将属性数据发送给节点设备1,因为节点设备1不是主节点设备,因此节点设备1收到客户端发送的属性数据后将属性数据发送给节点设备2,由于该节点设备2为主节点设备,则该节点设备2收到属性数据后,可将该属性数据写到目标磁盘。

在一个实施例中,采用目标协议将第一数据格式的属性数据写到目标磁盘时,对第一数据格式的属性数据进行拷贝的次数小于预设次数的阈值。预设次数的阈值为在数据存储系统中没有采用第一数据格式传输属性数据时将会产生的拷贝次数。节点设备传输采用第一数据格式(如netty数据架构下的数据传输格式)进行转换的属性数据的拷贝过程可参阅图3,节点设备传输采用非第一数据格式(如protobuf架构下的数据传输格式)进行转换的属性数据的拷贝过程可参阅图6,如图6所示,是本发明实施例提供的一种传输非第一数据格式的属性数据时进行拷贝的示意图,其中,非第一数据格式可以是利用protobuf(一种工具库)包装后得到的数据格式。

如图6所示,以节点集合中的目标节点设备传输非第一数据格式的属性数据时的拷贝过程为例,节点集合中的目标节点设备从客户端获取属性数据,需要从网络中读取属性数据,该属性数据不是第一数据格式的属性数据。当目标节点设备从网络中读取该属性数据时,目标节点设备需要将该属性数据从网卡拷贝到堆外内存,然后将该属性数据从堆外内存拷贝到小中转字节数组,再将该属性数据由小中转字节数组拷贝到大字节数组;当目标节点设备将该属性数据发送给节点集合中的其他节点设备时,目标节点设备需要将该属性数据从大字节数组拷贝到堆外内存,再将该属性数据由堆外内存拷贝到网卡,然后目标节点设备通过网络将该属性数据发送给节点集合中的其他节点设备;当目标节点设备将该属性数据写到目标磁盘时,目标节点设备需要将该属性数据从大字节数组拷贝到堆外内存,再将该属性数据由堆外内存写到目标磁盘中。由图3和图6可知,目标节点设备从客户端获取属性数据时需要从网络中读取属性数据,当目标节点设备从网络读取采用第一数据格式的属性数据时,目标节点设备不需要将属性数据从网络读出后缓存到内存,即目标节点设备不需要将该属性数据从堆外内存拷贝到小的中转字节数组,再将该属性数据从小中转字节数组拷贝到大字节数组,目标节点设备可以直接将该属性数据从网络读取到堆外内存,从而减少两次数据拷贝;当目标节点设备将第一数据格式的属性数据写入网络,发送给节点集合中的其他节点设备时,不需要将该属性数据从堆内内存拷贝到堆外内存,目标节点设备可以直接将该属性数据由堆外内存写入网络中,从而可以减少一次数据拷贝。当目标节点设备将第一数据格式的属性数据写入目标磁盘时,目标节点设备不需要将该属性数据从堆内内存拷贝到堆外内存,可以直接将该属性数据由堆外内存写到目标磁盘中,从而可以减少一次数据拷贝。由此可见,对第一数据格式的属性数据进行拷贝的次数小于预设次数的阈值。

本发明实施例中,客户端在需要将待存储数据存储到目标磁盘时,可基于目标节点设备来传输待存储数据,其中,该目标节点设备可先从客户端获取待存储数据的内容数据,并将该内容数据存储到目标磁盘中,此外,该目标节点设备还可从客户端中获取待存储数据的属性数据,由于属性数据只能由节点集合中的主节点设备进行存储,所以,在目标节点设备接收到属性数据后,可先判断该目标节点设备是否为主节点设备,并在确定是主节点设备时,直接存储该属性数据,而完成对待存储数据的存储,而在该目标节点设备不是主节点设备时,该目标节点设备可进一步将该属性数据转发给主节点设备,并由主节点设备存储该属性数据,使得目标节点设备可在不是主节点设备时实现将待存储数据存储到目标磁盘中,且由于待存储数据中的内容数据和属性数据均是采用的第一数据格式进行传输,可以减少数据拷贝的次数,从而提升数据存储的性能。

请参阅图7,是本发明实施例提供的另一种数据存储方法的示意流程图,该数据存储方法由上述节点集合中的目标节点设备执行,如图7所示,该方法可包括:

s701,响应于针对待存储数据的存储触发操作,从客户端获取待存储数据的内容数据,并将内容数据写到目标磁盘中。

s702,判断内容数据是否被全部写到目标磁盘。

在一个实施例中,目标节点设备接收到的来自客户端的待存储数据的内容数据被划分为一个或多个数据块,如果该内容数据有128mb,可以将该128mb的内容数据分为32个数据块(chunk),每个数据块有4mb的内容数据。目标节点设备在从客户端获取内容数据时,则可采用异步的方式每次从客户端获取一个数据块,该数据块的数据格式为第一数据格式,目标节点设备接收到来自客户端发送的第一数据格式的数据块,然后将该数据块写到目标磁盘中,同时目标节点设备将该数据块发送给节点集合中的peer节点设备。节点集合中的每个peer节点设备收到来自目标节点设备发送的第一数据格式的数据块,均将该数据块发送到目标磁盘后,每个peer节点设备向目标节点设备发送将该数据块写到目标磁盘成功的消息,目标节点设备接收来自节点集合中每个peer节点设备发送的将该数据块写到目标磁盘成功的消息,并且,目标节点设备检查目标节点设备写数据块到目标磁盘成功后,将发送消息给客户端,该消息为节点集合中所有节点设备将该数据块写到目标磁盘成功的消息。

客户端可以不等目标节点设备发送数据块成功写到目标磁盘的消息,即客户端发送完一个数据块给目标节点设备后,可以立即发送下一个数据块给目标节点设备,当节点集合中的所有节点设备均将最后一个数据块写到目标磁盘成功后,目标节点设备对目标磁盘进行刷盘处理,若针对目标磁盘中的每次刷盘操作均成功,确定内容数据已被全部写到目标磁盘。其中,当一个数据块写到目标磁盘中时,目标磁盘中未进行刷盘操作的数据量达到设置的阈值,此时,该数据块为写到目标磁盘中的最后一个数据块。每次刷盘操作均成功是指写到目标磁盘成功的数据块的总数据量达到设置的阈值后,目标节点设备进行刷盘操作,每次刷盘操作均成功,其中,可以根据情况设置阈值。例如,一个待存储数据的内容数据被分为32个4mb的数据块,设置的阈值可以为32mb,则第八个数据块为进行第一次刷盘操作时的最后一个数据块,当成功写到目标磁盘中且未进行刷盘操作的数据块的数据总量到达32mb时,目标节点设备能够进行一次刷盘操作,那么目标节点设备将进行四次刷盘操作,当每次刷盘操作(即四次刷盘操作)均成功后,确定内容数据已被全部写到目标磁盘中。传输非第一数据格式的数据块时,目标节点设备每写入4mb的数据块到目标磁盘,节点设备就要进行一次刷盘操作,因此,相对于传输非第一数据格式的数据块,传输第一数据格式的数据块能够减少刷盘次数。

s703,若是,则获取待存储数据的属性数据。

s704,在目标节点设备为节点集合中的主节点设备时,将属性数据写到目标磁盘中。

s705,若目标节点设备不是节点集合中的主节点设备,则将属性数据发送到主节点设备,以使主节点设备将属性信息写到目标磁盘中。

在步骤s703~步骤s705中,请参阅图8,图8是本发明实施例提供的一种数据存储方法应用于数据存储系统时的示意流程图。如图8所示,客户端中的待存储数据的内容数据被划分为32个数据块,客户端可以通过异步的方式向目标节点设备发送每个数据块,每个数据块包含于消息请求中,每个数据块的格式为第一数据格式,其中,第一数据格式可以为利用netty转换后的数据格式。利用netty对每个数据块进行第一数据格式转换的编码如图9所示,图9中,userrequestbytebuffer包含消息头(request.header)和消息体(request.body),均是堆外内存directbytebuffer类型的数据可以避免目标节点设备将数据块从java虚拟机(javavirtualmachine,jvm)堆内存拷贝到堆外内存。netty不需将多个小的缓冲区中的数据(directbytebuffer的数据)拷贝到一个大的缓冲区中(directbytebuffer),如在图9所示代码中,直接将各个request.header、request.body添加到列表(list)里即可,然后netty会将list的数据发到套接字(socket)缓冲区。另外还需要将request.header的长度(request.header.remaining())写到headerlenbuf(定义的一个参数)里,并将headerlenbuf放到list里,便于区分request.header和request.body。

如图8所示,目标节点设备将收到的第一数据格式的数据块通过netty解析后写到目标磁盘,并将第一数据格式的数据块发送给两个peer节点设备,两个peer节点设备收到第一数据格式的数据块,利用netty解析第一数据格式的数据块,然后peer节点设备将数据块写到目标磁盘。节点集合中的节点设备利用netty解析第一数据格式的数据块的代码请参阅图10,如图10所示,在解析第一数据格式的数据块时,通过声明数据积累器(composite_cumulator),netty可将收到的该数据块的内容组合起来,而不是将该数据块的所有内容拷贝到一个大的缓冲区。另外编译时,应用程序通过slice操作(一种数组操作)即bytebuf.slice()获取消息体request.body,即为数据块,bytebuf.slice()不涉及内存拷贝,只是引用,因此可避免内存拷贝。

如图8所示,当节点集合中的所有节点设备都将到达设置的阈值的数据块成功写到目标磁盘后,目标节点设备将通过sync命令进行强制刷盘操作,当所有的内容数据都已强制刷盘成功,则客户端向目标节点设备发送第一数据格式的属性数据,对属性数据进行第一数据格式转换的编码可参考图9,目标节点设备接收到客户端发送的第一数据格式的属性数据,当目标节点设备不是主节点设备时,目标节点设备将第一数据格式的属性数据发给主节点设备,主节点设备将第一数据格式的属性数据通过netty解析后写到目标磁盘中,解析的代码可参见图10,然后主节点设备将第一数据格式的属性数据发送给从属节点设备。从属节点设备接收到主节点设备发送的第一数据格式的属性数据,从属节点设备利用netty将第一数据格式的属性数据解析后写到目标磁盘中,并通过命令sync进行强制刷盘操作,同时从属节点设备将raft请求中的日志raftlog写到目标磁盘并通过命令sync进行强制刷盘操作。

再例如,请参阅图11,图11是本发明实施例提供的另一种数据存储方法应用于数据存储系统时的示意流程图。该示意流程图为目标节点设备为主节点设备时,传输非第一数据格式的属性数据的示意流程图。如图11所示,客户端将属性数据包装成非第一数据格式发送给目标节点设备,其中,非第一数据格式可以为利用protobuf转换后的数据格式。主节点设备接收到来自客户端发送的非第一数据格式的属性数据,主节点设备通过目标协议raft协议将非第一数据格式的属性数据发送给从属节点设备。从属节点设备接收到非第一数据格式的属性数据,利用protobuf解析非第一数据格式的属性数据后,将属性数据写到目标磁盘,并通过sync命令进行强制刷盘操作,同时从属节点设备将raft请求中的日志raftlog写到目标磁盘,并通过sync命令进行强制刷盘操作。

本发明实施例中,客户端在需要将待存储数据存储到目标磁盘时,可基于目标节点设备来传输待存储数据,其中,该目标节点设备可先从客户端获取待存储数据的内容数据,该内容数据可以被分为一个或多个数据块,数据块的数据格式为第一数据格式,目标节点设备每次从客户端获取一个数据块,将该数据块写到目标磁盘中。当写到目标磁盘中的未进行刷盘操作的数据块的总量到达设置的阈值时,目标节点设备进行刷盘操作,相比于目标节点设备获取非第一数据格式的数据块,然后将非第一数据格式的数据块写到目标磁盘,每写4mb就会进行一次刷盘操作来说,可以减少目标节点设备将该内容数据存储到目标磁盘的刷盘次数,此外,该目标节点设备还可从客户端中获取待存储数据的属性数据,由于属性数据只能由节点集合中的主节点设备进行存储,所以,在目标节点设备接收到属性数据后,可先判断该目标节点设备是否为主节点设备,并在确定是主节点设备时,直接存储该属性数据,而完成对待存储数据的存储,而在该目标节点设备不是主节点设备时,该目标节点设备可进一步将该属性数据转发给主节点设备,并由主节点设备存储该属性数据,使得目标节点设备可在不是主节点设备时实现将待存储数据存储到目标磁盘中,且由于待存储数据中的内容数据和属性数据均是采用的第一数据格式进行传输,可以减少数据拷贝的次数,从而提升数据存储的性能。

基于上述的数据存储方法,本发明实施例提供了一种数据存储装置。参见图12,为本发明实施例提供的一种数据处理装置的结构示意图。图12所述的数据处理装置可运行如下单元:

获取单元1201,用于响应于针对待存储数据的存储触发操作,从客户端获取所述待存储数据的内容数据;

存储单元1202,用于将所述内容数据写到目标磁盘中;

获取单元1201,还用于获取所述待存储数据的属性数据;

存储单元1202,还用于在所述目标节点设备为所述节点集合中的主节点设备时,将所述属性数据写到所述目标磁盘中;

发送单元1203,用于若所述目标节点设备不是所述节点集合中的主节点设备,则将所述属性数据发送到所述主节点设备,以使所述主节点设备将所述属性信息写到所述目标磁盘中。

在一个实施例中,目标节点设备为节点集合中与客户端处于同一机架的任一节点设备;或者,目标节点设备为节点集合中与客户端存在相同网络地址的节点设备。

在一个实施例中,获取单元1201从客户端获取的内容数据的数据格式为第一数据格式。

在一个实施例中,发送单元1203将第一数据格式的内容数据发送到所述目标磁盘;存储单元1202在节点集合中除目标节点设备之外的每个其他节点设备均将第一数据格式的内容数据发送到目标磁盘后,将内容数据写到目标磁盘中。其中,其他节点设备中的第一数据格式的内容数据是由目标节点设备发送的。

在一个实施例中,采用第一数据格式对属性数据的数据格式进行转换,得到第一数据格式的属性数据;存储单元1202采用目标协议将第一数据格式的属性数据写到目标磁盘中。

在一个实施例中,采用目标协议将第一数据格式的属性数据写到目标磁盘时,对第一数据格式的属性数据进行拷贝的次数小于预设次数阈值。

在一个实施例中,该数据存储装置还包括:

判断单元1204,判断内容数据是否被全部写到目标磁盘;

一个待存储数据的内容数据被划分为一个或多个数据块;当将待存储数据的最后一个数据块写到目标磁盘后,对目标磁盘进行刷盘处理,并检测针对目标磁盘中的每次刷盘操作是否均成功;若针对目标磁盘的每次刷盘操作均成功,则确定内容数据已被全部写到目标磁盘。

根据本发明的一个实施例,图2所示的数据存储方法所涉及各个步骤可以是由图12所示的数据存储装置中的各个单元来执行的。例如,图2所述的s201可由图12所示的数据处理装置中的获取单元1201、存储单元1202来执行,s202可由图12所示的数据存储装置中的获取单元1201、存储单元1202来执行,s203可由图12所示的数据存储装置中的发送单元1203来执行。

根据本发明的一个实施例,图7所示的数据存储方法所涉及各个步骤可以是由图12所示的数据存储装置中的各个单元来执行的。例如,图7所述的s701可由图12所示的数据处理装置中的获取单元1201、存储单元1202来执行,s702可由图12所示的数据存储装置中的判断单元1204来执行,s703可由图12所示的数据存储装置中的获取单元1201来执行,s704可由图12所示的数据存储装置中的存储单元1202来执行,s705可由图12所示的数据存储装置中的发送单元1203来执行。

根据本发明的另一个实施例,图12所示的数据存储装置中的各个单元可以分别或全部合并为一个或若干个另外的单元来构成,或者其中的某个(些)单元还可以再拆分为功能上更小的多个单元来构成,这可以实现同样的操作,而不影响本发明的实施例的技术效果的实现。上述单元是基于逻辑功能划分的,在实际应用中,一个单元的功能也可以由多个单元来实现,或者多个单元的功能由一个单元实现。在本发明的其它实施例中,基于数据存储装置也可以包括其它单元,在实际应用中,这些功能也可以由其它单元协助实现,并且可以由多个单元协作实现。

根据本发明的另一个实施例,可以通过在包括中央处理单元(cpu)、随机存取存储介质(ram)、只读存储介质(rom)等处理元件和存储元件的例如计算机的通用计算设备上运行能够执行上述图2或图7所示的相应方法所涉及的各步骤的计算机程序(包括程序代码),来构造如图12中所示的数据处理装置,以及来实现本发明实施例的数据存储方法。所述计算机程序可以记载于例如计算机可读存储介质上,并通过计算机可读存储介质装载于上述计算设备中,并在其中运行。

本发明实施例中,客户端在需要将待存储数据存储到目标磁盘时,可基于数据存储装置来传输待存储数据,其中,获取单元1201可先从客户端获取待存储数据的内容数据,然后存储单元1202将该内容数据存储到目标磁盘中,此外,获取单元1201还可从客户端中获取待存储数据的属性数据,由于属性数据只能由节点集合中的主节点设备进行存储,所以,在获取单元1201接收到属性数据后,判断单元1204可先判断该目标节点设备是否为主节点设备,并在确定是主节点设备时,存储单元1202直接存储该属性数据,而完成对待存储数据的存储,而在该目标节点设备不是主节点设备时,发送单元1203可进一步将该属性数据转发给主节点设备,并由主节点设备存储该属性数据,使得目标节点设备可在不是主节点设备时实现将待存储数据存储到目标磁盘中,且由于待存储数据中的内容数据和属性数据均是采用的第一数据格式进行传输,可以减少数据拷贝的次数,从而提升数据存储的性能。

基于上述数据处理方法以及数据处理装置的实施例,本发明实施例提供了一种目标节点设备,该目标节点设备可以是服务器,也可以是终端。服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、cdn、以及大数据和人工智能平台等基础云计算服务的云服务器。终端可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。参见图13,为本发明实施例提供的一种目标节点设备的结构示意图。图13所述的目标节点设备至少可包括处理器1301、输入接口1302、输出接口1303以及计算机存储介质1304。其中,处理器1301、输入接口1302、输出接口1303以及计算机存储介质1304可通过总线或其他方式连接。

计算机存储介质1304可以存储在目标节点设备的存储器中,所述计算机存储介质1304用于存储计算机程序,所述计算机程序包括程序指令,所述处理器1301用于执行所述计算机存储介质1304存储的程序指令。处理器1301(或称cpu(centralprocessingunit,中央处理器))是服务器的计算核心以及控制核心,其适于实现一条或多条指令,用来实现上述如图2和图7中相应方法的步骤。

在一个实施例中,所述处理器1301被配置调用所述程序指令,用于执行:

响应于针对待存储数据的存储触发操作,从客户端获取待存储数据的内容数据,并将内容数据写到目标磁盘中;

获取待存储数据的属性数据,并在目标节点设备为节点集合中的主节点设备时,将属性数据写到目标磁盘中;

若目标节点设备不是节点集合中的主节点设备,则将属性数据发送到主节点设备,以使主节点设备将属性信息写到目标磁盘中。

在一个实施例中,从客户端获取的内容数据的数据格式为第一数据格式,所述处理器1301被配置调用所述程序指令,用于执行:

将第一数据格式的内容数据发送到目标磁盘,并在节点集合中除目标节点设备之外的每个其他节点设备均将第一数据格式的内容数据发送到目标磁盘后,将内容数据写到目标磁盘中。

其中,其他节点设备中的第一数据格式的内容数据是由目标节点设备发送的。

在一个实施例中,所述处理器1301被配置调用所述程序指令,用于执行:

采用第一数据格式对属性数据的数据格式进行转换,得到第一数据格式的属性数据;

采用目标协议将第一数据格式的属性数据写到所述目标磁盘中。

其中,采用目标协议将第一数据格式的属性数据写到目标磁盘时,对第一数据格式的属性数据进行拷贝的次数小于预设次数阈值。

在一个实施例中,获取待存储数据的属性数据之前,所述处理器1301被配置调用所述程序指令,用于执行:

判断内容数据是否被全部写到目标磁盘;

若是,则触发执行获取待存储数据的属性数据的步骤。

在一个实施例中,一个待存储数据的内容数据被划分为一个或多个数据块;判断所述内容数据是否被全部写到目标磁盘,所述处理器1301被配置调用所述程序指令,用于执行:

当将待存储数据的最后一个数据块写到目标磁盘后,对目标磁盘进行刷盘处理,并检测针对目标磁盘中的每次刷盘操作是否均成功。

本发明实施例提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述如图2或图7所示的方法实施例。其中,所述的计算机可读存储介质可为磁碟、光盘、只读存储记忆体(read-onlymemory,rom)或随机存储记忆体(randomaccessmemory,ram)等。

以上所揭露的仅为本发明的局部实施例而已,当然不能以此来限定本发明之权利范围,本领域普通技术人员可以理解实现上述实施例的全部或局部流程,并依本发明权利要求所作的等同变化,仍属于发明所涵盖的范围。

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