数据库查询方法、装置和电子设备与流程

文档序号:16468440发布日期:2019-01-02 22:55阅读:184来源:国知局
数据库查询方法、装置和电子设备与流程
本申请涉及数据库
技术领域
,尤其涉及一种数据库查询方法、装置和电子设备。
背景技术
:数据库是按照数据结构来组织、存储和管理数据的仓库。目前,在数据库的组织与管理中,可以生成通用的数据表,用户选择想要查询的字段时,基于该数据库表可以查找到对应的数据。若用户想要查询的字段分布在多个数据表中,可以将数据表进行连接,基于连接的数据表为用户查找对应的数据。然而,随着数据表的增多,数据表的连接会耗费大量的时间和处理资源。技术实现要素:有鉴于此,本申请提供一种数据库查询方法、装置和电子设备,以解决相关技术中耗费大量的时间和处理资源的问题。具体地,本申请是通过如下技术方案实现的:第一方面,本申请提供一种数据库查询方法,所述方法包括:在接收到数据库查询指令后,确定所述数据库查询指令中的目标查询字段所在的目标数据表;根据所述目标数据表构建数据表有向图;从构建所述数据表有向图的所述目标数据表中选取一个目标数据表作为源数据表;基于所述数据表有向图,计算所述源数据表到构建所述数据表有向图的其他目标数据表的最短距离,并确定所述最短距离对应的最短路径;将所述最短路径途经的数据表进行连接,并基于连接结果进行查询。第二方面,本申请提供一种数据库查询装置,其特征在于,所述装置包括:确定单元,用于在接收到数据库查询指令后,确定所述数据库查询指令中的目标查询字段所在的目标数据表;构建单元,用于根据所述目标数据表构建数据表有向图;选取单元,用于从构建所述数据表有向图的所述目标数据表中选取一个目标数据表作为源数据表;计算单元,用于基于所述数据表有向图,计算所述源数据表到构建所述数据表有向图的其他目标数据表的最短距离,并确定所述最短距离对应的最短路径;第一连接单元,用于将所述最短路径途经的数据表进行连接,并基于连接结果进行查询。第三方面,本申请提供一种电子设备,包括:处理器;用于存储处理器可执行指令的存储器;其中,通过读取并执行所述存储器存储的与数据库查询控制逻辑对应的可执行指令,所述处理器执行:在接收到数据库查询指令后,确定所述数据库查询指令中的目标查询字段所在的目标数据表;根据所述目标数据表构建数据表有向图;从构建所述数据表有向图的所述目标数据表中选取一个目标数据表作为源数据表;基于所述数据表有向图,计算所述源数据表到构建所述数据表有向图的其他目标数据表的最短距离,并确定所述最短距离对应的最短路径;将所述最短路径途经的数据表进行连接,并基于连接结果进行查询。第四方面,本申请提供一种计算机可读存储介质,其中存储有计算机指令,所述指令被处理器执行时实现如上述方法的步骤。分析上述技术方案可知,本申请可以根据目标查询字段所在的目标数据表构建数据表有向图,基于有向图确定查询目标查询字段所要连接的数据表,并基于数据表连接结果进行查询。本申请在目标查询字段分布在多个数据表时,无需连接数据库中所有数据表,节省了数据库查询时的处理资源,提高了查询速率。附图说明图1是本申请一示例性实施例示出的一种数据库查询方法的流程图;图2是本申请一示例性实施例示出的另一种数据库查询方法的流程图;图3是本申请一示例性实施例示出的一种数据表有向图;图4是本申请一示例性实施例示出的另一种数据表有向图;图5是本申请一示例性实施例示出的另一种数据库查询方法的流程图;图6是本申请一示例性实施例示出的一种数据库查询装置所在设备的硬件结构图;图7是本申请一示例性实施例示出的一种数据库查询装置的框图。具体实施方式这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。相关技术中,如果用户想要查询的字段分布在多个数据表中,则会先将数据库中存储的所有数据表进行连接,再通过查询连接后的数据表,获取用户想要查询的字段。举例来说,假设数据库中存储有如下表1所示的订单维度数据表和如下表2所示的乘客维度数据表:用户名订单价格(元)订单时长(分钟)user15036user23016user34328表1用户名年龄性别user129女user231女user323男表2如果用户想要查询订单价格和性别这两个字段,则可以先将这两个表进行连接,再从中选择出订单价格和性别这两个字段。但由于数据库中存储的数据表的数量通常十分庞大,而其中极大部分数据表中可能并不包含用户想要查询的字段,因此将所有数据表进行连接会耗费大量的时间和处理资源。为了解决上述问题,请参考图1,为本申请一示例性实施例示出的一种数据库查询方法的流程图,所述数据库查询方法可以应用在支持数据库功能的服务器等设备中,包括如下步骤:步骤101:在接收到数据库查询指令后,确定所述数据库查询指令中的目标查询字段所在的目标数据表。在本实施例中,用户可以通过设备提供的界面输入数据库查询指令,来指示其想要查询的字段,即目标查询字段。设备在接收到数据库查询指令后,可以确定该数据库查询指令中的目标查询字段所在的数据表,在本实施例中,可将目标查询字段所在的数据表称为目标数据表。继续以上表1所示的订单维度数据表为例,若根据数据库查询指令确定订单价格和性别为目标查询字段,则可以将订单维度数据表1和乘客维度数据表2确定为目标数据表。步骤102:根据所述目标数据表构建数据表有向图。在本实施例中,根据前述步骤101中确定的目标数据表,可以构建数据表有向图。具体地,请参考图2,可以采用如下步骤根据所述目标数据表构建数据表有向图:步骤1021:对数据表进行遍历,针对遍历到的第一数据表,若所述第一数据表与第二数据表具有公共字段,则建立第一数据表到第二数据表的路径。步骤1022:若所述第一数据表为目标数据表,则将所述第一数据表到所述第二数据表的路径权重设置为第一权重;若所述第一数据表为非目标数据表,则将所述第一数据表到所述第二数据表的路径权重设置为第二权重;所述第二权重大于所述第一权重。在本实施例中,可以对数据库中存储的所有数据表进行遍历,针对遍历到的第一数据表,如果第一数据表与第二数据表具有公共字段,则可以建立第一数据表到第二数据表的路径,其中,所述第二数据表为除所述第一数据库之外的数据表。当然,在遍历到该第二数据表时,也可以建立该第二数据表到该第一数据表的路径。即当两个数据表具有公共字段时,可以在这两个数据表之间建立双向路径。继续以上表1所示的订单维度数据表和上表2所示的用户维度数据表为例,订单维度数据表和用户维度数据表具有公共字段“用户名”,故可以在这两个数据表之间建立双向路径,即建立订单维度数据表到用户维度数据表的路径,并建立用户维度数据表到订单维度数据表的路径。在建立数据表之间的路径时,还可以为所建立的路径设置路径权重,用于后续的距离计算。具体地,如果第一数据表为目标数据表,则对于第一数据表到第二数据表方向的路径而言,可以将其路径权重设置为第一权重;如果第一数据表为非目标数据表,则对于第一数据表到第二数据表方向的路径而言,可以将其路径权重设置为第二权重。其中,第二权重大于第一权重,例如:可以将0作为第一权重,将1作为第二权重。举例来说,假设数据库中存储有4个数据表,分别为数据表1、数据表2、数据表3、数据表4。其中,数据表1、数据表2、数据表3具有公共字段1,数据表3、数据表4具有公共字段2,且公共字段1、公共字段2并不相同,则可以建立如图3所示的数据表有向图。假设根据目标查询字段确定的目标数据表为数据表1、数据表3和数据表4,则可以分别将数据表1到数据表2、数据表3的路径权重均设置为第一权重0,分别将数据表2到数据表1、数据表3的路径权重均设置为第二权重1,分别将数据表3到数据表1、数据表2、数据表4的路径权重均设置为第二权重0,将数据表4到数据表3的路径权重设置为第一权重0。步骤103:从构建所述数据表有向图的所述目标数据表中选取一个目标数据表作为源数据表。步骤104:基于所述数据表有向图,计算所述源数据表到构建所述数据表有向图的其他目标数据表的最短距离,并确定所述最短距离对应的最短路径。在本实施例中,可以从前述步骤102中构建数据表有向图的所有目标数据表中选取一个目标数据表,作为源数据表。选取源数据表的方法可以采用随机方法,即随机从所有目标数据表中选取一个目标数据表,作为源数据表,也可以采用其他方法,本申请不作特殊限制。另一方面,可以在前述步骤102中完成数据表有向图的构建后,再进行源数据表的选取,也可以在完成数据表有向图的构建前进行源数据表的选取,本申请不对步骤102和步骤103之间的时序关系作特殊限制。在前述步骤103中选取出源数据表后,可以基于前述步骤102中构建的数据表有向图,计算源数据表到该数据表有向图中的其他目标数据表的最短距离,并确定最短距离对应的最短路径。其中,两个数据表之间的距离为两个数据表之间可达路径的路径权重之和。在一个例子中,针对某一个目标数据表,可以计算源数据表到该目标数据表的所有可达路径的距离,并记录途经的数据表,然后确定最短距离,并确定最短距离对应的最短路径。所述最短路径途经的数据表可能仅包括目标数据表,也可能既包括目标数据表又包括非目标数据表。在另一个例子中,还可以采用dijkstra算法等最短路径算法计算源数据表到其他目标数据表的最短距离,在计算最短距离的同时,还可以记录途经的数据表,以确定最短距离对应的最短路径。继续以图3为例,假设选取数据表1作为源数据表,则可以分别计算数据表1到数据表3、数据表4的最短距离,并分别确定对应的最短路径。如图3所示,数据表1到数据表3的最短距离为0,最短路径为数据表1→数据表3;数据表1到数据表4的最短距离为0,最短路径为数据表1→数据表3→数据表4。请参考图4,在另一个例子中,假设数据表1、数据表2、数据表4、数据表6为目标数据表,数据表3、数据表5为非目标数据表,则各数据表之间的路径权重如图4所示(图中未全部示出)。假设选取数据表1作为源数据表,则可以计算数据表1到数据表4的最短距离为1,而确定的最短路径可能有两条,分别为:数据表1→数据表2→数据表3→数据表4、数据表1→数据表5→数据表6→数据表4。为了避免出现多条最短路径的情况,可以规定在最短距离对应有多条最短路径时,从源数据表出发,当下一节点的数据表有两个时,优先选取目标数据表所在的路径作为最短路径。继续以本例为例,由于数据表2为目标数据表,数据表5为非目标数据表,因此可以将数据表1→数据表2→数据表3→数据表4确定为数据表1到数据表4的最短路径。步骤105:将所述最短路径途经的数据表进行连接,并基于连接结果进行查询。在本实施例中,在前述步骤104中确定了源数据表到各目标数据表的最短路径后,可以将各最短路径途经的数据表进行连接,并基于连接结果进行查询,即通过查询连接后的数据表,获取用户查询的目标查询字段。继续以图3为例,数据表1到数据表3的最短路径途经的数据表为数据表1、数据表3,数据表1到数据表4的最短路径途经的数据表为数据表1、数据表3、数据表4,故可以将数据表1、数据表3、数据表4进行连接,并通过查询连接后的数据表1、数据表3、数据表4,获取用户想要查询的目标查询字段。在将最短路径途经的数据表进行连接时,为了避免重复,请参考图5,可以采用如下步骤将最短路径途经的数据表进行连接:步骤1051:遍历每条最短路径,针对遍历到的最短路径,依次判断该最短路径途经的数据表是否已加入的连接集合;所述连接集合初始为空。步骤1052:若所述数据表未加入连接集合,则将所述数据表加入到所述连接集合中。步骤1053:在遍历结束后,将所述连接集合中的数据表进行连接。在将最短路径途经的数据表进行连接时,可以预先构建一个连接集合,连接集合初始为空。后续在将最短路径途经的数据表进行连接时,可以遍历每条最短路径,并针对遍历到的最短路径,依次判断该最短路径途经的数据表是否已加入的连接集合。若该数据表未加入连接集合,则可以将该数据表加入到连接集合中;否则不将该数据表加入到连接集合中。在遍历结束后,可以将连接集合中的数据表进行连接。继续以图3为例,假设先遍历到数据表1到数据表3的最短路径,由于连接集合初始为空,因此可以将数据表1和数据表3均加入到连接集合中。但在遍历到数据表1到数据表4的最短路径时,由于数据表1和数据表3已加入连接集合,因此仅需将数据表4加入到连接集合中。即最终,连接集合中的数据表包括:数据表1、数据表3和数据表4,可以将这3个数据表进行连接。另一方面,如果在前述步骤103中计算源数据表到其他目标数据表的最短距离时,发现源数据表不可达的目标数据表,在这种情况下,与相关技术类似,可以对所有数据表进行连接,并基于连接结果进行查询。由以上描述可以看出,本申请可以根据目标查询字段所在的目标数据表构建数据表有向图,基于有向图确定查询目标查询字段所要连接的数据表,并基于数据表连接结果进行查询。本申请在目标查询字段分布在多个数据表时,无需连接数据库中所有数据表,节省了数据库查询时的处理资源,提高了查询速率。与前述数据库查询方法的实施例相对应,本申请还提供了数据库查询装置的实施例。本申请数据库查询装置的实施例可以应用在服务器等设备上。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图6所示,为本申请数据库查询装置所在服务器的一种硬件结构图,除了图6所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的服务器通常根据该数据库查询的实际功能,还可以包括其他硬件,对此不再赘述。请参考图7,为本申请一示例性实施例示出的一种数据库查询装置的框图,该装置700可以应用在图6所示的服务器中,包括:确定单元701,用于在接收到数据库查询指令后,确定所述数据库查询指令中的目标查询字段所在的目标数据表;构建单元702,用于根据所述目标数据表构建数据表有向图;选取单元703,用于从构建所述数据表有向图的所述目标数据表中选取一个目标数据表作为源数据表;计算单元704,用于基于所述数据表有向图,计算所述源数据表到构建所述数据表有向图的其他目标数据表的最短距离,并确定所述最短距离对应的最短路径;第一连接单元705,用于将所述最短路径途经的数据表进行连接,并基于连接结果进行查询。在一个可选的实施例中,所述构建单元702可以包括:建立子单元7021,用于对数据表进行遍历,针对遍历到的第一数据表,若所述第一数据表与第二数据表具有公共字段,则建立第一数据表到第二数据表的路径;设置子单元7022,用于在所述第一数据表为目标数据表时,将所述第一数据表到所述第二数据表的路径权重设置为第一权重;所述设置子单元7022还用于在所述第一数据表为非目标数据表时,将所述第一数据表到所述第二数据表的路径权重设置为第二权重;所述第二权重大于所述第一权重。在另一个可选的实施例中,所述装置700还可以包括:第二连接单元706,用于在存在所述源数据表不可达的目标数据表时,对所有数据表进行连接,并基于连接结果进行查询。在另一个可选的实施例中,所述选取单元703可以包括:选取子单元7031,用于从构建所述数据包有向图的所述目标数据表中随机选取一个目标数据表作为源数据表。在另一个可选的实施例中,所述第一连接单元705可以包括:判断子单元7051,用于遍历每条最短路径,针对遍历到的最短路径,依次判断该最短路径途经的数据表是否已加入的连接集合;所述连接集合初始为空;加入子单元7052,用于在所述数据表未加入连接集合时,将所述数据表加入到所述连接集合中;连接子单元7053,用于在遍历结束后,将所述连接集合中的数据表进行连接。上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。在本申请一示例性实施例中,提供一种电子设备,所述电子设备可以包括:处理器;用于存储处理器可执行指令的存储器;其中,通过读取并执行所述存储器存储的与数据库查询控制逻辑对应的可执行指令,所述处理器可以执行:在接收到数据库查询指令后,确定所述数据库查询指令中的目标查询字段所在的目标数据表;根据所述目标数据表构建数据表有向图;从构建所述数据表有向图的所述目标数据表中选取一个目标数据表作为源数据表;基于所述数据表有向图,计算所述源数据表到构建所述数据表有向图的其他目标数据表的最短距离,并确定所述最短距离对应的最短路径;将所述最短路径途经的数据表进行连接,并基于连接结果进行查询。在一个可选的实施例中,在根据所述目标数据表构建数据表有向图时,所述处理器可以执行:对数据表进行遍历,针对遍历到的第一数据表,若所述第一数据表与第二数据表具有公共字段,则建立第一数据表到第二数据表的路径;若所述第一数据表为目标数据表,则将所述第一数据表到所述第二数据表的路径权重设置为第一权重;若所述第一数据表为非目标数据表,则将所述第一数据表到所述第二数据表的路径权重设置为第二权重;所述第二权重大于所述第一权重。在另一个可选的实施例中,所述处理器还可以执行:若存在所述源数据表不可达的目标数据表,则对所有数据表进行连接,并基于连接结果进行查询。在另一个可选的实施例中,在从构建所述数据表有向图的所述目标数据表中选取一个目标数据表作为源数据表时,所述处理器可以执行:从所述目标数据表中随机选取一个目标数据表作为源数据表在另一个可选的实施例中,在将所述最短路径途经的数据表进行连接时,所述处理器可以执行:遍历每条最短路径,针对遍历到的最短路径,依次判断该最短路径途经的数据表是否已加入的连接集合;所述连接集合初始为空;若所述数据表未加入连接集合,则将所述数据表加入到所述连接集合中;在遍历结束后,将所述连接集合中的数据表进行连接。在本申请一示例性实施例中,提供一种包括计算机指令的非临时性计算机可读存储介质,例如包括计算机指令的存储器,上述计算机指令可以由数据库查询装置的处理器执行以完成上述方法,所述方法可以包括:在接收到数据库查询指令后,确定所述数据库查询指令中的目标查询字段所在的目标数据表;根据所述目标数据表构建数据表有向图;从构建所述数据表有向图的所述目标数据表中选取一个目标数据表作为源数据表;基于所述数据表有向图,计算所述源数据表到构建所述数据表有向图的其他目标数据表的最短距离,并确定所述最短距离对应的最短路径;将所述最短路径途经的数据表进行连接,并基于连接结果进行查询。在一个可选的实施例中,所述根据所述目标数据表构建数据表有向图,可以包括:对数据表进行遍历,针对遍历到的第一数据表,若所述第一数据表与第二数据表具有公共字段,则建立第一数据表到第二数据表的路径;若所述第一数据表为目标数据表,则将所述第一数据表到所述第二数据表的路径权重设置为第一权重;若所述第一数据表为非目标数据表,则将所述第一数据表到所述第二数据表的路径权重设置为第二权重;所述第二权重大于所述第一权重。在另一个可选的实施例中,所述方法还可以包括:若存在所述源数据表不可达的目标数据表,则对所有数据表进行连接,并基于连接结果进行查询。在另一个可选的实施例中,所述从构建所述数据表有向图的所述目标数据表中选取一个目标数据表作为源数据表,可以包括:从所述目标数据表中随机选取一个目标数据表作为源数据表。在另一个可选的实施例中,所述将所述最短路径途经的数据表进行连接,可以包括:遍历每条最短路径,针对遍历到的最短路径,依次判断该最短路径途经的数据表是否已加入的连接集合;所述连接集合初始为空;若所述数据表未加入连接集合,则将所述数据表加入到所述连接集合中;在遍历结束后,将所述连接集合中的数据表进行连接。以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1