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

技术领域

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

背景技术

随着互联网技术的发展,互联网场景下产生的各种业务数据都将存到数据库中。但随着数据库中数据量的增加,系统性能逐渐降低。为了避免带来系统性能上的瓶颈,以及满足大容量和低响应时延的要求,对数据进行分库分表拆分处理,获得多个数据分片,每个数据分片内存储有多条数据。

在进行分库分表处理后,进行数据查询时,存在多种应用场景。

首先,对于一些批跑业务场景,需要获取所有数据分片内存储的所有数据,无需对每个数据分片单独进行数据查询,故查询时无需使用查询条件;但该场景下,需要消耗大量的时间和资源。

其次,对于数据库中数据量较少的场景,数据分片数量较少,查询所有数据分片中的数据时,所消耗的时间和资源是在可控范围内的,因此直接遍历即可查询到所需数据,故无需使用查询条件。

再次,在指定业务场景下,查询指定业务数据时,通常通过结构化查询语言(Structured Query Language,SQL)语句中的where条件进行数据查询,但是这种情况下,一次仅能查询到数据分片中的一条数据,若想要查询数据分片中的多条数据,需要执行多次查询操作。

显然,相关技术下,当需要每个数据分片中多条数据时,并没有适用的查询方式。因此,如何在减少工作量的情况下,准确对数据分片进行数据查询是目前需要解决的技术问题。

发明内容

本申请提供一种数据查询方法、设备、装置及存储介质,用以在减少工作量的情况下,准确对数据分片进行数据查询。

第一方面,本申请实施例提供一种数据查询方法,应用于路由中间服务器,该方法包括:

接收业务方服务器发送的第一SQL请求;其中,第一SQL请求中携带第一SQL语句,第一SQL语句的注释中定义有查询条件,查询条件用于标志所查询的数据在数据库中的位置;

基于查询条件确定相应的数据分片,并将数据分片的物理表名,以语句条件的形式添加至第二SQL语句,以及基于第二SQL语句,生成第二SQL请求;

向数据库服务器发送第二SQL请求,并获取数据库服务器反馈的数据分片内存储的至少一条数据。

第二方面,本申请实施例提供一种数据查询方法,应用于业务方服务器,该方法包括:

确定需要进行数据查询时,根据所查询的数据,确定查询条件;其中,查询条件用于标志所查询的数据在数据库中的位置;

将查询条件以注释的形式添加至第一SQL语句,并基于第一SQL语句,生成第一SQL请求;

向路由中间服务器发送第一SQL请求,并获取路由中间服务器反馈的目标数据;其中,目标数据是路由中间服务器获得的数据分片内存储的至少一条数据。

第三方面,本申请实施例提供一种数据查询装置,该装置包括:

接收单元,用于接收业务方服务器发送的第一SQL请求;其中,第一SQL请求中携带第一SQL语句,第一SQL语句的注释中定义有查询条件,查询条件用于标志所查询的数据在数据库中的位置;

第一生成单元,用于基于查询条件确定相应的数据分片,并将数据分片的物理表名,以语句条件的形式添加至第二SQL语句,以及基于第二SQL语句,生成第二SQL请求;

第一发送单元,用于向数据库服务器发送第二SQL请求,获取数据库服务器反馈的数据分片内存储的至少一条数据。

在一种可能的实现方式中,查询条件包括:数据区间、用于索引数据分片的分片键;

其中,分片键是基于业务方的编号或标识信息确定的。

在一种可能的实现方式中,第一生成单元具体单元:

对第一SQL请求进行解析处理,确定第一SQL语句的注释中定义有数据区间时,基于数据区间,在数据区间与数据分片的对应关系中,确定与数据区间匹配的目标数据区域,并确定目标数据区间对应的数据分片;或

对第一SQL请求进行解析处理,确定第一SQL语句的注释中定义有分片键时,基于分片键索引匹配相应的数据分片。

在一种可能的实现方式中,第一发送单元具体用于:

通过关系型数据库管理系统(MySQL)协议连接方式,向数据库服务器发送第二SQL请求;

其中,MySQL协议连接方式,包括:Java数据库连接(Java DataBaseConnectivity,JDBC)连接、MySQL命令行中的至少一种。

在一种可能的实现方式中,第一SQL请求中携带数据处理方式;

第一发送单元还用于:按照数据处理方式,对获取的数据分片内存储的至少一条数据进行处理,并通过MySQL协议连接方式,将处理结果反馈给业务方服务器。

第四方面,本申请实施例提供一种数据查询装置,该装置包括:

确定单元,用于确定需要进行数据查询时,根据所查询的数据,确定查询条件;其中,查询条件用于标志所查询的数据在数据库中的位置;

第二生成单元,用于将查询条件以注释的形式添加至第一SQL语句,并基于第一SQL语句,生成第一SQL请求;

第二发送单元,用于向路由中间服务器发送第一SQL请求,并获取路由中间服务器反馈的目标数据;其中,目标数据是路由中间服务器获得的数据分片内存储的至少一条数据。

在一种可能的实现方式中,确定单元通过如下方式确定需要进行查询:

接收到业务方触发的查询请求;或

确定达到定时查询任务的查询时间。

在一种可能的实现方式中,确定单元具体用于:

若所查询的数据为区间数据,则确定查询条件中包括数据区间;

若所查询的数据为业务方数据,则确定查询条件中包括用于索引数据分片的分片键,其中,分片键是基于业务方的编号或标识信息确定的。

在一种可能的实现方式中,第二发送单元具体用于:

通过MySQL协议连接方式,向路由中间服务器发送第一SQL请求;

其中,MySQL协议连接方式,包括:JDBC连接、MySQL命令行中的至少一种。

第五方面,本申请实施例提供一种电子设备,包括:存储器和处理器,其中,存储器,用于存储计算机指令;处理器,用于执行计算机指令以实现本申请实施例提供的数据查询方法的步骤。

第六方面,本申请实施例提供一种计算机可读存储介质,计算机可读存储介质存储有计算机指令,计算机指令被处理器执行时实现本申请实施例提供的数据查询方法的步骤。

第七方面,本申请实施例提供一种计算机程序产品,其包括计算机指令,计算机指令存储在计算机可读存储介质中;当电子设备的处理器从计算机可读存储介质读取计算机指令时,处理器执行计算机指令,使得电子设备执行本申请实施例提供的数据查询方法的步骤。

本申请有益效果如下:

本申请实施例提供一种数据查询方法、装置、设备及存储介质,涉及计算机技术领域。在本申请实施例中,路由中间服务器首先接收业务方服务器发送的第一SQL请求;然后,对第一SQL请求进行解析,获取第一SQL请求中第一SQL语句的注释中定义的用于标志所查询的数据在数据库中位置的查询条件;接着,基于查询条件确定相应的数据分片,将数据分片的物理表名,以语句条件的形式添加至第二SQL语句,并基于第二SQL语句生成第二SQL请求;最后,向数据库服务器发送第二SQL请求,获取数据库服务器反馈的数据分片内存储的至少一条数据,并将数据库服务器反馈的数据发送给业务方服务器。通过在SQL语句中增加包含用于确定数据分片的查询条件即可访问到指定的数据分片,并获取数据分片内存储的至少一条数据,准确的对数据分片进行数据查询,且业务方服务器在查询过程中无需执行多次查询操作,同时不需要专门为了查询某个数据分片而去额外维护一个用于确定数据分片的信息,减少工作量,且降低学习、维护、改造等成本。

本申请的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本申请而了解。本申请的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。

附图说明

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

图1为一种对数据进行分库分表获得数据分片的示意图;

图2为本申请实施例中一种应用场景示意图;

图3为本申请实施例中一种数据查询的具体实施方法流程图;

图4为本申请实施例中另一种数据查询的具体实施方法流程图;

图5为本申请实施例中一种数据查询的示意图;

图6为本申请实施例中一种路由中间服务器进行数据查询的方法的流程;

图7为本申请实施例中一种业务方服务器进行数据查询方法的流程图;

图8为本申请实施例中一种数据查询装置结构图;

图9为本申请实施例中另一种数据查询装置结构图;

图10为本申请实施例中一种电子设备示意图。

具体实施方式

为了使本申请的目的、技术方案及有益效果更加清楚明白,以下将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请部分实施例,并不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

为了便于本领域技术人员更好地理解本申请的技术方案,下面对本申请涉及的部分概念进行介绍。

结构化查询语言(Structured Query Language,SQL)是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。且大多数关系数据库都支持SQL。

数据分片即MySQL分片,是对一个大数据库进行分库分表后的一个数据分片;其中,分库分表为将一个大数据库中存储的数据,按照指定的分片键(Partition Key)和分片模式(Partition Mode)进行水平拆分,拆分成多个数据分片,并将至少一个数据分片分散存储在一个数据库中。即每个数据库中存储至少一个数据分片,每个数据分片中存储的数据为大数据库中存储的数据的一部分。如图1所示,图1示例性提供了一种对数据进行分库分表获得数据分片的示意图。

MySQL是一个关系型数据库管理系统,将数据保存在不同的表中。

分片键:用于划分和定位数据分片的索引,且每个数据分片具有唯一一个分片键,且不能修改。

Java数据库连接(Java DataBase Connectivity,JDBC)是用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,由一组用Java语言编写的类和接口组成。因此使用JDBC,更加方便的与各种关系数据库建立连接、发送操作数据库的SQL语句并处理结果,而无需编写访问程序。

下文中所用的词语“示例性”的意思为“用作例子、实施例或说明性”。作为“示例性”所说明的任何实施例不必解释为优于或好于其它实施例。

文中的术语“第一”、“第二”仅用于描述目的,而不能理解为明示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个特征,在本申请实施例的描述中,除非另有说明,“多个”的含义是两个或两个以上。

下面对本申请实施例的设计思想进行简要介绍:

随着互联网技术的发展,互联网场景下产生的各种业务数据都将存到数据库中。但随着数据库中数据量的增加,系统性能逐渐降低。为了避免带来系统性能上的瓶颈,以及满足大容量和低响应时延的要求,对数据进行分库分表拆分处理,获得多个数据分片,每个数据分片内存储有多条数据。

在进行分库分表处理后,进行数据查询时,存在多种应用场景。

首先,对于一些批跑业务场景,需要获取所有数据分片内存储的所有数据,无需对每个数据分片单独进行数据查询,故查询时无需使用查询条件;但该场景下,需要消耗大量的时间和资源。

其次,对于数据库中数据量较少的场景,数据分片数量较少,查询所有数据分片中的数据时,所消耗的时间和资源是在可控范围内的,因此直接遍历即可查询到所需数据,故无需使用查询条件。

再次,在指定业务场景下,查询指定业务数据时,通常通过SQL语句中的where条件进行数据查询,但是这种情况下,一次仅能查询到数据分片中的一条数据,若想要查询数据分片中的多条数据,需要执行多次查询操作。

显然,相关技术下,当需要每个数据分片中多条数据时,并没有适用的查询方式。因此,如何在减少工作量的情况下,准确对数据分片进行数据查询是目前需要解决的技术问题。

有鉴于此,本申请实施例提供一种数据查询方法、设备、装置及存储介质,用以在减少工作量的情况下,准确对数据分片进行数据查询。

在本申请实施例中,路由中间服务器首先接收业务方服务器发送的第一SQL请求;然后,对第一SQL请求进行解析,获取第一SQL请求中第一SQL语句的注释中定义的用于标志所查询的数据在数据库中位置的查询条件;接着,基于查询条件确定相应的数据分片,将数据分片的物理表名,以语句条件的形式添加至第二SQL语句,并基于第二SQL语句生成第二SQL请求;最后,向数据库服务器发送第二SQL请求,获取数据库服务器反馈的数据分片内存储的至少一条数据,并将数据库服务器反馈的数据发送给业务方服务器。通过在SQL语句中增加包含用于确定数据分片的查询条件即可访问到指定的数据分片,并获取数据分片内存储的至少一条数据,准确的对数据分片进行数据查询,且业务方服务器在查询过程中无需执行多次查询操作,同时无需维护额外用于确定数据分片的信息,减少工作量,且降低学习、维护、改造等成本。

以下结合说明书附图对本申请的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本申请,并不用于限定本申请,并且在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。

参考图2,图2为本申请实施例的应用场景示意图。该应用场景中包括业务方服务器210、路由中间服务器220和数据库服务器230。

在一种可能的实现方式中,业务方服务器210和路由中间服务器220之间通过MySQL协议连接,以及路由中间服务器220和数据库服务器230之间通过MySQL协议连接。

在另一种可能的实现方式中,业务方服务器210、路由中间服务器220和数据库服务器230之间还可以通过通信网络进行通信;其中,通信网络可以是有线网络或无线网络。因此,可以通过有线或无线通信方式进行直接或间接地连接。比如,两个服务器之间通过无线接入点间接地连接,或两个服务器之间通过因特网直接地连接,本申请在此不做限制。

在本申请实施例中,涉及的服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(ContentDelivery Network,CDN)、以及大数据和人工智能平台等基础云计算服务的云服务器。

本申请实施例中,当任一类服务器的数量为多个时,多个服务器可组成为一区块链,而服务器为区块链上的节点;如包含多个数据库服务器230时,多个数据库服务器230可组成为一区块链,数据库服务器230为区块链上的节点。

本申请实施例提供的数据查询方法可应用于第三方平台,比如支付平台、管理平台等,其中第三方平台对应业务方。

在一种可能的应用场景中,在第三方平台的业务中,分库分表有两种形式,一种是将数据打散到多个数据分片中,每个数据库实例持有部分数据分片,即两个数据库实例不存在具有相同物理表名的数据分片,这种场景查询指定数据分片只要计算出数据分片的物理表名就可确定相应的数据;另一种是为了解决条带化部署问题,在每个数据库实例里面都会有全量的数据分片,即两个数据库实例的存在具有相同物理表名的数据分片,这种复杂场景查询指定数据分片不仅要确定对应的数据分片的物理地址,还要确定数据分片对应的数据库实例。因此,本申请实施例中的路由中间服务器中配置有数据分片和数据库实例之间的关联关系,以适配提出的两种场景。

其中,第三方平台可为支付平台,比如财付通;通过本申请提供的数据查询方式,可实现第三方平台中的批跑系统的批跑业务,并且顺利支持了清算、资金中台等核心金融业务,且会陆续接入订单等重要的金融业务;有效支撑业务系统,让业务轻松的实现分库分表的改造,减少业务的学习和使用成本。

下面结合上述描述的应用场景,基于附图来描述本申请示例性实施方式提供的数据查询方法,需要注意的是,上述应用场景仅是为了便于理解本申请的精神和原理而示出,本申请的实施方式在此方面不受任何限制。

参考图3,图3为本申请实施例提供的一种数据查询的具体实施方法流程图,包括如下步骤:

步骤S300,业务方服务器确定需要进行数据查询时,根据所查询的数据,确定查询条件。

在一种可能的实现方式中,查询条件用于标志所查询的数据在数据库中的位置。查询条件包括:用于索引数据分片的分片键,数据区域中的至少一种。

示例性的,业务方服务器通过如下方式确定查询条件:

方式一:接收到业务方触发的查询请求,确定业务方所查询的数据为某区间数据时,生成包括相应数据区间的查询条件;

方式二:接收到业务方触发的查询请求,确定业务方要查询相应的业务数据,且并未指定数据区间,则基于业务方的编号或标识信息,确定用于索引数据分片的分片键,并生成包括分片键的查询条件;

方式三:确定达到定时查询任务的查询时间,确定定时查询任务为查询某区间数据时,生成包括相应数据区间的查询条件;

方式四:确定达到定时查询任务的查询时间,确定定时查询任务为查询业务方的业务数据时,基于业务方的编号或标识信息,确定用于索引数据分片的分片键,并生成包括分片键的查询条件。

步骤S301,业务方服务器将查询条件以注释的形式添加至第一SQL语句,并基于第一SQL语句,生成第一SQL请求。

步骤S302,业务方服务器向路由中间服务器发送第一SQL请求。

在一种可能的实现方式中,业务方服务器通过MySQL协议连接方式,向路由中间服务器发送第一SQL请求;其中,MySQL协议连接方式,包括:JDBC连接、MySQL命令行中的至少一种。

在本申请中,在第一SQL请求发送时,支持标准的MySQL协议,可以继续使用符合MySQL协议的连接方式,减少改动,提升效率。

步骤S303,路由中间服务器接收业务方服务器发送的第一SQL请求。

步骤S304,路由中间服务器基于查询条件确定相应的数据分片,并将数据分片的物理表名,以语句条件的形式添加至第二SQL语句,以及基于第二SQL语句,生成第二SQL请求。

在一种可能的实现方式中,路由中间服务器接收到第一SQL请求后,对第一SQL请求进行解析处理,确定第一SQL语句的注释中定义有数据区间时,基于数据区间,在数据区间与数据分片的对应关系中,确定与数据区间匹配的目标数据区域,并确定目标数据区间对应的数据分片。

为每个数据分片定义一个数据区域,比如,数据分片000对应的数据区间为1~1000,数据分片001对应的数据区间为1001~2000等等。若注释中定义的数据区间为500~1000,则确定与数据区间1~1000匹配,则确定要查询的数据分片为数据分片000。

在本申请中,通过划分数值区间来路由到指定数据分片的方式下,需要为每个数据分片定义一个数据区间,每个数据分片内存储的所有数据的某个字段都要位于该数据区间内,查询的时间查询某个数据区间即可确定分片。通过维护额外字段的方式实现数据分片的确定,对每个数据分片定义了上下界,扩容困难,适用于数据量较少的场景。

在一种可能的实现方式中,路由中间服务器接收到第一SQL请求后,对第一SQL请求进行解析处理,确定第一SQL语句的注释中定义有分片键时,基于分片键索引匹配相应的数据分片。

在本申请中,当第一SQL语句的注释中定义有基于业务方的编号或标识信息确定的分片键时,该分片键为复用的原有分片键的信息,保证分片键的正确性,且业务方没有引入额外的分片键,无需学习、改造和维护额外的分片键,无需对代码进行修改,而是更加专注业务逻辑,提升业务方使用体验,且减少了数据库服务器和业务方服务器的资源浪费。

在本申请实施例中,路由中间服务器基于查询条件确定相应的数据分片后,对SQL语句进行改写,将数据分片的真实库表名即物理表名写入SQL语句的Where条件中,生成第二SQL语句,并基于第二SQL语句,生成第二SQL请求,以使数据库服务器基于物理表名查找数据。

步骤S305,路由中间服务器向数据库服务器发送第二SQL请求。

在一种可能的实现方式中,通过MySQL协议连接方式,向数据库服务器发送第二SQL请求;其中,所述MySQL协议连接方式,包括:Java数据库连接JDBC连接、MySQL命令行中的至少一种。

在本申请中,在第一SQL请求发送时,支持标准的MySQL协议,可以继续使用符合MySQL协议的连接方式,减少改动,提升效率。

步骤S306,数据库服务器接收路由中间服务器发送的第二SQL请求。

步骤S307,数据库服务器基于语句条件中的物理表名确定相应的数据分片,并获取数据分片内存储的至少一条数据。

步骤S308,数据库服务器向路由中间服务器发送数据分片内存储的至少一条数据。

步骤S309,路由中间服务器将数据库服务器反馈的至少一条数据发送给业务方服务器。

在一种可能的实现方式中,路由中间服务器接收到的第一SQL请求中还携带有数据处理方式。因此,路由中间服务器在接收到数据库服务器发送的至少一条数据后,按照数据处理方式,对获取的至少一条数据进行处理,并通过MySQL协议连接方式,将处理结果反馈给业务方服务器。

在本申请实施例中,数据处理方式是根据实际情况进行设定的,要获取数据库中信息量最大的两条数据,则路由中间服务器将获取到每个数据分片内存储的信息量最大的两条数据,此时路由中间服务器将获取到多条数据,而业务方仅要信息量最大的两条数据,则需要路由中间服务器针对数据库服务器反馈的多条数据继续进行处理,选取其中信息量最大的两条数据反馈给业务方服务器,以减少业务方服务器的数据处理压力。

参考图4,以查询条件中包括分片键为例,提供的另一种数据查询的具体实施方法流程图,包括如下步骤:

步骤S400,业务方服务器在接收到业务方的查询请求时,基于业务方的编号或标识信息,生成包括分片键的查询条件;

步骤S401,业务方服务器将查询条件以注释的形式添加至第一SQL语句,并基于第一SQL语句,生成第一SQL请求;

步骤S402,业务方服务器通过MySQL协议连接方式,向路由中间服务器发送第一SQL请求;

步骤S403,路由中间服务器接收业务方服务器发送的第一SQL请求;

步骤S404,路由中间服务器对第一SQL请求进行解析处理,确定第一SQL语句的注释中定义的分片键;

步骤S405,路由中间服务器基于分片键确定相应的数据分片,并将数据分片的物理表名,以语句条件的形式添加至第二SQL语句,以及基于第二SQL语句,生成第二SQL请求;

步骤S406,路由中间服务器通过MySQL协议连接方式,向数据库服务器发送第二SQL请求;

步骤S407,数据库服务器接收路由中间服务器发送的第二SQL请求;

步骤S408,数据库服务器基于语句条件中的物理表名确定相应的数据分片,并获取数据分片内存储的至少一条数据。

步骤S409,数据库服务器向路由中间服务器发送数据分片内存储的至少一条数据;

步骤S410,路由中间服务器按照第一SQL请求中携带的数据处理方式,对获取的数据分片内存储的至少一条数据进行处理;

步骤S411,路由中间服务器将处理后的数据发送给业务方服务器。

参考图5,图5为本申请实施例提供的一种数据查询的示意图,从图5中可知:

业务方服务器通过MySQL协议连接方式向路由中间服务器发送第一SQL请求,第一SQL请求中携带第一SQL语句,第一SQL语句的注释中定义有用于指定数据分片的查询条件;

路由中间服务器接收到第一SQL请求后,通过SQL解析引擎对第一SQL请求携带的第一SQL语句进行解析处理,获取第一SQL语句的注释中定义的查询条件;需要说明的是,注释中的查询条件仅是一个定义,与SQL语句中的where条件不同,不会真正的作为条件到数据库服务器MySQL中执行。

路由中间服务器的SQL解析引擎将获取到的查询条件传递到SQL路由引擎,SQL路由引擎根据查询条件确定数据分片;以查询条件中包括分片键为例,SQL路由引擎根据分片键的定义截取分片键中的值即可获取到数据分片,如字符串的第10位到字符串的第12位表示某个数据分片。

路由中间服务器的SQL路由引擎将确定的数据分片传递给SQL执行引擎,由于业务传入的是逻辑地址,要准确获得数据,需要通过物理表名进行数据查询,以返回相应结果,因此SQL执行引擎基于数据分片的物理表名,将SQL语句进行改写,生成第二SQL语句,并基于第二SQL语句生成第二SQL请求;然后,基于第二SQL请求,通过MySQL协议连接方式,路由到数据库服务器中相应的数据分片,并获取数据分片中的至少一条数据。

参考图6,图6示例性提供本申请实施例中一种路由中间服务器进行数据查询的方法的流程图,包括如下步骤:

步骤S600,接收业务方服务器发送的第一结构化查询语言SQL请求;其中,第一SQL请求中携带第一SQL语句,第一SQL语句的注释中定义有查询条件,查询条件用于标志所查询的数据在数据库中的位置;

步骤S601,基于查询条件确定相应的数据分片,并将数据分片的物理表名,以语句条件的形式添加至第二SQL语句,以及基于第二SQL语句,生成第二SQL请求;

步骤S602,向数据库服务器发送第二SQL请求,并获取数据库服务器反馈的数据分片内存储的至少一条数据。

在一种可能的实现方式中,查询条件包括:数据区间、用于索引数据分片的分片键;其中,分片键是基于业务方的编号或标识信息确定的。

在一种可能的实现方式中,基于查询条件确定相应的数据分片,包括:

对第一SQL请求进行解析处理,确定第一SQL语句的注释中定义有数据区间时,基于数据区间,在数据区间与数据分片的对应关系中,确定与数据区间匹配的目标数据区域,并确定目标数据区间对应的数据分片;或

对第一SQL请求进行解析处理,确定第一SQL语句的注释中定义有分片键时,基于分片键索引匹配相应的数据分片。

在一种可能的实现方式中,向数据库服务器发送第二SQL请求,包括:

通过关系型数据库管理系统MySQL协议连接方式,向数据库服务器发送第二SQL请求;

其中,MySQL协议连接方式,包括:Java数据库连接JDBC连接、MySQL命令行中的至少一种。

在一种可能的实现方式中,第一SQL请求中携带数据处理方式;

获取数据库服务器反馈的数据分片内存储的至少一条数据之后,按照数据处理方式,对获取的数据分片内存储的至少一条数据进行处理,并通过MySQL协议连接方式,将处理结果反馈给业务方服务器。

参考图7,图7示例性提供本申请实施例中一种业务方服务器进行数据查询方法的流程图,包括如下步骤:

步骤S700,确定需要进行数据查询时,根据所查询的数据,确定查询条件;其中,查询条件用于标志所查询的数据在数据库中的位置;

步骤S701,将查询条件以注释的形式添加至第一SQL语句,并基于第一SQL语句,生成第一SQL请求;

步骤S702,向路由中间服务器发送第一SQL请求,并获取路由中间服务器反馈的目标数据;其中,目标数据是路由中间服务器获得的数据分片内存储的至少一条数据。

在一种可能的实现方式中,通过如下方式确定需要进行查询:

接收到业务方触发的查询请求;或

确定达到定时查询任务的查询时间。

在一种可能的实现方式中,根据所查询的数据,确定查询条件,包括:

若所查询的数据为区间数据,则确定查询条件中包括数据区间;

若所查询的数据为业务方数据,则确定查询条件中包括用于索引数据分片的分片键,其中,分片键是基于业务方的编号或标识信息确定的。

在一种可能的实现方式中,向路由中间服务器发送第一SQL请求,包括:

通过关系型数据库管理系统MySQL协议连接方式,向路由中间服务器发送第一SQL请求;

其中,MySQL协议连接方式,包括:Java数据库连接JDBC连接、MySQL命令行中的至少一种。

在本申请中,通过在SQL语句中增加包含用于确定数据分片的查询条件即可访问到指定的数据分片,并获取数据分片内存储的至少一条数据,准确的对数据分片进行数据查询,且业务方服务器在查询过程中无需执行多次查询操作,减少工作量;同时,在查询条件中包括分片键时,分片键是复用的原有分片键信息,无需引入新的字段和分片键,即无需维护额外用于确定数据分片的信息,降低学习、维护、改造等成本。

与本申请上述方法实施例基于同一发明构思,本申请实施例中还提供了一种数据查询装置,装置解决问题的原理与上述实施例中路由中间服务器侧执行的方法相似,因此装置的实施可以参见上述路由中间服务器侧对应的方法的实施,重复之处不再赘述。

参见图8,图8示例性提供本申请实施例提供一种数据查询装置800,该数据查询装置800包括:

接收单元801,用于接收业务方服务器发送的第一SQL请求;其中,第一SQL请求中携带第一SQL语句,第一SQL语句的注释中定义有查询条件,查询条件用于标志所查询的数据在数据库中的位置;

第一生成单元802,用于基于查询条件确定相应的数据分片,并将数据分片的物理表名,以语句条件的形式添加至第二SQL语句,以及基于第二SQL语句,生成第二SQL请求;

第一发送单元803,用于向数据库服务器发送第二SQL请求,获取数据库服务器反馈的数据分片内存储的至少一条数据。

在一种可能的实现方式中,查询条件包括:数据区间、用于索引数据分片的分片键;

其中,分片键是基于业务方的编号或标识信息确定的。

在一种可能的实现方式中,第一生成单元802具体单元:

对第一SQL请求进行解析处理,确定第一SQL语句的注释中定义有数据区间时,基于数据区间,在数据区间与数据分片的对应关系中,确定与数据区间匹配的目标数据区域,并确定目标数据区间对应的数据分片;或

对第一SQL请求进行解析处理,确定第一SQL语句的注释中定义有分片键时,基于分片键索引匹配相应的数据分片。

在一种可能的实现方式中,第一发送单元803具体用于:

通过MySQL协议连接方式,向数据库服务器发送第二SQL请求;

其中,MySQL协议连接方式,包括:JDBC连接、MySQL命令行中的至少一种。

在一种可能的实现方式中,第一SQL请求中携带数据处理方式;

第一发送单元803还用于:按照数据处理方式,对获取的数据分片内存储的至少一条数据进行处理,并通过MySQL协议连接方式,将处理结果反馈给业务方服务器。

与本申请上述方法实施例基于同一发明构思,本申请实施例中还提供了另一种数据查询装置,装置解决问题的原理与上述实施例中业务方服务器侧执行的方法相似,因此装置的实施可以参见上述业务方服务器侧对应的方法的实施,重复之处不再赘述。

参见图9,图9示例性提供本申请实施例提供一种数据查询装置900,该数据查询装置900包括:

确定单元901,用于确定需要进行数据查询时,根据所查询的数据,确定查询条件;其中,查询条件用于标志所查询的数据在数据库中的位置;

第二生成单元902,用于将查询条件以注释的形式添加至第一SQL语句,并基于第一SQL语句,生成第一SQL请求;

第二发送单元903,用于向路由中间服务器发送第一SQL请求,并获取路由中间服务器反馈的目标数据;其中,目标数据是路由中间服务器获得的数据分片内存储的至少一条数据。

在一种可能的实现方式中,确定单元901通过如下方式确定需要进行查询:

接收到业务方触发的查询请求;或

确定达到定时查询任务的查询时间。

在一种可能的实现方式中,确定单元901具体用于:

若所查询的数据为区间数据,则确定查询条件中包括数据区间;

若所查询的数据为业务方数据,则确定查询条件中包括用于索引数据分片的分片键,其中,分片键是基于业务方的编号或标识信息确定的。

在一种可能的实现方式中,第二发送单元903具体用于

通过MySQL协议连接方式,向路由中间服务器发送第一SQL请求;

其中,MySQL协议连接方式,包括:JDBC连接、MySQL命令行中的至少一种。

为了描述的方便,以上各部分按照功能划分为各单元(或模块)分别描述。当然,在实施本申请时可以把各单元(或模块)的功能在同一个或多个软件或硬件中实现。

所属技术领域的技术人员能够理解,本申请的各个方面可以实现为系统、方法或程序产品。因此,本申请的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。

在介绍了本申请示例性实施方式的数据查询方法和装置之后,接下来,介绍根据本申请的另一示例性实施方式的用于数据查询的电子设备。

与本申请上述方法实施例基于同一发明构思,本申请实施例中还提供了一种电子设备。在该实施例中,电子设备的结构可以如图10所示,包括存储器1001,通讯模块1003以及一个或多个处理器1002。

存储器1001,用于存储处理器1002执行的计算机程序。存储器1001可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统,以及运行即时通讯功能所需的程序等;存储数据区可存储各种即时通讯信息和操作指令集等。

存储器1001可以是易失性存储器(volatile memory),例如随机存取存储器(random-access memory,RAM);存储器1001也可以是非易失性存储器(non-volatilememory),例如只读存储器,快闪存储器(flash memory),硬盘(hard disk drive,HDD)或固态硬盘(solid-state drive,SSD);或者存储器1001是能够用于携带或存储具有指令或数据结构形式的期望的计算机程序并能够由计算机存取的任何其他介质,但不限于此。存储器1001可以是上述存储器的组合。

处理器1002,可以包括一个或多个中央处理单元(central processing unit,CPU)或者为数字处理单元等等。处理器1002,用于调用存储器1001中存储的计算机程序时实现上述数据查询方法。

通讯模块1003用于与终端设备和其他服务器进行通信。

本申请实施例中不限定上述存储器1001、通讯模块1003和处理器1002之间的具体连接介质。本申请实施例在图10中以存储器1001和处理器1002之间通过总线1004连接,总线1004在图10中以粗线描述,其它部件之间的连接方式,仅是进行示意性说明,并不引以为限。总线1004可以分为地址总线、数据总线、控制总线等。为便于描述,图10中仅用一条粗线描述,但并不描述仅有一根总线或一种类型的总线。

存储器1001中存储有计算机存储介质,计算机存储介质中存储有计算机可执行指令,计算机可执行指令用于实现本申请实施例的数据查询方法。处理器1002用于执行上述的数据查询方法。

在一些可能的实施方式中,本申请提供的数据查询方法的各个方面还可以实现为一种程序产品的形式,其包括计算机程序,当程序产品在电子设备上运行时,计算机程序用于使电子设备执行本说明书上述描述的根据本申请各种示例性实施方式的数据查询方法中的步骤。

程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以是但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。

本申请的实施方式的程序产品可以采用便携式紧凑盘只读存储器(CD-ROM)并包括计算机程序,并可以在计算装置上运行。然而,本申请的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被命令执行系统、装置或者器件使用或者与其结合使用。

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

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

应当注意,尽管在上文详细描述中提及了装置的若干单元或子单元,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本申请的实施方式,上文描述的两个或更多单元的特征和功能可以在一个单元中具体化。反之,上文描述的一个单元的特征和功能可以进一步划分为由多个单元来具体化。

此外,尽管在附图中以特定顺序描述了本申请方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。

本领域内的技术人员应明白,本申请实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用计算机程序的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。

显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

技术分类

06120116459478