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

一种数据存储方法、装置、电子设备及存储介质

文献发布时间:2023-06-19 10:11:51


一种数据存储方法、装置、电子设备及存储介质

技术领域

本发明实施例涉及计算机技术,尤其涉及一种并行调度方法、装置、电子设备及存储介质。

背景技术

数据库管理系统为充分利用多核CPU物理资源、提升查询执行的效率,通常会支持多线程并发执行。并行查询的框架有一种生产者-消费者模型,该模型通过将查询计划按照数据发送操作符以及数据接收操作符划分,得到一个或者多个子计划,子计划在执行时按照依赖关系先后调度,以确保被依赖的子计划C(即生产者)在执行完成或者第一次输出数据之后,调度依赖于它的父层子计划P(即消费者)。

由于在基于生产者-消费者并发调度模型框架中,对公共子计划的处理方式通常是等待生产者子计划调度完成,即数据存储完成后,再调度消费者子计划。这种方式的并发利用率不高,且响应时间较长。

发明内容

本发明提供一种数据存储方法、装置、电子设备及存储介质,以实现能够有效地提升并发效率,减少响应时间。

第一方面,本发明实施例提供了一种数据存储方法,应用于数据存储节点,包括:

根据获取到的左孩子节点的待存储数据,确定所述待存储数据对应的内存空间,所述内存空间包括一个或多个内存切片,每一内存切片对应所述待存储数据中的子数据;

将子数据存入对应的内存切片之后,触发数据加载节点读取对应内存切片中存入的子数据,直至所述待存储数据全部存入对应的内存空间。

进一步的,所述根据获取到的左孩子节点的待存储数据,确定所述待存储数据对应的内存空间,所述内存空间包括一个或多个内存切片,每一内存切片对应所述待存储数据中的子数据,包括:

根据获取到的所述待存储数据的行数与内存切片行数,确定所述待存储数据对应的内存空间中内存切片数量;

如果所述待存储数据对应的内存空间中内存切片数量大于零,则根据所述待存储数据对应的内存空间中内存切片数量在数据存储节点内存结构中申请对应的内存空间。

进一步的,所述如果所述待存储数据对应的内存空间中内存切片数量大于零,则根据所述待存储数据对应的内存空间中内存切片数量在数据存储节点内存中申请对应的内存空间之后,还包括:

如果所述待存储数据申请内存空间失败,则将数据存储节点中内存结构中的数据存入磁盘,同时将数据存储节点的访问状态更改为“限制访问”,查询所述数据存储节点对应的数据加载节点的个数及加载状态;

如果所述数据存储节点对应的数据加载节点的个数为零或所述数据存储节点对应的数据加载节点均完成加载,则释放所述数据存储节点内存中的数据。

进一步的,所述如果所述数据存储节点对应的数据加载节点的个数为零或所述数据存储节点对应的数据加载节点均完成加载,则释放所述数据存储节点内存中的数据之后,还包括:

将接收所述获取到的左孩子节点的待存储数据存入磁盘,直至所述待存储数据全部存入磁盘;

将所述数据存储节点的访问状态更改为“完全访问”,并触发所述数据加载节点继续执行加载。

进一步的,所述根据获取到的左孩子节点的待存储数据,确定所述待存储数据对应的内存空间,所述内存空间包括一个或多个内存切片,每一内存切片对应所述待存储数据中的子数据之前,包括:

设置自身的存储状态为“完全访问”;

获取左孩子节点的数据。

进一步的,应用于数据加载节点,所述方法包括:

获取所述数据存储节点的当前访问状态;

如果所述数据存储的当前访问状态为“限制访问”,则等待所述数据存储节点触发继续执行操作;

如果所述数据存储节点触发所述数据加载节点且所述数据存储节点内存结构中数据不为空,则遍历所述数据存储节点内存结构中数据;

如果遍历当前内存切片的序号大于等于所述数据存储节点内存结构中内存切片总数且所述数据存储节点存储操作未结束,则继续等待所述数据存储节点触发数据加载节点进行数据加载操作;

如果所述数据存储节点触发所述数据加载节点继续数据加载遍历当前内存切片的序号大于等于数据存储节点内存结构中内存切片总数且磁盘数据为空,则增加所述数据存储节点的完成数据加载的所述数据加载节点的个数,当前所述数据加载节点执行完成。

进一步,所述如果所述数据存储节点触发所述数据加载节点且所述数据存储节点内存结构中数据不为空,则遍历所述数据存储节点内存结构中数据,包括:

如果遍历当前内存切片的序号小于所述数据存储节点内存结构中内存切片的总数,则将当前内存切片的序号加1继续进行遍历;

如果所述遍历当前内存切片的序号大于等于所述数据存储节点内存结构中内存切片的总数且所述数据存储节点存储操作结束,则增加所述数据存储节点的完成数据加载的所述数据加载节点的个数,当前所述数据加载节点执行完成。

第二方面,本发明实施例还提供了一种数据存储装置,该装置包括:

数据存储模块,用于根据获取到的左孩子节点的待存储数据,确定所述待存储数据对应的内存空间,所述内存空间包括一个或多个内存切片,每一内存切片对应所述待存储数据中的子数据;

读取触发模块,用于将子数据存入对应的内存切片之后,触发数据加载节点读取对应内存切片中存入的子数据,直至所述待存储数据全部存入对应的内存空间。

第三方面,本发明实施例还提供了一种电子设备,其特征在于,所述电子设备包括:

一个或多个处理器;

存储装置,用于存储一个或多个程序,

当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现任一所述的并行调度方法。

第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现任一所述的并行调度方法。

本发明通过接收父计划的数据存储指令后,开始所述数据存储节点数据存储;根据获取到的左孩子节点的待存储数据,确定所述待存储数据对应的内存空间,所述内存空间包括一个或多个内存切片,每一内存切片对应所述待存储数据中的子数据;将子数据存入对应的内存切片之后,触发数据加载节点读取对应内存切片中存入的子数据,直至所述待存储数据全部存入对应的内存空间,解决在数据存储节点与数据加载节点同时执行时,但因为数据加载节点依赖于数据存储节点,受执行逻辑限制陷入阻塞,使得数据存储节点和数据加载节点无法真正的同时执行问题,实现能够有效地提升并发效率,减少响应时间效果。

附图说明

图1是本发明实施例一中的一种数据存储的方法的流程图;

图1A是本发明实施例一中的一种数据存储方法的现有技术原理图;

图1B是本发明实施例一中的一种数据存储方法的现有技术原理图;

图1C是本发明实施例一中的一种数据存储方法的现有技术原理图;

图1D是本发明实施例一中的一种数据存储方法的原理图;

图1E是本发明实施例一中的一种数据存储方法的流程图;

图2是本发明实施例二中的一种数据存储方法的流程图;

图2A是本发明实施例二中的一种数据存储方法的原理图;

图3是本发明实施例三中的一种数据存储装置的结构示意图;

图4是本发明实施例三中的一种电子设备的结构示意图。

具体实施方式

下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。

实施例一

图1为本发明实施例一提供的一种数据存储的方法的流程图,本实施例可适用于一个或多个子计划在执行时具有依赖先后关系的情况,该方法可以由数据存储装置来执行,该装置可以通过软件和/或硬件的方式实现,并具体可继承与具备存储和计算能力来进行数据存储的电子设备中。

本发明实施例中,父计划可以理解为数据存储节点和数据加载节点的父节点,用于调度数据存储节点和数据加载节点进行指令操作。其中,数据存储节点与数据加载节点为父计划的并行子计划。数据存储节点可以理解为父计划中一个子计划中存储节点或数据存储操作符,用于根据存储父计划的操作指令进行对应数据存储。数据存储指令可以理解为父计划触发数据存储节点进行相关存储操作,也可以理解为父计划将控制权限传递给数据存储节点进行数据存储操作。

本发明实施例中,数据存储节点接收父计划根据数据存储需求发送的数据存储指令,用于使数据存储节点接收父计划的控制权限。数据存储节点根据父计划发送的数据存储指令进行相应的数据存储操作。

本发明实施例中,应用于当视图或其它相同的子计划被引用超过一次,即数据存储节点中存储的数据需要被调用一次以上时,将相同的子计划或子计划的部分视为公共子计划(Pulic Plan,PP)单独提取出来执行并存储其结果集,将对PP的引用转换为对结果集的数据访问。如此便可以减少PP执行的次数,提高查询效率。

相同的子计划被引用超过一次的场景有很多种,具体的:

图1B为本发明实施例一中的一种数据存储方法的现有技术原理图,如图1B所示,通过哈希连接节点将数据表连接条件完全一致的子计划与父计划分别连接,需要多次查询或访问数据表。图1C为本发明实施例一中的一种数据存储方法的原理图,如图1C所示,在数据存储节点中存入结果集,数据存储节点的作用是存储孩子节点发送的数据,并引入数据加载节点。其中,数据加载节点与数据存储节点对应,用于获取数据存储节点的数据通过管道节点返回给父计划。管道节点与数据存储节点、哈希连接节点、数据加载节点、父计划共存于一个计划树中,用于关联多节点。相比于图1B来讲引入结果集复用的图1C为优化后的执行计划,通过缓存视图对应的计划的结果集,可以减少数据表访问连接操作的次数,以提升查询效率。图1D为本发明实施例一中的一种数据存储方法的现有技术原理图,如图1D所示,子计划2中的数据加载节点需要访问子计划1中的数据存储节点,由于子计划2依赖于子计划1,虽然调度子计划时,同时调度子计划1和子计划2,但是由于数据存储节点的执行逻辑,在数据表1与数据表2连接完成之前,或者说在数据存储节点存储了所有结果之前,子计划2的数据加载节点都会陷入阻塞,因此子计划1和子计划2无法同时执行。因此在具体的调用过程中仅仅引用结果集并不能真正的实现子计划1和子计划2的同时调用或者执行。

本发明实施例中,利用数据存储节点的数据存储分为两部分:在数据量较少,内存可以容纳时,采用内存结构存储;当内存不足以容纳所有数据时,将内存结构中的数据存储到磁盘中。

如图1所示,提供一种数据存储的方法,具体包括如下步骤:

步骤110,根据获取到的左孩子节点的待存储数据,确定所述待存储数据对应的内存空间,所述内存空间包括一个或多个内存切片,每一内存切片对应所述待存储数据中的子数据;

本发明实施例中,左孩子节点可以理解为数据存储节点的数据来源节点,用于通过哈希连接节点获取子计划树中对应数据表中的数据,其中,数据存储节点用于存储左孩子节点发送的数据。待存储数据可以理解为任一时刻左孩子节点上的数据。内存空间可以理解为数据存储节点中内存结构对应的内存空间。内存切片可以理解为数据存储节点内存结构对应的内存空间按固定内存大小划分的单元内存。待存储数据中的子数据可以理解为待存储数据中任一内存切片存满时对应的存储数据,为待存储数据中的部分数据。

本发明实施例中,利用数据存储节点的数据存储分为两部分:在数据量较少,内存可以容纳时,采用内存结构存储;当内存不足以容纳所有数据时,将内存结构中的数据存储到磁盘中。数据存储节点执行数据存储相关操作是对左孩子节点的待存储数据进行存储的,根据从左孩子节点上获取的待存储数据,确定数据存储节点需要在数据存储节点内存结构所占用的内存空间大小。数据存储节点中内存结构中的内存空间按照固定内存大小划分多个内存切片,用于存储待存储数据中的子数据。

步骤120,将子数据存入对应的内存切片之后,如果该内存切片中的数据存储满或者数据存储节点执行结束,则触发数据加载节点读取对应内存切片中存入的子数据,直至所述待存储数据全部存入对应的内存空间。

本发明实施例中,数据存储节点与数据加载节点均基于数据管理系统中查询的框架中的生产者-消费者模型。图1A为本发明实施例中一种数据存储方法的现有技术原理图,如图1A所示,子计划1和子计划3相对于子计划2是生产者,子计划2相对应子计划1和子计划3是消费者。在进行数据调度时,子计划2与子计划1和子计划3可以被同时调度,这样子计划1和子计划3产生的数据可以及时被子计划2获取不需要写入中间结果,形成流水操作。图1A中的调度顺序可以是调度子计划1与子计划2二者形成流水操作,子计划1产生的数据被子计划2消费,子计划1和子计划2协同工作。子计划1完成调度操作后,调度子计划3,使得子计划2和子计划3形成新的流水操作。其中,数据存储节点如子计划1和子计划3用于从相关数据表中获取数据。数据加载节点如子计划2是消费者,数据存储节点与数据加载节点对于父计划而言是并行的。

本发明实施例中,数据加载节点可以理解为父计划中一个子计划中加载节点或数据加载操作符,用于根据父计划发送的数据加载指令进行相应的数据加载。其中,数据加载节点与数据存储节点为父计划的并行子计划,且数据加载节点依赖于数据存储节点。

本发明实施例中,数据存储节点获取到的左孩子节点上的待存储数据,将待存储数据依次存储于数据存储节点中内存结构的内存切片上。当待存储数据中任一子数据存储于内存切片后,如果该内存切片中的数据存储满或者数据存储节点执行结束,则数据存储节点触发数据加载节点继续读取内存切片中的子数据。

进一步的,所述根据获取到的左孩子节点的待存储数据,确定所述待存储数据对应的内存空间,所述内存空间包括一个或多个内存切片,每一内存切片对应所述待存储数据中的子数据,包括:

根据获取到的所述待存储数据的行数与内存切片行数,确定所述待存储数据对应的内存空间中内存切片数量;

如果所述待存储数据对应的内存空间中内存切片数量大于零,则根据所述待存储数据对应的内存空间中内存切片数量在数据存储节点内存结构中申请对应的内存空间。

本发明实施例中,待存储数据的行数可以理解为左孩子节点上的数据的总行数。内存切片行数可以理解为数据存储节点中内存结构的按固定大小划分的单元内存对应的内存大小的行数。

本发明实施例中,数据存储节点获取的左孩子节点上的待存储数据,确定待存储数据的总行数。根据划分的固定大小的内存切片,确定内存切片的行数。根据待存储数据的行数与内存切片行数,确定将待存储数据存储于数据存储节点的内存结构中所需要的占用的内存切片数量。如果待存储数据对应的内存空间中内存切片数量大于零,则说明待存储数据不为空,需要根据待存储数据对应的内存空间中内存切片数量从数据存储节点的内存结构中申请对应的内存空间。

本发明实施例中,根据待存储数据的总行数和内存切片的行数,确定将待存储数据存储于数据存储节点的内存结构中所需要的占用的内存切片数量。其中,内存切片的行数可以是当前内存切片可容数据行数,也可以是固定大小划分的单元内存对应的内存大小的行数。实质上,数据存储节点的内存结构中可占用的内存空间与待存储数据的总行数对应的内存空间相等,则待存储数据申请内存空间成功。

进一步的,所述如果所述待存储数据对应的内存空间中内存切片数量大于零,则根据所述待存储数据对应的内存空间中内存切片数量在数据存储节点内存中申请对应的内存空间之后,还包括:

如果所述待存储数据申请内存空间失败,则将数据存储节点中内存结构中的数据存入磁盘,同时将数据存储节点的访问状态更改为“限制访问”,查询所述数据存储节点对应的数据加载节点的个数及加载状态;

如果所述数据存储节点对应的数据加载节点的个数为零或所述数据存储节点对应的数据加载节点均完成加载,则释放所述数据存储节点内存中的数据。

本发明实施例中,磁盘可以理解为数据库管理系统中的可对数据进行记录和存储的存储器。加载状态可以理解为数据存储节点上注册后的数据加载节点在当前数据存储节点加载数据的状态情况。

本发明实施例中,当根据待存储数据所需的内存空间中内存切片数量从数据存储节点的内存结构中申请对应的内存空间时,如果当前数据存储节点内存结构中可用内存切片数量小于待存储数据对应的内存空间中内存切片数量,则说明当前数据存储节点内存结构中内存空间大小存放不下待存储数据。待存储数据存入内存空间失败,需要将数据存储节点的访问状态设置为“限制访问”,同时将数据存储节点中内存结构中的数据存入磁盘。将数据存储节点中内存结构中的数据全部存储于磁盘后,需要查询当前数据存储节点注册过的数据加载节点的个数及数据加载节点的加载状态。如果数据存储节点对应的数据加载节点的个数为零,则说明数据存储节点没有注册数据加载节点,当前数据存储节点内存结构中数据没有被调用,可以进行内存结构对应的内存空间的释放回收内存空间。或者,如果数据存储节点上注册的数据加载节点均完成加载,则说明数据存储节点内存结构中数据均完成调用,可以进行内存结构对应的内存空间的释放回收内存空间。

进一步的,所述如果所述数据存储节点对应的数据加载节点的个数为零或所述数据存储节点对应的数据加载节点均完成加载,则释放所述数据存储节点内存中的数据之后,还包括:

将接收所述获取到的左孩子节点的待存储数据存入磁盘,直至所述待存储数据全部存入磁盘;

将所述数据存储节点的访问状态更改为“完全访问”,并触发所述数据加载节点继续执行加载。

本发明实施例中,完全访问可以理解为数据存储节点允许对应的数据加载节点,从数据存储节点加载或调用数据。

本发明实施例中,数据存储节点将获取到左孩子节点上的待存储数据直接存入磁盘中,直至待存储数据全部存入磁盘内。将数据存储节点的访问状态从“限制访问”更改为“完全访问”,允许数据存储节点对应的数据加载节点从数据存储节点加载数据,并触发数据加载节点继续执行数据加载相关操作。

进一步的,所述根据获取到的左孩子节点的待存储数据,确定所述待存储数据对应的内存空间,所述内存空间包括一个或多个内存切片,每一内存切片对应所述待存储数据中的子数据之前,包括:

设置自身的存储状态为“完全访问”;

获取左孩子节点的数据。

本发明实施例中,数据存储节点在发送获取指令给左孩子节点之前或数据存储节点在执行数据存储相关操作之前需要将自身的访问状态设置为“完全访问”,允许数据存储节点对应的数据加载节点从数据存储节点加载数据。

数据存储节点进行存储操作实现过程多种多样,具体如下:

图1E为本发明实施例一中的一种数据存储方法的流程图,如1E所示,数据存储节点接收父计划根据数据存储需求发送的数据存储指令,用于使数据存储节点接收父计划的控制权限。数据存储节点根据父计划发送的数据存储指令进行相应的数据存储操作。S1、数据存储节点设置当前访问状态为“完全访问”后,获取左孩子节点上的待存储数据,根据待存储节点行数和内存切片行数据,确定待存储数据对应的内存空间中内存切片数量。S2、判断待存储数据对应内存空间中内存切片数量是否大于零,如果大于零,则根据确定待存储数量对应的内存空间中内存切片数量申请数据存储节点内存结构中内存空间;如果等于零,则数据存储节点本次数据存储结束。S3、判断根据确定待存储数量对应的内存空间中内存切片数量,从数据存储节点内存结构中内存空间中申请待存储数据对应的内存空间是否成功。如果申请成功将任一子数据存储于内存切片后,更新当前可访问内存切片的数量,并触发数据加载节点继续执行加载后,数据存储节点重新获取左孩子节点上的待存储数据。如果申请失败将数据存储节点的访问状态设置为“限制访问”,并将当前数据存储节点内存结构中的数据转存于磁盘中。S4、判断数据存数节点对应数据加载节点的个数是否为零,如果数据存储节点对应数据加载节点的个数不为零,继续判断数据存储节点对应的数据加载节点的加载状态是否为加载完成,若数据存储节点对应的数据加载节点的加载状态为加载完成,则释放数据存储节点内存结构中的数据;若数据存储节点对应的数据加载节点的加载状态未完成,则等待数据存储节点对应的数据加载节点加载完成,再释放数据存储节点内存结构中的数据。如果数据存储节点对应数据加载节点的个数为零,则释放数据存储节点内存结构中数据。S5、将数据存储节点获取的左孩子节点上的待存储数据存储于磁盘中,并将数据存储节点的当前访问状态更改为“完全访问”,并触发数据加载节点继续进行数据加载操作。

本发明根据获取到的左孩子节点的待存储数据,确定所述待存储数据对应的内存空间,所述内存空间包括一个或多个内存切片,每一内存切片对应所述待存储数据中的子数据;将子数据存入对应的内存切片之后,触发数据加载节点读取对应内存切片中存入的子数据,直至所述待存储数据全部存入对应的内存空间,解决当数据存储节点与数据加载节点同时执行时,因为数据加载节点依赖于数据存储节点,受执行逻辑限制陷入阻塞,使得数据存储节点和数据加载节点无法真正的同时执行问题,实现能够有效地提升并发效率,减少响应时间效果。

实施例二

图2是本发明实施例二提供的一种数据存储方法的流程图,本发明实施例的技术方案是上述技术方案的基础上的进一步细化,应用于数据加载节点,该方法具体包括如下步骤:

步骤210,获取所述数据存储节点的当前访问状态;

本发明实施例中,数据加载节点接收父计划根据数据加载需求发送的数据加载指令,用于使数据加载节点接收父计划的数据加载控制权限。数据加载节点根据父计划发送的数据加载指令进行相应的数据加载操作。数据加载节点进行相应的操作之前需要向对应的数据存储节点进行访问前的注册。

步骤220,如果所述数据存储的当前访问状态为“限制访问”,则等待所述数据存储节点触发继续执行操作;

本发明实施例中,数据加载节点从数据存储节点中获得数据存储节点的访问状态为“限制访问”,未注册过的数据加载节点不被数据存储节点允许进行节点注册操作,需要等待数据存储节点触发数据加载节点进行节点注册操作,注册完成后进行数据加载操作。已注册数据加载节点不受“限制访问”状态影响,可以继续加载数据。

步骤230,如果所述数据存储节点触发所述数据加载节点且所述数据存储节点内存结构中数据不为空,则遍历所述数据存储节点内存结构中数据;

本发明实施例中,数据加载节点接收到数据存储节点的触发操作继续进行数据加载操作后,未注册的数据加载节点向数据存储节点发送注册信息,并改写数据存储节点上加载相关信息完成数据加载节点在数据存储节点上的注册。已注册的数据加载节点从对应的数据存储节点继续加载数据,查看并判断数据存储节点内存结构中数据是否为空,如果数据存储节点内存结构中数据不为空,则开始遍历数据存储节点内存结构中数据。

步骤240,如果遍历当前内存切片的序号大于等于所述数据存储节点内存结构中内存切片总数且所述数据存储节点存储操作未结束,则继续等待所述数据存储节点触发数据加载节点进行数据加载操作;

本发明实施例中,数据加载节点遍历数据存储节点内存结构中内存切片,每遍历一个内存切片后更新遍历当前内存切片的序号,如果遍历当前内存切片的序号大于等于数据存储节点内存结构中内存切片总数,则查看并判断数据存储节点存储操作是否结束。若数据存储节点存储操作未结束,则继续等待数据存储节点触发数据加载节点进行数据加载操作。如果遍历当前内存切片的序号小于数据存储节点内存结构中内存切片总数,则继续遍历数据存储节点内存结构中内存切片直至当前内存切片的序号大于等于数据存储节点内存结构中内存切片总数。

步骤250,如果所述数据存储节点触发所述数据加载节点继续数据加载遍历当前内存切片的序号大于等于数据存储节点内存结构中内存切片总数且磁盘数据为空,则增加所述数据存储节点的完成数据加载的所述数据加载节点的个数,当前所述数据加载节点执行完成。

本发明实施例中,数据加载节点被数据存储节点触发继续数据加载,如果数据存储节点内存结构中数据不为空,则继续遍历数据存储节点内存结构中内存切片。如果数据加载节点遍历当前内存切片的序号大于等于数据存储节点的总数,则查询并判断磁盘中的数据是否为空,若磁盘中数据为空,则结束数据加载节点的数据加载操作;若磁盘数据不为空,则分批次遍历磁盘中数据,并不再遍历已遍历过的数据,直至磁盘中数据遍历结束。

进一步的,所述如果所述数据存储节点触发所述数据加载节点且所述数据存储节点内存结构中数据不为空,则遍历所述数据存储节点内存结构中数据,包括:

如果遍历当前内存切片的序号小于所述数据存储节点内存结构中内存切片的总数,则将当前内存切片的序号加1继续进行遍历;

如果所述遍历当前内存切片的序号大于等于所述数据存储节点内存结构中内存切片的总数且所述数据存储节点存储操作结束,则增加所述数据存储节点的完成数据加载的所述数据加载节点的个数,当前所述数据加载节点执行完成。

本发明实施例中,数据加载节点遍历数据存储节点内存结构中数据,遍历一个内存切片需要判断遍历当前内存切片的序号是否小于数据存储节点内存结构中内存切片的总数。如果遍历当前内存切片的序号小于数据存储节点内存结构中内存切片的总数,则需要将当前内存切片的序号加1继续进行遍历,直至遍历当前内存切片的序号大于等于数据存储节点内存结构中内存切片的总数。如果遍历当前内存切片的序号大于等于数据存储节点内存结构中内存切片的总数且数据存储节点存储操作结束,则增加完成数据加载的数据加载节点的个数,当前数据加载节点执行完成。

图2A为本发明实施例二中一种数据存储方法的流程图,图2A所示,数据加载节点接收父计划根据数据加载需求发送的数据加载指令,用于使数据加载节点接收父计划的数据加载控制权限。数据加载节点根据父计划发送的数据加载指令进行相应的数据加载操作。S21、数据加载节点开始数据加载操作获取数据加载节点对应的数据存储节点的访问状态,判断数据加载节点对应的数据存储节点的访问状态是否为“完全访问”。若当前数据加载节点对应的数据存储节点的访问状态为“完全访问”,则向数据存储节点注册当前数据加载节点;若当前数据加载节点对应的数据存储节点的访问状态不为“完全访问”,即为“限制访问”,则等待数据存储节点触发数据加载节点继续进行数据加载相关操作。S22、数据加载节点向数据存储节点注册之后,判断当前数据存储节点内存结构中数据是否为空,若当前数据存储节点内存结构中数据为空,则查看磁盘中数据;若当前数据存储节点内存结构中数据不为空,则遍历数据存储节点内存结构中内存切片,每遍历一个内存切片后更新当前遍历内存切片的序号,并判断当前内存切片序号是否小于数据存储节点内存结构的内存切片总数。S23、若当前内存切片序号大于等于数据存储节点内存结构的内存切片总数,则判断数据存储节点存储操作是否结束;若当前内存切片序号小于数据存储节点内存结构的内存切片总数,则继续执行数据遍历操作,直至当前内存切片序号大于等于数据存储节点内存结构的内存切片总数。S24、若数据存储节点存储操作结束,则增加数据存储节点对应完成数据加载的数据加载节点的个数,并结束当前数据加载节点的加载操作。若数据存储节点存储操作未结束,则等待数据存储节点触发数据加载节点继续数据加载操作。S25、判断当前遍历内存切片的序号是否小于数据存储节点内存结构中内存切片总数,若当前遍历内存切片的序号大于等于数据存储节点内存结构中内存切片总数,则判断磁盘是否为空;若当前遍历内存切片的序号小于数据存储节点内存结构中内存切片总数,则继续遍历数据存储节点内存结构中内存切片。S26、若磁盘为空,则增加数据存储节点对应的完成数据加载的数据加载节点的个数,并结束当前数据加载节点的加载操作;若磁盘不为空,则分批次遍历磁盘中数据,并不再重复遍历已遍历的数据,直至磁盘中数据遍历结束后结束当前数据加载节点的加载操作。

本发明通过获取所述数据存储节点的当前访问状态;如果所述数据存储的当前访问状态为“限制访问”,则等待所述数据存储节点触发继续执行操作;如果所述数据存储节点触发所述数据加载节点且所述数据存储节点内存结构中数据不为空,则遍历所述数据存储节点内存结构中数据;如果遍历当前内存切片的序号大于等于所述数据存储节点内存结构中内存切片总数且所述数据存储节点存储操作未结束,则继续等待所述数据存储节点触发数据加载节点进行数据加载操作;如果所述数据存储节点触发所述数据加载节点继续数据加载遍历当前内存切片的序号大于等于数据存储节点内存结构中内存切片总数且磁盘数据为空,则结束数据加载节点的数据加载操作,解决当数据存储节点与数据加载节点同时执行时,因为数据加载节点依赖于数据存储节点,受执行逻辑限制陷入阻塞,使得数据存储节点和数据加载节点无法真正的同时执行问题,实现能够有效地提升并发效率,减少响应时间效果。

实施例三

图3是本发明实施例三中一种数据存储装置的结构示意图,应用于数据存储节点,该装置包括:

数据存储模块310,用于根据获取到的左孩子节点的待存储数据,确定所述待存储数据对应的内存空间,所述内存空间包括一个或多个内存切片,每一内存切片对应所述待存储数据中的子数据;

读取触发模块320,用于将子数据存入对应的内存切片之后,触发数据加载节点读取对应内存切片中存入的子数据,直至所述待存储数据全部存入对应的内存空间。

进一步的,数据存储模块310具体用于:

根据获取到的所述待存储数据的行数与内存切片行数,确定所述待存储数据对应的内存空间中内存切片数量;

如果所述待存储数据对应的内存空间中内存切片数量大于零,则根据所述待存储数据对应的内存空间中内存切片数量在数据存储节点内存结构中申请对应的内存空间。

进一步的,数据存储模块310具体还用于:

如果所述待存储数据申请内存空间失败,则将数据存储节点中内存结构中的数据存入磁盘同时将数据存储节点的访问状态更改为“限制访问”,查询所述数据存储节点对应的数据加载节点的个数及加载状态;

如果所述数据存储节点对应的数据加载节点的个数为零或所述数据存储节点对应的数据加载节点均完成加载,则释放所述数据存储节点内存中的数据。

进一步的,数据存储模块310具体还用于:

将接收所述获取到的左孩子节点的待存储数据存入磁盘,直至所述待存储数据全部存入磁盘;

将所述数据存储节点的访问状态更改为“完全访问”,并触发所述数据加载节点继续执行加载。

进一步的,数据存储模块310具体还用于:

设置自身的存储状态为“完全访问”;

获取左孩子节点的数据。

进一步的,应用于数据加载节点,读取触发模块320具体用于:

获取所述数据存储节点的当前访问状态;

如果所述数据存储的当前访问状态为“限制访问”,则等待所述数据存储节点触发继续执行操作;

如果所述数据存储节点触发所述数据加载节点且所述数据存储节点内存结构中数据不为空,则遍历所述数据存储节点内存结构中数据;

如果遍历当前内存切片的序号大于等于所述数据存储节点内存结构中内存切片总数且所述数据存储节点存储操作未结束,则继续等待所述数据存储节点触发数据加载节点进行数据加载操作;

如果所述数据存储节点触发所述数据加载节点继续数据加载遍历当前内存切片的序号大于等于数据存储节点内存结构中内存切片总数且磁盘数据为空,则增加所述数据存储节点的完成数据加载的所述数据加载节点的个数,当前所述数据加载节点执行完成。

进一步的,应用于数据加载节点,读取触发模块320具体用于:

如果遍历当前内存切片的序号小于所述数据存储节点内存结构中内存切片的总数,则将当前内存切片的序号加1继续进行遍历;

如果所述遍历当前内存切片的序号大于等于所述数据存储节点内存结构中内存切片的总数且所述数据存储节点存储操作结束,则增加所述数据存储节点的完成数据加载的所述数据加载节点的个数,当前所述数据加载节点执行完成。

本发明实施例所提供的数据存储装置可执行本发明任意实施例所提供的数据存储方法,具备执行方法相应的功能模块和有益效果。

实施例4

图4为本发明实施例4提供的一种电子设备的结构示意图。图4示出了适于用来实现本发明实施方式的示例性电子设备12的框图。图4显示的电子设备12仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。

如图4所示,电子设备12以通用计算设备的形式表现。电子设备12的组件可以包括但不限于:一个或者多个处理器或者处理单元16,系统存储器28,连接不同系统组件(包括系统存储器28和处理单元16)的总线18。

总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围组件互连(PCI)总线。

电子设备12典型地包括多种计算机系统可读介质。这些介质可以是任何能够被设备/终端/服务器12访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。

系统存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)30和/或高速缓存存储器32。电子设备12可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34可以用于读写不可移动的、非易失性磁介质(图4未显示,通常称为“硬盘驱动器”)。尽管图4中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如CD-ROM,DVD-ROM或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。存储器28可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明各实施例的功能。

具有一组(至少一个)程序模块42的程序/实用工具40,可以存储在例如存储器28中,这样的程序模块42包括但不限于操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常执行本发明所描述的实施例中的功能和/或方法。

电子设备12也可以与一个或多个外部设备14(例如键盘、指向设备、显示器24等)通信,还可与一个或者多个使得用户能与该电子设备12交互的设备通信,和/或与使得该设备/终端/服务器12能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口22进行。并且电子设备12还可以通过网络适配器20与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器20通过总线18与电子设备12的其它模块通信。应当明白,尽管图中未示出,可以结电子设备12使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。

处理单元16通过运行存储在系统存储器28中的程序,从而执行各种功能应用以及数据处理,例如实现本发明实施例所提供的数据存储方法,该方法包括:

根据获取到的左孩子节点的待存储数据,确定所述待存储数据对应的内存空间,所述内存空间包括一个或多个内存切片,每一内存切片对应所述待存储数据中的子数据;

将子数据存入对应的内存切片之后,触发数据加载节点读取对应内存切片中存入的子数据,直至所述待存储数据全部存入对应的内存空间。

实施例五

本发明实施例五还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时用于执行一种数据存储方法,应用于数据存储节点,该方法包括:

根据获取到的左孩子节点的待存储数据,确定所述待存储数据对应的内存空间,所述内存空间包括一个或多个内存切片,每一内存切片对应所述待存储数据中的子数据;

将子数据存入对应的内存切片之后,触发数据加载节点读取对应内存切片中存入的子数据,直至所述待存储数据全部存入对应的内存空间。

本发明实施例的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CDROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。

计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。

计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、电线、光缆、RF等等,或者上述的任意合适的组合。

可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如”C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络包括局域网(LAN)或广域网(WAN)连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。

注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

相关技术
  • 数据存储方法和装置、数据查询方法和装置、数据结构、电子设备及计算机可读存储介质
  • 数据存储方法、数据存储装置、电子设备、存储介质
技术分类

06120112457828