数据存储方法及装置与流程

文档序号:11133487阅读:230来源:国知局
数据存储方法及装置与制造工艺

本发明实施例涉及通信技术领域,尤其涉及一种数据存储方法及装置。



背景技术:

Docker是一个开源的应用容器引擎,在物理主机上安装Docker后,可在Docker的基础上承载多个容器,多个容器之间相互隔离,多个容器共享物理主机的操作系统,各容器可放置并执行不同的应用程序。

现有技术中,Docker引擎承载的每个Docker容器可能有数据产生,同时,Docker容器需要将其产生的数据存储到存储器,多个Docker容器可能会将各自的数据存储到同一个存储器中,此时,存储器一次只能允许一个Docker容器写数据,该Docker容器往存储器中写数据的时候,其他Docker容器等能排队等待。

可见,当需要往存储器中同时写数据的Docker容器较多时,势必造成Docker容器排队等待时间较长,导致数据存储效率低。



技术实现要素:

本发明实施例提供一种数据存储方法及装置,以提高数据存储效率。

本发明实施例的一个方面是提供一种数据存储方法,包括:

接收第一Docker容器发送的第一待存储数据;

对所述第一待存储数据进行分块处理,获得多个第一目标数据块;

给每个第一目标数据块分配一个令牌,并将每个第一目标数据块对应的令牌发送给所述第一Docker容器,以使所述第一Docker容器根据所述令牌存储所述多个第一目标数据块;

接收第二Docker容器发送的第二待存储数据;

对所述第二待存储数据进行分块处理,获得多个第二目标数据块;

确定所述多个第二目标数据块与所述多个第一目标数据块的重复数据块;

给所述多个第二目标数据块中除所述重复数据块之外的每个第二目标数据块分配一个令牌,并将分配有令牌的第二目标数据块对应的令牌发送给所述第二Docker容器,以使所述第二Docker容器存储所述分配有令牌的第二目标数据块。

本发明实施例的另一个方面是提供一种数据存储装置,包括:

接收模块,用于接收第一Docker容器发送的第一待存储数据;接收第二Docker容器发送的第二待存储数据;

处理模块,用于对所述第一待存储数据进行分块处理,获得多个第一目标数据块;给每个第一目标数据块分配一个令牌;对所述第二待存储数据进行分块处理,获得多个第二目标数据块;确定所述多个第二目标数据块与所述多个第一目标数据块的重复数据块;给所述多个第二目标数据块中除所述重复数据块之外的每个第二目标数据块分配一个令牌;

发送模块,用于将每个第一目标数据块对应的令牌发送给所述第一Docker容器,以使所述第一Docker容器根据所述令牌存储所述多个第一目标数据块;将分配有令牌的第二目标数据块对应的令牌发送给所述第二Docker容器,以使所述第二Docker容器存储所述分配有令牌的第二目标数据块。

本发明实施例提供的数据存储方法及装置,当各个Docker容器同时有待存储的数据时,通过对各个Docker容器产生的待存储数据进行分块处理,给每个分块后的数据分配一个令牌,该令牌起到标识数据的作用,不同的分块数据对应不同的令牌,各个Docker容器可将分配有令牌的分块数据同时发送给存储器,存储器根据不同的令牌,存储不同的分块数据,各个Docker容器无需排队等待存储器存储数据,提高了数据存储效率。

附图说明

图1为本发明实施例提供的数据存储方法流程图;

图2为本发明实施例提供的数据存储方法适用的网络架构图;

图3为本发明另一实施例提供的数据存储方法流程图;

图4为本发明另一实施例提供的数据存储方法流程图;

图5为本发明实施例提供的数据存储装置的结构图;

图6为本发明另一实施例提供的数据存储装置的结构图。

具体实施方式

图1为本发明实施例提供的数据存储方法流程图;图2为本发明实施例提供的数据存储方法适用的网络架构图。本发明实施例针对现有技术中,当需要往存储器中同时写数据的Docker容器较多时,势必造成Docker容器排队等待时间较长,导致数据存储效率低,提供了数据存储方法,该方法具体步骤如下:

步骤S101、接收第一Docker容器发送的第一待存储数据。

如图2所示,Docker服务器11包括Docker容器1、Docker容器2、以及Docker引擎1,Docker服务器12包括Docker容器3、Docker容器4、以及Docker引擎2。Docker容器1、Docker容器2产生的数据可以通过Docker引擎1存储到主存储器14或备存储器15,Docker容器3、Docker容器4产生的数据可以通过Docker引擎2存储到主存储器14或备存储器15。

本实施例的执行主体是图2所示的服务器13,服务器13包括目标区块识别模块,当Docker容器1、Docker容器2、Docker容器3、Docker容器4产生待存储的数据时,将该待存储的数据发送给服务器13。假设服务器13接收到了Docker容器1发送的第一待存储数据。

步骤S102、对所述第一待存储数据进行分块处理,获得多个第一目标数据块。

服务器13中的目标区块识别模块对该第一待存储数据进行分块处理,具体可以按照预先设定的分块大小对该第一待存储数据进行分块处理,得到多个小的分块,每个小的分块记为第一目标数据块。

步骤S103、给每个第一目标数据块分配一个令牌,并将每个第一目标数据块对应的令牌发送给所述第一Docker容器,以使所述第一Docker容器根据所述令牌存储所述多个第一目标数据块。

服务器13中的目标区块识别模块给每个第一目标数据块分配一个令牌,服务器13将每个第一目标数据块对应的令牌发送给Docker容器1,Docker容器1可将令牌作为每个第一目标数据块的标识,并将每个第一目标数据块,以及每个第一目标数据块对应的令牌发送给主存储器14,主存储器14对每个令牌标识的第一目标数据块进行存储。

步骤S104、接收第二Docker容器发送的第二待存储数据。

另外,当Docker容器2、Docker容器3或Docker容器4产生待发送的数据时,服务器13还可以接收Docker容器2、Docker容器3或Docker容器4发送的第二待存储数据,服务器13可以同时接收Docker容器1、Docker容器2、Docker容器3或Docker容器4发送的数据,也可以分时接收。

假设服务器13在接收到Docker容器1发送的数据之后,接收到了Docker容器2发送的第二待存储数据。

步骤S105、对所述第二待存储数据进行分块处理,获得多个第二目标数据块。

服务器13中的目标区块识别模块对该第二待存储数据进行分块处理,具体可以按照预先设定的分块大小对该第二待存储数据进行分块处理,得到多个小的分块,每个小的分块记为第二目标数据块。

步骤S106、确定所述多个第二目标数据块与所述多个第一目标数据块的重复数据块。

由于Docker容器1和Docker容器2是同一个Docker服务器的Docker容器,Docker容器1和Docker容器2产生的数据可能相同,导致所述多个第二目标数据块与所述多个第一目标数据块有重复数据块,目标区块识别模块可以比对出所述多个第二目标数据块与所述多个第一目标数据块的重复数据块。

另外,目标区块识别模块还可以将重复数据块放入排队队列,Docker容器1中与排队队列重复的数据块存储到主存储器14之后,Docker容器1中的数据的令牌被释放,释放的令牌可以分配给排队队列中相应的数据块。

步骤S107、给所述多个第二目标数据块中除所述重复数据块之外的每个第二目标数据块分配一个令牌,并将分配有令牌的第二目标数据块对应的令牌发送给所述第二Docker容器,以使所述第二Docker容器存储所述分配有令牌的第二目标数据块。

目标区块识别模块给所述多个第二目标数据块中除所述重复数据块之外的每个第二目标数据块分配一个令牌,并将分配有令牌的第二目标数据块对应的令牌发送给Docker容器2,Docker容器2可将令牌作为第二目标数据块的标识,将分配有令牌的第二目标数据块,以及第二目标数据块的令牌发送给主存储器14,主存储器14对每个令牌标识的第二目标数据块进行存储。

本实施例中,当各个Docker容器同时有待存储的数据时,通过对各个Docker容器产生的待存储数据进行分块处理,给每个分块后的数据分配一个令牌,该令牌起到标识数据的作用,不同的分块数据对应不同的令牌,各个Docker容器可将分配有令牌的分块数据同时发送给存储器,存储器根据不同的令牌,存储不同的分块数据,各个Docker容器无需排队等待存储器存储数据,提高了数据存储效率。

图3为本发明另一实施例提供的数据存储方法流程图。在图1所示实施例的基础上,给所述多个第二目标数据块中除所述重复数据块之外的每个第二目标数据块分配一个令牌之后,还包括如下方法步骤:

步骤S301、接收存储器发送的已用令牌。

当主存储器14存储了第一目标数据块或第二目标数据块后,第一目标数据块或第二目标数据块对应的令牌可以释放,具体的,主存储器14将已用令牌发送给服务器13,服务器13将已用令牌转发给目标区块识别模块。

步骤S302、根据所述已用令牌对应的目标数据块,确定所述重复数据块中是否有与所述目标数据块相同的数据块。

目标区块识别模块接收到已用令牌后,确定出已用令牌对应的目标数据块,例如第一目标数据块或第二目标数据块,进一步确定步骤S106中重复数据块是否包括有与所述目标数据块相同的数据块。

步骤S303、若所述重复数据块中有与所述目标数据块相同的数据块,则将所述已用令牌分配给所述数据块。

若所述重复数据块中有与所述目标数据块相同的数据块,则目标区块识别模块将该已用令牌分配给所述数据块。

步骤S304、将所述已用令牌发送给所述数据块对应的Docker容器。

由于所述重复数据块是Docker容器2对应的第二目标数据块,目标区块识别模块将已用令牌发送给Docker容器2,Docker容器2根据该已用令牌将所述数据块发送给主存储器14。

本实施例中,当存储器存储数据后,将数据对应的令牌返回给目标区块识别模块,目标区块识别模块用存储器返回的令牌标记重复数据块中的数据,提高了令牌利用率。

图4为本发明另一实施例提供的数据存储方法流程图。在上述任一实施例的基础上,如图4所示,本实施例提供的数据存储方法还包括如下方法步骤:

步骤S401、在预设时间内检测所述存储器是否返回所述令牌。

另外,目标区块识别模块还可以记录发放出去的令牌是否在预设时间内被收回,即发放出去的令牌是否在预设时间内由主存储器14返回给了目标区块识别模块。

步骤S402、若在预设时间内所述存储器没有返回所述令牌,则将所述令牌分配给其他Docker容器。

假设某一令牌,从目标区块识别模块发放时刻开始,在预设时间内,主存储器14没有返回给目标区块识别模块,则目标区块识别模块将该令牌分配给其他Docker容器例如Docker容器3。

步骤S403、检测所述令牌的进程健康状态。

为了保证分配给Docker容器3的令牌正常执行数据存储过程,目标区块识别模块还可进一步检测该令牌的进程健康状态。

步骤S404、若所述进程健康状态表示所述令牌处于非正常状态,则给其他Docker容器分配一个新的令牌。

若所述进程健康状态表示所述令牌处于非正常状态,则目标区块识别模块给Docker容器3重新分配一个令牌。

步骤S405、调整所述预设分块大小。

进一步的,目标区块识别模块还可以调整预设分块大小,即调整对各个Docker容器发送的待存储数据的分块粒度。

本实施例中,通过检测每个令牌是否在预设时间内被收回,可将没有在预设时间内收回的令牌分配给其他Docker容器,并检测该令牌的进程健康状态,当该进程健康状态标识分配给其他Docker容器的令牌非正常状态时,给其他Docker容器分配一个新的令牌,保证了数据存储的正常执行,同时还可以调整预设分块大小,即可根据丢失的令牌数量,调整对各个Docker容器发送的待存储数据的分块粒度,提高了分块粒度的灵活性。

图5为本发明实施例提供的数据存储装置的结构图。本发明实施例提供的数据存储装置可以执行数据存储方法实施例提供的处理流程,如图5所示,数据存储装置包括接收模块51、处理模块52和发送模块53,其中,接收模块51用于接收第一Docker容器发送的第一待存储数据;接收第二Docker容器发送的第二待存储数据;处理模块52用于对所述第一待存储数据进行分块处理,获得多个第一目标数据块;给每个第一目标数据块分配一个令牌;对所述第二待存储数据进行分块处理,获得多个第二目标数据块;确定所述多个第二目标数据块与所述多个第一目标数据块的重复数据块;给所述多个第二目标数据块中除所述重复数据块之外的每个第二目标数据块分配一个令牌;发送模块53用于将每个第一目标数据块对应的令牌发送给所述第一Docker容器,以使所述第一Docker容器根据所述令牌存储所述多个第一目标数据块;将分配有令牌的第二目标数据块对应的令牌发送给所述第二Docker容器,以使所述第二Docker容器存储所述分配有令牌的第二目标数据块。

本实施例中,当各个Docker容器同时有待存储的数据时,通过对各个Docker容器产生的待存储数据进行分块处理,给每个分块后的数据分配一个令牌,该令牌起到标识数据的作用,不同的分块数据对应不同的令牌,各个Docker容器可将分配有令牌的分块数据同时发送给存储器,存储器根据不同的令牌,存储不同的分块数据,各个Docker容器无需排队等待存储器存储数据,提高了数据存储效率。

图6为本发明另一实施例提供的数据存储装置的结构图。如图6所示,在图5的基础上,接收模块51还用于接收存储器发送的已用令牌;处理模块52还用于根据所述已用令牌对应的目标数据块,确定所述重复数据块中是否有与所述目标数据块相同的数据块;若所述重复数据块中有与所述目标数据块相同的数据块,则将所述已用令牌分配给所述数据块;发送模块53还用于将所述已用令牌发送给所述数据块对应的Docker容器。

处理模块52具体用于根据预设分块大小,对所述第一待存储数据进行分块处理;根据预设分块大小,对所述第二待存储数据进行分块处理。

数据存储装置还包括检测模块54,检测模块54用于在预设时间内检测所述存储器是否返回所述令牌;处理模块52还用于若在预设时间内所述存储器没有返回所述令牌,则将所述令牌分配给其他Docker容器。

进一步的,检测模块54还用于检测所述令牌的进程健康状态;处理模块52还用于若所述进程健康状态表示所述令牌处于非正常状态,则给其他Docker容器分配一个新的令牌;调整所述预设分块大小。

本发明实施例提供的数据存储装置可以具体用于执行上述图3或图4所提供的方法实施例,具体功能此处不再赘述。

本实施例中,当存储器存储数据后,将数据对应的令牌返回给目标区块识别模块,目标区块识别模块用存储器返回的令牌标记重复数据块中的数据,提高了令牌利用率;通过检测每个令牌是否在预设时间内被收回,可将没有在预设时间内收回的令牌分配给其他Docker容器,并检测该令牌的进程健康状态,当该进程健康状态标识分配给其他Docker容器的令牌非正常状态时,给其他Docker容器分配一个新的令牌,保证了数据存储的正常执行,同时还可以调整预设分块大小,即可根据丢失的令牌数量,调整对各个Docker容器发送的待存储数据的分块粒度,提高了分块粒度的灵活性。

综上所述,本发明实施例当各个Docker容器同时有待存储的数据时,通过对各个Docker容器产生的待存储数据进行分块处理,给每个分块后的数据分配一个令牌,该令牌起到标识数据的作用,不同的分块数据对应不同的令牌,各个Docker容器可将分配有令牌的分块数据同时发送给存储器,存储器根据不同的令牌,存储不同的分块数据,各个Docker容器无需排队等待存储器存储数据,提高了数据存储效率;当存储器存储数据后,将数据对应的令牌返回给目标区块识别模块,目标区块识别模块用存储器返回的令牌标记重复数据块中的数据,提高了令牌利用率;通过检测每个令牌是否在预设时间内被收回,可将没有在预设时间内收回的令牌分配给其他Docker容器,并检测该令牌的进程健康状态,当该进程健康状态标识分配给其他Docker容器的令牌非正常状态时,给其他Docker容器分配一个新的令牌,保证了数据存储的正常执行,同时还可以调整预设分块大小,即可根据丢失的令牌数量,调整对各个Docker容器发送的待存储数据的分块粒度,提高了分块粒度的灵活性。

在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。

上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。

本领域技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

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

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