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

数据传输方法和数据库系统

文献发布时间:2023-06-19 09:29:07


数据传输方法和数据库系统

技术领域

本公开涉及计算机技术领域,尤其涉及一种数据传输方法和数据库系统。

背景技术

无共享的分布式数据库系统包括一个主节点和多个分布式的计算节点(主机),主节点中部署主实例,每个计算节点中可以部署多个计算实例,其主实例和各个计算实例之间采用基于传输控制协议(Transmission Control Protocol,简称TCP)的网络连接来进行数据传输,在数据传输之前,需要先对数据库系统中的主节点与各个计算实例之间分别建立TCP网络连接,每个网络连接的发送方和接收方都需要分别分配一个TCP端口。

对于大规模的分布式数据库来说,需要部署大量的计算节点,每个计算节点中可能部署多个计算实例,在查询任务并发甚至高并发的场景中,各个计算实例与主实例之间进行数据传输需要占用大量的TCP端口,然而,TCP端口的数量是有限的。

这样,基于TCP协议,无法部署大规模的数据库系统。

发明内容

为了解决上述技术问题或者至少部分地解决上述技术问题,本公开提供了一种数据传输方法和数据库系统。

第一方面,本公开提供了一种数据传输方法,应用于数据库系统,所述数据库系统包括:主实例和多个计算实例,所述方法包括:

所述主实例向所述多个计算实例分别发送指令集;

每个所述计算实例执行所述指令集,得到所述计算实例对应的所述指令集的执行结果;

多个执行所述指令集的计算实例向所述主实例的同一接收端口发送其分别对应的所述指令集的执行结果。

可选的,所述方法还包括:

每个计算实例通过同一个接收端口接收其他计算实例发送的数据,通过同一个发送端口向其他计算实例发送数据。

可选的,所述指令集包括多个子指令集;

每个所述计算实例执行所述指令集,得到所述计算实例对应的所述指令集的执行结果,包括:

每个所述计算实例启动多个执行器对应执行所述指令集中的多个子指令集,得到所述计算实例对应的所述指令集的执行结果;其中,每个执行器通过同一个接收端口接收其他执行器发送的数据,通过同一个发送端口向其他执行器发送数据。

可选的,所述每个计算实例通过同一个接收端口接收其他计算实例发送的数据,通过同一个发送端口向其他计算实例发送数据,包括:

每个计算实例基于RUDP接收其他计算实例发送的数据,基于RUDP向其他计算实例发送数据。

可选的,所述每个计算实例通过同一个接收端口接收其他计算实例发送的数据,通过同一个发送端口向其他计算实例发送数据,包括:

每个计算实例基于UDP接收其他计算实例发送的数据,基于UDP向其他计算实例发送数据。

可选的,所述每个执行器通过同一个接收端口接收其他执行器发送的数据,通过同一个发送端口向其他执行器发送数据,包括:

每个执行器基于RUDP接收其他执行器发送的数据,基于RUDP向其他执行器发送数据。

可选的,所述每个执行器通过同一个接收端口接收其他执行器发送的数据,通过同一个发送端口向其他执行器发送数据,包括:

每个执行器基于UDP接收其他执行器发送的数据,基于UDP向其他执行器发送数据。

可选的,所述多个执行所述指令集的计算实例向所述主实例的同一接收端口发送其分别对应的所述指令集的执行结果,包括:

多个执行所述指令集的计算实例基于可靠用户数据报协议RUDP向所述主实例发送其分别对应的所述指令集的执行结果。

可选的,所述多个执行所述指令集的计算实例向所述主实例的同一接收端口发送其分别对应的所述指令集的执行结果,包括:

多个执行所述指令集的计算实例基于用户数据报协议UDP向所述主实例发送其分别对应的所述指令集的执行结果。

第二方面,本公开提供一种数据库系统,包括:主实例和多个计算实例;

所述数据库系统用于执行如上述第一方面所述的数据库系统的数据传输方法。

本公开实施例提供的技术方案与现有技术相比具有如下优点:数据库系统中的主节点向多个计算节点分别发送指令集,每个计算节点接收到主节点发送的指令集后,启动一个计算实例执行指令集,得到计算实例对应的指令集的执行结果,多个执行指令集的计算实例向主节点的同一接收端口发送其分别对应的指令集的执行结果。在数据库进行查询任务时,主节点通过同一接收端口接收多个执行指令集的计算实例分别发送的计算实例对应的指令集的执行结果,在保证查询的正确性的同时减少了数据传输占用过多的接收端口,提高了数据库系统的性能,满足了海量数据存储分析和计算的需求,实现了更大规模的数据库系统的部署。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。

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

图1A为一种数据库系统与客户端的交互示意图;

图1B为一种数据库系统的结构示意图;

图2为本公开实施例提供的一种数据传输方法的交互示意图;

图3为本公开实施例提供的另一种数据传输方法的交互示意图;

图4为本公开实施例提供的再一种数据传输方法的交互示意图;

图5为一种数据库系统执行查询任务的流程示意图;

图6为另一种数据库系统执行查询任务的流程示意图。

具体实施方式

为了能够更清楚地理解本公开的上述目的、特征和优点,下面将对本公开的方案进行进一步描述。需要说明的是,在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合。

在下面的描述中阐述了很多具体细节以便于充分理解本公开,但本公开还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本公开的一部分实施例,而不是全部的实施例。

首先对本发明所涉及的名词进行解释:

分布式数据库,是用计算机网络将物理上分散的多个数据库单元连接起来组成的一个逻辑上统一的数据库。其中,每个被连接起来的数据库单元称为计算节点。分布式数据库包括至少两个计算节点。计算节点可以是分布在不同地方的物理计算节点,也可以是分布在同一个物理数据库中的逻辑计算节点。

连接(Join),数据库中最重要的查询,将两个表或多表的查询结果组合在一起。

分组(group by),是指根据一个或多个列对结果集进行分组,达到对数据的分类更加精确。

图1A为一种数据库系统与客户端的交互示意图,如图1A所示,至少一个客户端与无共享的分布式数据库系统连接。无共享的分布式数据库可以包括主节点和多个计算节点,客户端与主节点连接,如图1A中所示的为3个计算节点,分别为计算节点1、计算节点2和计算节点3,可以理解,图1A中计算节点的数量只是一种示例,并不构成对本公开的限制,其中,主节点为一个服务器或者终端设备,主节点上部署主实例。一个计算节点为一个服务器或者终端设备,一个计算节点可以部署一个或者多个计算实例。

主实例存储有系统表,系统表包括但不限于:计算节点的节点信息、计算实例在计算节点的分布信息、数据表的元数据和数据表中的数据在各个计算实例的分布情况。在数据库系统中,主实例并不存储数据表中的数据,而是根据分布规则将数据存储在各个计算实例的相应数据表中。

若数据库需要执行查询等任务,则由客户端向主节点的主实例发送查询请求,可选的,查询请求可以为结构化查询语言(Structured Query Language,简称SQL)语句。

主实例根据查询请求和数据在各个计算实例的分布情况,确定指令集,其中,指令集为根据查询请求确定的各个计算实例分别需要完成的工作步骤,因此,主实例确定指令集以后,将指令集发送给各个计算实例,各个计算实例并行执行该指令集。可选的,若查询请求为SQL语句,则可以对SQL语句进行语法,词法,语义分析,查询重写和查询优化等操作,从而确定各个计算实例需要执行的指令集。

主实例分别向多个计算实例发送指令集,每个计算实例按照接收到的指令集进行相应的数据库操作,得到指令集的执行结果并将指令集的执行结果发送给主实例。

主实例对接收到各个计算实例发送的执行结果进行汇聚等操作,得到最终的查询结果,将最终的查询结果发送给客户端,完成此次查询任务。

图1B为一种数据库系统的结构示意图,图1B是在图1A的基础上,进一步地示出了分布式数据库系统的结构,如图1B所示,主实例中存储各个计算实例的分布规则,主实例用于执行查询任务时确定指令集。计算实例可以存储数据库的数据表,计算实例1中存储有表1和表2,计算实例2中存储有表1和表2,计算实例3中存储有表1和表2,各个计算实例中存储的表1可以为结构相同,但表数据不同的表,同样的,各个计算实例中存储的表2可以为结构相同,但表数据不同的表。每个计算实例可以执行主实例发送的指令集。

下面结合上述数据库系统结构说明本公开的一种应用场景。

随着互联网和物联网的飞速发展,数据增长呈现爆发性趋势,越来越多的应用采用无共享的分布式数据库来存储和计算。目前无共享的分布式数据库采用大规模并行处理技术(massively parallel processing,MPP),数据库进行查询时,采用计算实例之间并行的并行方式进行查询,查询中各个计算实例之间以及计算实例与主实例之间需要进行数据传输,其中,无共享的分布式数据库采用传输控制协议(Transmission Control Protocol,简称TCP)来进行数据传输,采用TCP进行数据传输之前,需要先对数据库中主实例和计算实例中每两个间建立TCP网络连接,给每个网络连接分配一个TCP端口号。

对于大规模的分布式数据库来说,需要部署大量的计算节点,在执行数据库查询任务时,每个计算节点中也可能同时部署多个计算实例,在查询任务并发甚至高并发的场景中,各个计算实例与主实例之间进行数据传输需要占用大量的TCP端口,然而,TCP端口的数量是有限的。这样,基于TCP协议,无法部署大规模的分布式数据库。

本公开提供一种数据传输方法,在数据库系统执行查询任务时,主实例通过同一接收端口接收多个执行指令集的计算实例分别发送的计算实例对应的指令集的执行结果,在保证查询的正确性的同时减少了数据传输占用过多的接收端口,提高了数据库系统的性能,满足了海量数据存储分析和计算的需求,实现了更大规模的数据库系统的部署。

下面以具体的实施例对本公开的技术方案以及本公开的技术方案是如何解决上述技术问题进行详细说明。

图2为本公开实施例提供的一种数据传输方法的交互示意图,如图2所示,本实施例的方法由数据库系统执行,数据库系统包括一个主实例和多个计算实例,图2中示例性的示出了2个计算实例,分别为计算实例1和计算实例2,对于计算实例的数量,本公开并不限制。本实施例的方法如下:

S201、主实例向多个计算实例分别发送指令集。

有查询任务时,主实例会按照数据在计算实例的分布情况,生成与每个计算实例对应的指令集,主实例可以将所有计算实例对应的指令集发送给每个计算实例,也可以分别向每个计算实例发送该计算实例对应的指令集,其中,指令集包括但不限于对应计算实例能够执行的数据库操作,数据库操作包括但不限于重分布、join、group by等,其中,重分布为将数据库中的各个计算实例中存储的数据按照某种规则进行重新分配到各个计算实例中,例如,数据库中的数据采用对某列数据(分布式列)取哈希值,根据该哈希值,将哈希值相同或者相似的哈希值的行数据存储到一个计算实例中,从而通过哈希分布完成数据库的分布式存储。其中,指令集也可以叫做执行计划。

可选的,在S201之前还可以包括:主实例根据客户端发送的查询请求,确定指令集。

S202、每个计算实例执行指令集,得到计算实例对应的指令集的执行结果。

在需要连接有非分布式列的两个数据表或者分组有非分布式列的表等操作时,每个计算实例分配存储资源和计算资源用于执行该指令集,计算实例执行指令集中的指令,得到计算实例对应的指令集的执行结果。可选的,分布规则可以是将相同哈希值的数据分布在同一个计算实例中,也可以是按照分段区间,将同一分段区间内的的哈希值的数据分布在同一个计算实例中,对于数据按照哈希值进行存储的方式本发明不做限定。

S203、多个执行指令集的计算实例向主实例的同一接收端口发送其分别对应的指令集的执行结果。

主实例接收多个计算实例对应的指令集的执行结果时,通过同一个接收端口接收指令集的执行结果,主实例的接收端口在数据库系统中有唯一的一个端口标识,主实例通过该端口标识接收多个执行指令集的计算实例分别发送的计算实例对应的指令集的执行结果。

一种可能的实现方式中,多个执行指令集的计算实例基于用户数据报协议(UserDatagram Protocol,简称UDP)向主实例发送其分别对应的指令集的执行结果。

可选的,在UDP基础上,可以增加发送数据的确认机制,数据传输失败重传机制,拥塞控制机制等机制,从而保证数据传输的可靠性。

由于基于UDP的数据传输无需建立长连接,一个接收端口可以接收多个端口发送的数据,因此,基于UDP,主实例可以使用同一接收端口接收多个计算实例发送的执行结果。

进一步地,可以预先建立基于UDP的网络连接。

另一种可能的实现方式中,多个执行指令集的计算实例基于可靠用户数据报协议(Reliable User Datagram Protocol,简称RUDP)向主实例发送其分别对应的指令集的执行结果。

RUDP是在UDP的基础上增加了数据重传机制等协议内容,从而保证传输数据的正确性,实现了可靠的数据传输。例如,基于RUDP的数据传输过程中,数据发送端通过滑动窗口来控制发送数据量,从而实现失败重传,消息确认,拥塞控制,其中,发送端发送的数据包包含递增序号,若接收端收到数据包后,发送确认信息给发送端,并根据收到的数据包的递增序号进行数据排序组装,得到正确的数据,若在预设时间段内,发送端发送数据包后未收到来自接收端的确认消息,发送端会重发数据从而保证传输数据的正确性,减少了数据传输占用过多的接收端口的同时实现了可靠的数据传输。

进一步地,可以预先建立基于RUDP的网络连接。

可选的,在S203之前,主实例分配接收端口,计算实例分配发送端口。

本实施例,通过数据库系统中的主实例向多个计算实例分别发送指令集,每个计算实例执行该指令集,得到计算实例对应的指令集的执行结果,多个执行指令集的计算实例向主实例的同一接收端口发送其分别对应的指令集的执行结果。在数据库进行查询任务时,主实例通过同一接收端口接收多个执行指令集的计算实例分别发送的计算实例对应的指令集的执行结果,在保证查询的正确性的同时减少了数据传输占用过多的接收端口,提高了数据库系统的性能,满足了海量数据存储分析和计算的需求,实现了更大规模的数据库系统的部署。

在上述实施例的基础上,进一步地,主实例对于接收到的查询任务进行解析,生成各个计算实例能够执行的指令集,指令集中可能包括重分布操作,也可能不包括重分布操作,如果指令集中包括重分布操作,则在重分布过程中涉及到各个计算实例之间的数据传输,例如,重分布的过程可以包括:计算实例在执行重分布操作的过程中,需要读取当前计算实例中存储的待重分布的表,在计算实例中将非分布式列中的数据进行哈希,然后按照分布规则,将哈希后的数据重新分布到各个计算实例的计算实例中。

然而,对于大规模的分布式数据库来说,需要部署大量计算节点,每个计算节点中可能部署多个计算实例,计算实例在执行相应的指令集的过程中,如果存在重分布,则还涉及到数据的迁移,即在计算实例之间数据的发送和接收,在重分布过程中计算实例的收发数据如果使用TCP进行传输数据,每两个计算实例之间需要一个接收端口和一个发送端口进行数据传输,数据库系统中计算实例越多,将会占用越多的端口,在并发或者高并发的场景下,占用的端口将会更多,即数据库系统需要为计算实例之间分配大量的端口号,然而TCP端口是有限的,例如,linux操作系统中TCP端口只能使用1025~65535的端口号,这样,可能造成系统无法完成正常的查询任务。下面以具体的实施例进一步说明本公开实施例如何解决上述问题。

图3为本公开实施例提供的另一种数据库系统的数据传输方法的交互示意图,图3是在图2所示实施例的基础上,进一步地,如图3所示,S202包括S202a:

S202a、每个计算实例执行指令集,得到计算实例对应的指令集的执行结果。在计算实例执行指令集的时间段内,每个计算实例通过同一个接收端口接收其他计算实例发送的数据,通过同一个发送端口向其他计算实例发送数据。

每个计算实例使用同一个发送接口用于发送数据库中的表数据,该发送接口可以用于向其他计算实例发送数据库数据,也可以用于向主实例发送指令集的执行结果。每个计算实例使用同一个接收端口来接收数据库中的表数据,例如,可以是重分布过程中接收其他计算实例发送的数据,其中,其他计算实例为数据库系统中除该计算实例以外的计算实例。

一种可能的实现方式中,每个计算实例基于UDP接收其他计算实例发送的数据,基于UDP向其他计算实例发送数据。

另一种可能的实现方式中,每个计算实例基于RUDP接收其他计算实例发送的数据,基于RUDP向其他计算实例发送数据。

本实施例,每个计算实例通过同一个接收端口接收其他计算实例发送的数据,通过同一个发送端口向其他计算实例发送数据,从而在保证查询的正确性的同时减少了数据传输占用过多的接收或者发送端口,提高了数据库系统的性能,满足了海量数据存储分析和计算的需求,实现了更大规模的数据库系统的部署。

在上述实施例的基础上,对于指令集中包括重分布操作的情况,进一步地,如果指令集中涉及多个表的数据库操作,可以通过指令集中的数据库操作和操作的表,将每个计算实例对应的指令集分成子指令集,从而在计算实例中启动与子指令集数量对应的线程,在每个计算实例中,可以多个线程并行执行对应的子指令集,这样能够提高数据库系统的执行效率。

然而现有的对于计算实例中启动的多个线程中的线程之间是基于TCP进行的数据传输,每两个需要传输数据的线程之间建立TCP连接都需要分配一个发送端口和一个接收端口,由于系统的TCP端口号有限,可能造成系统无法完成正常的查询任务,使得无法部署大规模的数据库系统。下面以具体的实施例进一步说明本公开实施例如何解决上述问题。

图4为本公开实施例提供的再一种数据库系统的数据传输方法的交互示意图,图4是在图2或图3所示实施例的基础上,进一步地,指令集包括多个子指令集;计算实例包括多个子计算实例,如图4所示,S202包括S202b:

S202b、每个计算实例启动多个执行器对应执行指令集中的多个子指令集,其中,每个执行器通过同一个接收端口接收其他执行器发送的数据,通过同一个发送端口向其他子计算实例发送数据。

子指令集也可以叫做执行计划分片(Slice),子指令集为主实例根据指令集中包含的重分布操作,将指令集进行划分而成的。主实例可以根据包含非分布式列的表,对指令集进行划分,得到多个子指令集,主实例将各个计算实例的子指令集发送给相应的计算实例。示例性的,对于具有非分布式列的表的数据来说,需要对非分布式列的表的数据进行哈希,并且将哈希后的数据发送到各个计算实例中,对具有非分布式列的表的上述哈希重分布操作将被划分到一个子指令集中。执行器为每个计算实例根据接收到的子指令集,分配的存储资源和计算资源,每个子指令集对应一个执行器,执行器执行对应子指令集的指令。在执行器执行对应的子指令集的过程中,执行器之间会产生数据的发送和接收,每个执行器通过同一个接收端口接收其他执行器发送的数据,通过同一个发送端口向其他执行器发送数据,其中,其他执行器为多个计算实例启动的除该执行器以外的执行器。

一种可能的实现方式中,每个执行器基于UDP接收其他执行器发送的数据,基于UDP向其他执行器发送数据。

另一种可能的实现方式中,每个执行器基于RUDP接收其他执行器发送的数据,基于RUDP向其他执行器发送数据。

可选的,主实例可以根据数据移动操作节点(Motion),将指令集划分成子指令集。数据移动操作节点为根据指令集中多个表和对表执行的数据库操作划分的出的指令集中的操作节点。以数据移动操作节点为边界将一个完整的指令集从下到上划分成多个子指令集,每个子指令集负责执行计划的一部分,并将数据移动操作节点拆分成数据发送方和数据接收方,得到上下两个子指令集,其中上层执行计划分片的最下层操作节点是接收数据操作节点,接收计算实例下层执行器发送的重新分布的数据,下层执行分片的最上层操作节点是发送数据操作节点,用于发送数据到其他上层执行器的接收端。

可选的,子指令集包含执行顺序标识,其中执行顺序标识为主实例根据指令集中包含的指令的执行顺序,对指令集进行划分成子指令集时标注其子指令集的执行顺序标识,例如执行顺序标识可以为数字编号,最后执行的子指令集的编号为1,次后执行的子指令集的编号为2,依次类推进行编号,每个子计算实例执行对应的子指令集得到的子执行结果按照编号发送给对应的子计算实例。

下面结合图5说明本实施例的方法,图5为一种数据库系统执行查询任务的流程示意图,如图5所示,数据库系统包括主实例和N个计算实例,主实例接收到客户端SQL请求后,建立TCP连接,对SQL语句进行语法,词法,语义分析,查询重写和查询优化生成分布式指令集,也可以叫做分布式执行计划。

其中,如果指令集中包含重分布操作,分布式执行计划中需要增加数据移动操作节点用于数据重分发,对于一个多表连接的复杂查询任务的分布式执行计划可能会有多个数据移动操作节点。如果执行计划中存在数据移动操作节点,主实例可以把执行计划以数据移动操作节点为边界拆分成从下到上的M个执行计划分片,每个执行计划分片为执行计划的一部分指令,并将执行计划中有数据移动操作节点的位置,拆分成数据发送方和数据接收方,得到上下两个执行计划分片,其中上层执行计划分片的最下层操作节点是接收数据操作节点,用于接收各计算实例下层执行计划分片发送的重新哈希的数据,下层执行分片的最上层操作节点是发送数据操作节点,用于重分发本地数据到各计算实例的上层执行分片接收端中。

主实例的调度器根据执行计划分片与各计算实例建立TCP连接,每个执行计划分片会对应到计算实例的一个基于TCP连接的查询执行器进程,然后通过该TCP连接网络分发分布式执行计划和分片号到各计算实例的各查询执行器中,例如查询执行器1发送分布式执行计划和分片号1,查询执行器M发送分布式执行计划和分片号M。

每个计算实例建立计算实例各执行器到主实例的传输数据的RUDP网络连接,对于有数据移动操作实例的计划分片,还需要建立计算实例各执行器之间的传输数据的RUDP网络连接,包括下层数据发送端口和上层数据接收端口。

每个计算实例中各查询执行器根据分片号得到分布式执行计划中的相应的计划分片,然后根据执行计划分片执行相应的操作。每个计算实例根据执行计划分片自底向上执行,如果计划分片的操作节点是发送数据节点,如果是要发送到其他计算实例上层查询执行器,则通过基于RUDP的内部网络发送重新哈希的数据到各计算实例上层各执行器,如果是要发送到主实例的,则无需哈希,直接发送,如果执行计划分片的操作节点是接收数据节点,则通过RUDP的内部网络接收各计算实例下层各执行器的数据,这样保证了相同哈希值数据在同一个计算实例,因此所有计算实例就可以并行的在本地执行连接或分组操作,执行完成,如果计算实例存在多个执行器,则把结果数据通过RUDP的内部网络继续发送给计算实例上层执行器,其中计算实例最上层的执行器把数据发送给主实例的执行器。

本实施例,每个计算实例接收到主实例发送的指令集后,启动多个执行器对应执行指令集中的多个子指令集,将执行指令集的任务分成子指令集,从而并行执行子指令集,提高了执行效率,在执行器执行对应的子指令集的过程中,每个执行器通过同一个接收端口接收其他执行器发送的数据,通过同一个发送端口向其他执行器发送数据,使得并行执行子指令集的过程中产生的大量数据迁移时保证查询的正确性,提高了执行效率,减少了数据传输占用过多的接收或者发送端口,提高了数据库系统的性能,满足了海量数据存储分析和计算的需求,实现了更大规模的数据库系统的部署。

在上述实施例的基础上,S203之后还包括:

主实例根据多个计算实例发送的指令集的执行结果,得到查询指令的结果。如图5所示,主实例对接收到的各个计算实例发送的执行结果进行汇聚连接,得到查询指令的结果。

主实例基于TCP向客户端发送查询指令的结果。

可选的,在主实例发送查询指令的结果之后,也就是查询执行结束后,可以清除数据移动专用的RUDP的内部网络,然后再关闭主实例到各计算实例各执行器的TCP连接。

下面以数据库系统中包括2个计算实例为例来说明本公开的数据库系统的数据传输方法,可以理解下述例子只是一种可能的实现方式,并不构成对本公开的限制。

图6为另一种数据库系统执行查询任务的流程示意图,如图6所示,假设某一个查询请求为对数据库系统中存储的表S和表T进行连接查询,其中连接条件为表S的分布列等于表T的非分布列,因此,此次查询生成的指令集为对表T按照非分布列进行重分布,再与表S进行连接操作,因此,增加了表T的非分布式列的数据移动操作节点,然后根据每个数据移动操作节点拆分成上下两个子指令集,比如这里拆分子指令集1和子指令集2。其中,子指令集2是对表T数据按照顺序扫描,并对扫描的表T行数据将进行重新哈希后分发到其他执行器。子指令集1是接收表T的重新哈希后的数据,将表T的重新哈希后的数据和表S扫描数据进行连接操作,再把连接结果通过发送端口发送给主实例。主实例根据子指令集,与各计算实例建立TCP连接,每个子指令集会对应到计算实例的一个基于TCP连接的进程,即执行器,然后分发子指令集和编号到各计算实例的执行器中。子指令集1对应于执行器1,子指令集2对应于执行器2。本实施例的方法包括如下步骤:

1、每个计算实例中各执行器根据编号得到指令集中的子指令集。

2、多个执行器初始化基于RUDP协议的内部网络interconnect,建立各个执行器中执行器之间传输数据的网络,和顶层执行器到主实例的传输数据的网络,包括数据发送端和数据接收端。

3、每个计算实例自底向上执行指令集中的指令操作。

每个计算实例的查询执行器2的子指令集2先执行,对表的T数据的顺序扫描,读取表T的每一行数据,然后交给数据发送端,然后发送端对表T的每一行数据哈希,得到指定的执行器,通过基于RUDP的内部网络发送数据到各个执行器1的执行器1。

每个计算实例的执行器1把接收到执行器2发送的表T的数据作为外表,和表S扫描的数据进行连接操作,连接操作的结果即为此次指令集的执行结果。

4、每个计算实例通过基于RUDP的内部网络向主实例的数据接收端口发送指令集的执行结果。

5、主实例对接收到的各个计算实例中执行器1的执行器1发回来的执行结果,进行汇聚连接,得到查询指令的结果。

6、主实例通过基于TCP向客户端发送查询指令的结果。

可选的,在主实例发送查询指令的结果之后,也就是查询执行结束后,可以清除数据移动专用的RUDP的内部网络,然后再关闭主实例到各计算实例各执行器的TCP连接。

本公开提供一种数据库系统,本实施例的数据库系统包括:主实例和多个计算实例。数据库系统用于执行如上述图2至图5中任一项的数据库系统的数据传输方法。

需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上仅是本公开的具体实施方式,使本领域技术人员能够理解或实现本公开。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本公开的精神或范围的情况下,在其它实施例中实现。因此,本公开将不会被限制于本文的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

相关技术
  • 一种内存数据库系统和数据仓库系统之间的数据传输方法及系统
  • 基于分布式闪存技术的集群数据库系统及其数据传输方法
技术分类

06120112185781