CN103970807B - 数据库连接管理方法及系统 - Google Patents
数据库连接管理方法及系统 Download PDFInfo
- Publication number
- CN103970807B CN103970807B CN201310050150.9A CN201310050150A CN103970807B CN 103970807 B CN103970807 B CN 103970807B CN 201310050150 A CN201310050150 A CN 201310050150A CN 103970807 B CN103970807 B CN 103970807B
- Authority
- CN
- China
- Prior art keywords
- connection
- sql request
- database
- affairs
- sql
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/217—Database tuning
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供了一种数据库连接管理方法,涉及计算机数据处理技术领域。为了保证本申请在代理服务器中的连接复用,本申请代理服务器判断接收到对于针对同一结果集的SQL请求均绑定到一个连接上,即为绑定的连接分配连接ID发送给客户端,代理服务器通过连接ID查找相应的连接以连接数据库进行处理;针对同一事务的SQL请求均绑定到一个连接上,即为绑定的连接分配连接ID发送给客户端,代理服务器通过连接ID查找相应的连接以连接数据库进行处理;从而大大提高了数据库连接的利用率,避免对数据库连接的无效占用,保证数据库的稳定,提高数据库的响应速度,从而提高服务器的处理效率。
Description
技术领域
本申请涉及计算机数据处理技术领域,特别是涉及一种数据库连接管理方法及系统。
背景技术
软件系统的数据操作通常都是在数据库中,当需要进行数据读写操作时,通过与数据库建立连接的方式来实现。通常情况下,软件系统与数据库都是采用在需要时建立连接,而不需要时关闭连接的方式。在实际应用中,软件系统运行时通常具有高峰期和低谷期,而软件系统使用数据库时通常会配置最大连接数和最小连接数。这个连接数配置通常都是针对高峰时期来设置的,对于低谷期来说,被使用的连接可能会很少,因此,针对高峰期配置的最大连接数和最小连接数会造成较大的资源浪费。特别的,对于某些数据库的连接数是需要购买的时候,此种配置方式无疑会增加使用成本,同时连接数的实际利用率很低。
为了提高连接的利用率,通常会建立数据库连接管理系统来对数据库的连接进行管理,一个数据库管理系统对应一个数据库。在管理系统中建立工作线程或者连接池的方式,通过将SQL请求分配到工作线程上执行或者通过连接池进行SQL请求的管理。此种方式在一定程度上提高了连接的利用率,但是,因为每一个数据库是独立的,当有多个软件系统以及多个数据库时,无法实现数据库连接的共享,连接的利用率还是无法得到提高。
发明内容
本申请提供一种数据库连接管理方法及系统,能够解决数据库连接利用率低的问题。
为了解决上述问题,本申请公开了一种数据库连接管理方法,其特征在于,包括:
在代理服务器与应用服务器连接后,代理服务器接收应用服务器转发的客户端信息,代理服务器进入数据库连接管理步骤,所述数据库连接管理步骤包括:
接收应用服务器转发的客户端的SQL请求;
当判断所述SQL请求是初次接收的针对结果集的SQL请求时,从未绑定的连接中取出一个连接,通过所述连接从对应数据库获取当前查询段的查询结果;
将所述查询结果和所述连接进行绑定,为所述连接分配连接ID,并将所述查询结果和连接ID一起发送给客户端;所述连接ID用于携带在所述客户端再次针对同一结果集发送后续的SQL请求中;
当判断所述SQL请求是针对结果集的SQL请求但不是初次接收的SQL请求时,提取对应所述SQL请求的连接ID并根据所述连接ID查找对应的连接,通过所述连接从对应数据库获取当前查询段的查询结果。
优选的,还包括:针对同一结果集,当判断所述结果集的SQL请求不需要继续绑定所述连接后,将所述连接与查询结果解绑。
优选的,针对同一结果集,当判断所述结果集的SQL请求不需要继续绑定所述连接后,将所述连接与查询结果解绑包括:
通过所述连接向数据库请求得到的当前查询段的查询结果后,判断针对所述结果集的所有数据全部取出,则将所述连接与查询结果解绑。
优选的,针对同一结果集,当判断所述结果集的SQL请求不需要继续绑定所述连接后,将所述连接与查询结果解绑包括:
记录所述连接的绑定时间,当所述绑定时间超过阈值时,则将所述连接与查询结果解绑。
本申请还公开了一种数据库连接管理方法,包括:
在代理服务器与应用服务器连接后,代理服务器接收应用服务器转发的客户端信息,代理服务器进入数据库连接管理步骤,所述数据库连接管理步骤包括:
接收应用服务器转发的客户端的SQL请求;
当判断所述SQL请求是初次接收的针对事务的SQL请求时,从未绑定的连接中选择一个连接与对应所述事务SQL请求的事务绑定,并通过所述连接接到对应数据库处理所述SQL请求;
为所述连接分配一个连接ID,并将所述连接ID返回给客户端;所述连接ID用于携带在所述客户端再次针对同一事务发送后续的SQL请求中;
当判断所述SQL请求是针对事务的SQL请求但不是初次接收的SQL请求时,提取对应所述事务SQL请求的连接ID;并根据所述连接ID提取对应的连接,并通过所述连接接到对应数据库处理所述SQL请求。
优选的,还包括:针对同一事务,当判断所述事务的SQL请求不需要继续使用所述连接后,将所述连接与所述事务解绑。
优选的,针对同一事务,当判断所述事务的SQL请求不需要继续使用所述连接后,将所述连接与所述事务解绑包括:
当客户端发送的SQL请求中包括事务结束命令时,则判断所述事务的SQL请求或者结果集分段SQL请求不需要继续使用所述连接。
本申请还公开了一种数据库连接管理系统,包括:
代理服务器,应用服务器,数据库;
所述代理服务器包括:
请求接收模块,用于接收应用服务器转发的客户端的SQL请求;
结果集请求判断模块一,用于当判断所述SQL请求是初次接收的针对结果集的SQL请求时,从未绑定的连接中取出一个连接,通过所述连接从对应数据库获取当前查询段的查询结果;
查询结果处理模块,用于将所述查询结果和所述连接进行绑定,为所述连接分配连接ID,并将所述查询结果和连接ID一起发送给客户端;所述连接ID用于携带在所述客户端再次针对同一结果集发送后续的SQL请求中;
结果集请求判断模块二,用于当判断所述SQL请求是针对结果集的SQL请求但不是初次接收的SQL请求时,提取对应所述SQL请求的连接ID并根据所述连接ID查找对应的连接,通过所述连接从对应数据库获取当前查询段的查询结果。
本申请还公开了一种数据库连接管理系统,包括:
代理服务器,应用服务器,数据库;
所述代理服务器包括:
请求接收模块,用于接收应用服务器转发的客户端的SQL请求;
第一事务请求判断处理模块,用于当判断所述SQL请求是初次接收的针对事务的SQL请求时,从未绑定的连接中选择一个连接与对应所述事务SQL请求的事务绑定,并通过所述连接接到对应数据库处理所述SQL请求;
绑定处理模块,用于为所述连接分配一个连接ID,并将所述连接ID返回给客户端;所述连接ID用于携带在所述客户端再次针对同一事务发送后续的SQL请求中;
第二事务请求判断处理模块,用于当判断所述SQL请求是针对事务的SQL请求但不是初次接收的SQL请求时,提取对应所述事务SQL请求的连接ID;根据所述连接ID提取对应的连接,并通过所述连接接到对应数据库处理所述SQL请求。
与现有技术相比,本申请包括以下优点:
本申请的数据库连接管理方法及系统通过建立代理服务器来对所有客户端通过应用服务器集群发送的SQL请求以及数据库集群的连接进行集中管理,可以很好的对数据库的连接进行分配,并及时释放不需要再使用的连接,实现连接利用率的最大化。因为,在某些应用服务器处于高峰期时,可能会有应用服务器处于低谷期,此时则可以将处于低谷期的应用服务器对应的连接分配给处于高峰期的应用服务器。特别的,对于应用服务器较多时,此种方式的效果尤其明显,能够大量的降低数据库的连接总量,同时可以保证应用服务器正常与数据库建立连接,从而大大提高了数据库连接的利用率,避免对数据库连接的无效占用,保证数据库的稳定,提高数据库的响应速度,从而提高服务器的处理效率。
为了保证本申请在代理服务器中的连接复用,本申请代理服务器判断接收到对于针对同一结果集的SQL请求均绑定到一个连接上,即为绑定的连接分配连接ID发送给客户端,代理服务器通过连接ID查找相应的连接以连接数据库进行处理,以解决保证事务只能发生在同一连接上的要求,保证应用服务器正常与数据库建立连接,从而大大提高了数据库连接的利用率,避免对数据库连接的无效占用,保证数据库的稳定,提高数据库的响应速度,从而提高服务器的处理效率。
另外,本申请代理服务器判断接收到对于针对同一事务的SQL请求均绑定到一个连接上,即为绑定的连接分配连接ID发送给客户端,代理服务器通过连接ID查找相应的连接以连接数据库进行处理,以解决保证事务只能发生在同一连接上的要求,保证应用服务器正常与数据库建立连接,从而大大提高了数据库连接的利用率,避免对数据库连接的无效占用,保证数据库的稳定,提高数据库的响应速度,从而提高服务器的处理效率。
另外,引入超时处理机制,当某次SQL请求对某个连接的占用时间超过阈值后,则清除此次连接,可以及时处理异常连接,避免对连接不必要的占用,从而保证所有连接能够正常运用,且能够正常与数据库进行交互。
当然,实施本申请的任一产品不一定需要同时达到以上所述的所有优点。
附图说明
图1是本申请的数据库连接管理方法实施例一的流程图;
图2是本申请的数据库连接管理实现的系统架构图;
图3是本申请的数据库连接管理方法实施例二的流程图;
图4是本申请的数据库连接管理系统实施例一的结构图;
图5是本申请的数据库连接管理方法实施例二的结构图。
具体实施方式
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
参照图1,其示出本申请的一种数据库连接管理方法实施例一,具体可以包括:
步骤100,在代理服务器与应用服务器连接后,代理服务器接收应用服务器转发的客户端信息;
其中,本发明的系统架构可参照图2,其示出实现本申请的数据库连接管理的系统架构图。本申请的数据库连接管理通过独立的代理服务器来实现对多个数据库的管理,以提高数据库连接的利用率。其中,代理服务器置于应用服务器集群和数据库集群之间,在客户端通过应用服务器发出SQL请求时,代理服务器首先会接收该SQL请求,并基于多个数据库的实际情况为本次SQL请求分配一个连接,然后再通过应用服务器返回给客户端。下面对本申请的数据库连接管理方法及系统进行详细的说明。
代理服务器和应用服务器直接的交互过程还可包括验证等步骤,具体如下:
步骤A1,Web服务器与代理服务器建立链接;
步骤A2,代理服务器向Web服务器返回响应信息;
步骤A3,Web服务器向代理服务器发送客户端的帐号、密码;
步骤A4,代理服务器将接收到的帐号密码与代理服务器本身存储的帐号、密码进行匹配;
步骤A5,代理服务器验证该用户是否合法。
当代理服务器验证客户端的账号密码合法后,即验证通过后,代理服务器针对该客户端的SQL请求进入数据库连接管理步骤,即步骤步骤110至步骤150。
步骤110,接收应用服务器转发的客户端的SQL请求;
在本申请实施例中,客户端发送到应用服务器的请求可包括以下几类:
1、普通SQL请求,比如,客户端查询用户的安全邮箱;
2、针对事务的SQL请求,比如,客户端进行网上购物后,进行的支付流程就是一个事务,那么在该阶段中客户端发送的SQL请求即为针对事务的SQL请求;
3、针对结果集的SQL请求,比如,客户端在查询某几个月的消费记录时,而该客户该几个月的消费记录存在一系列的记录,这些记录即为结果集,那么在用户查询时,其发送的SQL请求即为针对结果集的SQL请求。
应用服务器接收到客户端发送的SQL请求后,会将所述SQL请求转发给代理服务器。其中,当客户端需要查询某个结果集时,会发送查询的SQL请求和每段查询结果的数量命令(为方便下面描述,初次发送的每段查询结果的数量命令以fetcheSize标识),然后才会发后续的SQL请求给应用服务器;应用服务器将SQL请求转发给代理服务器。
步骤120,当判断所述SQL请求是初次接收的针对结果集的SQL请求时,从未绑定的连接中取出一个连接,通过所述连接从对应数据库获取当前查询段的查询结果;
如前所述,当客户端需要查询某个结果集时,最开始会发送查询的SQL请求和fetchSize到应用服务器,应用服务器发送该查询的SQL请求和fetchSize到代理服务器;那么代理服务器在接收到SQL请求时,根据是否包括fetchSize判断当前SQL请求是否为针对结果集的SQL请求。当代理服务器判断接收到SQL请求时包括fetchSize时,即判断所述SQL请求是初次接收的针对结果集的SQL请求时,从未绑定的连接中取出一个连接,通过所述连接从对应数据库获取当前查询段的查询结果。
比如客户端为AAAA,其请求查询2012-1-01至2012-12-31日的网络消费记录,而每个网页只显示20条,客户端第一次发送命令时,发送包括查询条件为针对“2012-1-01至2012-12-31”消费记录的SQL语句的SQL请求,同时还会发送fetchSize=20的命令。代理服务器接收到上述SQL请求时,判断存在“fetchSize”,此时,从未绑定的连接中取出一个连接,通过所述连接从对应数据库查询2012-1-01至2012-12-31的消费记录,然后提取前20条记录作为当前段的查询结果。
步骤130,将所述查询结果和所述连接进行绑定,为所述连接分配连接ID,并将所述查询结果和连接ID一起发送给客户端;所述连接ID用于携带在所述客户端再次针对同一结果集发送后续的SQL请求中;
针对前述代理服务器初次接收的针对结果集的SQL请求,从未绑定的连接中取出一个连接,通过所述连接从对应数据库获取当前查询段的查询结果后,那么将所述连接与该查询结果绑定,并为该连接分配一个连接ID;然后将连接ID和前述20条查询结果一起发送给客户端。
客户端再次发送针对“2012-1-01至2012-12-31”消费记录的下一页(下一段)查询的SQL请求时,也将所连接ID一起发送给应用服务器,应用服务器转发给代理服务器。在实际中客户端再次发送查询请求时,会发送包括fetchMore命令的SQL查询请求和所述连接ID。
步骤140,当判断所述SQL请求是针对结果集的SQL请求但不是初次接收的SQL请求时,提取对应所述SQL请求的连接ID并根据所述连接ID查找对应的连接,通过所述连接从对应数据库获取当前查询段的查询结果;
即如前所述,代理服务器接收到包括fetchMore命令的SQL查询请求时,判断该SQL查询请求是针对结果集的SQL请求,但不是初次接收的SQL请求,那么提取所述连接ID,然后根据所述连接ID查找对应的连接,通过所述连接从对应数据库获取当前查询段的查询结果。
在本申请实施例中,对于与查询结果绑定的连接,代理服务器将这些连接放入结果集连接绑定集合,在代理服务器提取到连接ID后,从所述结果集连接绑定集合中提取与该连接ID对于的连接,然后将通过该连接执行所述SQL请求中的SQL语句,从对应数据库中获取当前查询段的查询结果。
比如前述例子中,当用户通过客户端点击查看第二页的查询结果时,客户端将发送包括fetchMore命令的SQL查询请求和连接ID至应用服务器,应用服务器转发给代理服务器,代理服务器通过fetchMore判断其是针对结果集的SQL请求但不是初次接收的SQL请求,则提取对应的连接ID,然后从结果集连接绑定集合中查找对应的连接,通过该连接在数据库中查找“2012-1-01至2012-12-31”消费记录的第21-40条记录,然后返回给客户端。
优选的,还包括:步骤150,针对同一结果集,当判断所述结果集的SQL请求不需要继续绑定所述连接后,将所述连接与查询结果解绑。
在本申请中,代理服务器可根据多种情况判断与查询结果绑定的连接是否需要继续绑定,如果不需要则将所述连接与查询结果解绑,并且可释放相应的连接ID。
优选的,针对同一结果集,当判断所述结果集的SQL请求不需要继续绑定所述连接后,将所述连接与查询结果解绑包括:
步骤B11,通过所述连接向数据库请求得到的当前查询段的查询结果后,判断针对所述结果集的所有数据全部取出,则将所述连接与查询结果解绑。
如前所述,客户端查询“2012-1-01至2012-12-31”消费记录,而客户端每次只能展示20条,如果数据库中总共包括100条,那么客户端如果要查询完所有结果,则至少需要发送5次SQL请求,当客户端发送第5次SQL请求后,代理服务器则从对应数据库查询得到第81-100条结果,而数据库没有更多的结果,那么代理服务器则可判断针对“2012-1-01至2012-12-31”消费记录的结果集的所有数据全部取出,则将所述连接与查询结果解绑,将连接空闲出来给其他SQL请求使用。
优选的,针对同一结果集,当判断所述结果集的SQL请求不需要继续绑定所述连接后,将所述连接与查询结果解绑包括:
步骤B12,当客户端发送结束查询指令时,则将所述连接与查询结果解绑。
客户端通过应用服务器关闭resultSet和connection对象时,即发送结束查询指令时,代理服务器可解除该结果集与连接ID的绑定,将连接空闲出来给其他SQL请求使用。
优选的,针对同一结果集,当判断所述结果集的SQL请求不需要继续绑定所述连接后,将所述连接与查询结果解绑包括:
步骤B13,记录所述连接的绑定时间,当所述绑定时间超过阈值时,则将所述连接与查询结果解绑。
如果客户端得到处理结果后,一直没有将结果集迭代完成,也会造成大量数据库连接被占用,所以对于分段查询来也可引入超时处理机制,即代理服务器在绑定连接时记录绑定时间,利用单独线程进行记录,当绑定时间超过阈值还未进行下一步处理,那么通过该线程进行超时清理,将未迭代完的绑定了结果集的连接解绑,将连接空闲出来给其他SQL请求使用。
对于处理结果的数量较大时,一次将所有处理结果都返回,无疑会增加数据库的压力和网络传输的问题,通过将处理结果分段的方式来返回结果,即每次返回一定数量的结果,这被称为结果集分段。例如,当用户通过客户端发送某个关键词来进行查询,得到的查询结果数量较大,为了减少单次数据传输量,避免影响网络传输速度,需要将查询结果分段返回。例如,每次返回100条,当用户需要下一段结果时再返回100条,如此往复,直到所有结果全部返回。因此,结果集分段SQL请求也是无法做到连接复用,只能独自占用连接。那么本申请代理服务器判断接收到对于针对同一结果集的SQL请求均绑定到一个连接上,即为绑定的连接分配连接ID发送给客户端,代理服务器通过连接ID查找相应的连接以连接数据库进行处理,以解决保证事务只能发生在同一连接上的要求,保证应用服务器正常与数据库建立连接,从而大大提高了数据库连接的利用率,避免对数据库连接的无效占用,保证数据库的稳定,提高数据库的响应速度,从而提高服务器的处理效率。
参照图3,其示出本申请的一种数据库连接管理方法实施例二的流程示意图,具体可以包括:
步骤200,在代理服务器与应用服务器连接后,代理服务器接收应用服务器转发的客户端信息;
本步骤与步骤100类似,在此不再加以详述。
具体地,还可对所述客户端信息进行验证,当代理服务器验证客户端的账号密码合法后,即验证通过后,代理服务器才会针对该客户端的SQL请求进入数据库连接管理步骤,即步骤步骤210至步骤250。
步骤210,接收应用服务器转发的客户端的SQL请求;
比如在电子商务网站中,某个用户从提交确认订单到支付转账的过程,就是一个事务,那么用户在该过程中发送的SQL请求即为针对事务请求。如前所述,客户端发送的SQL请求的类型中包括针对事务的SQL请求。其中,客户端在初次发送针对事务的SQL请求时,会发送包括autocomit=false命令的SQL请求至应用服务器,应用服务器再将其转发给代理服务器。
步骤220,当判断所述SQL请求是初次接收的针对事务的SQL请求时,从未绑定的连接中选择一个连接与对应所述事务SQL请求的事务绑定,并通过所述连接接到对应数据库处理所述SQL请求;
如前所述,当代理服务器接收到应用服务器转发的SQL请求后,通过判断其中是否包括autocomit=false命令,以判断所述SQL请求是初次接收的针对事务的SQL请求。当存在autocomit=false,则表示当前的SQL请求为针对事务的SQL请求,那么从未绑定的连接中选择一个连接与对应所述事务SQL请求的事务绑定,并通过所述连接接到对应数据库处理所述SQL请求。
如前所述某个用户从提交确认订单到支付转账的过程例子,当用户提交确认订单时,需要通过客户端发送包括autocomit=false命令的SQL请求,那么代理服务器判断该SQL请求为针对事务的SQL请求,则从可用连接中选取一个连接与所述事务进行绑定;并通过该连接建立与数据库的连接,从而修改数据库中相关数据,例如,订单确认状态,数据库需要将处理结果返回。
步骤230,为所述连接分配一个连接ID,并将所述连接ID返回给客户端;所述客户端再次针对同一事务发送后续的SQL请求时包括所述连接ID;
在绑定后,可为所述连接分配一个连接ID,然后将所述连接ID返回给所述客户端;那么在客户端处理同一事务时,再发送SQL请求时也发送所述连接ID到代理服务器。
如前所述某个用户从提交确认订单到支付转账的过程例子,在确认提交成功后,因为还需要进行支付转账,因为是对同一订单进行处理,所以需要相同的连接,因此,在返回处理结果给客户端的同时,还需要返回连接ID。当用户支付转账成功后,重新通过客户端发送SQL请求时,需要将连接ID一同发出。
步骤240,当判断所述SQL请求是针对事务的SQL请求但不是初次接收的SQL请求时,提取对应所述事务SQL请求的连接ID;并根据所述连接ID提取对应的连接,通过所述提取的连接连接到对应数据库处理所述SQL请求;
在本申请实施例中,代理服务器还可根据接收到的SQL请求中是否包括连接ID,判断是否为针对事务的SQL请求但不是初次接收的针对事务的SQL请求。当代理服务器判断接收到应用服务器转发的客户端的SQL请求是针对事务的SQL请求但不是初次接收的SQL请求时,提取对应所述事务SQL请求的连接ID,通过所述连接ID查找与该事务绑定的连接,然后通过所述连接接到对应数据库处理所述SQL请求。
在本申请实施例中,对于与事务进行绑定的连接,会放入事务连接绑定集合,那么本申请在提取得到连接ID后,会在事务连接绑定集合中查找与连接ID对应的连接,然后通过该连接接到对应数据库处理所述SQL请求。
如前所述某个用户从提交确认订单到支付转账的过程例子,当用户支付转账成功后,重新通过客户端发送SQL请求时,将连接ID一同发出后,代理服务器接收到该SQL请求时,判断有连接ID,则提取该连接ID,查找与相应事务绑定的连接,通过同一连接与数据库进行交互,当数据库处理完支付转账的请求后,修改了相应的数据,返回支付转账成功的处理结果给客户端。
优选的,还包括:步骤250,针对同一事务,当判断所述事务的SQL请求不需要继续使用所述连接后,将所述连接与所述事务解绑。
在本申请中,代理服务器可根据多种情况判断与事务绑定的连接是否需要继续绑定,如果不需要则将所述连接与事务解绑,并且可释放相应的连接ID。
优选的,针对同一事务,当判断所述事务的SQL请求不需要继续使用所述连接后,将所述连接与所述事务解绑包括:
步骤C11,当客户端发送的SQL请求中包括事务结束命令时,则判断所述事务的SQL请求或者结果集分段SQL请求不需要继续使用所述连接;
当客户端通过应用服务器发送包括事务结束命令(例如commit或者rollback命令时)的SQL请求时,也会发送连接ID,那么代理服务器则通过SQL请求中的事务结束命令,判断需要进行解绑动作,即提取所述连接ID,查找到所述绑定的连接,解除所述事务和连接ID的绑定,释放该连接以供其他SQL请求使用。
优选的,针对同一事务,当判断所述事务的SQL请求不需要继续使用所述连接后,将所述连接与所述事务解绑包括:
步骤C12,记录所述连接的绑定时间,当所述绑定时间超过阈值时,则将所述连接与查询结果解绑。
当处理事务超时,如果客户端通过应用服务器申请了事务连接后,一直没有进行commit或者rollback,这样就会造成大量的连接被占用,最后导致无可用连接可用响应其他SQL请求。因此,引入超时处理机制。比如记录首次建立连接的时间,并且使用独立线程进行超时扫描,若连接使用超过预定时间还没有进行commit或者rollback的话,则将所述连接与所述事务解绑,释放该连接以供其他SQL请求使用。
本申请实施例中,代理服务器判断接收到对于针对同一事务的SQL请求绑定到一个连接上,即为绑定的连接分配连接ID发送给客户端,代理服务器通过连接ID查找相应的连接以连接数据库进行处理,以解决保证事务只能发生在同一连接上的要求,保证应用服务器正常与数据库建立连接,从而大大提高了数据库连接的利用率,避免对数据库连接的无效占用,保证数据库的稳定,提高数据库的响应速度,从而提高服务器的处理效率。
在上述实施例中,某些步骤的先后顺序可以调换,在此不加以限制。
另外,在实施例一或者实施例二的基础上还包括:
步骤300,对所述数据库的数据进行迁移。
对数据库进行迁移包括以下两种情况。
第一种情况:
当某一数据库出现异常,无法再使用时,也需要将其中的数据迁移,以保证数据的完整性。对于此种情况,可以直接将出现异常的数据库中的数据迁移到其他数据库中。并且,可以通过代理服务器来实现智能控制,若代理服务器与数据库交互时,发现某一数据库无法正常读写,则可以直接将该数据库的读写特性修改为不可用,避免后续再与该数据库建立连接,从而避免请求都堆在该数据库中。
另外,当数据库无法正常读写后,代理服务器可以启动try-lock机制来对数据库进行校验。try-lock机制是指,只允许一个线程对出现问题的数据库进行重试,如果重试成功重新标记该库读写特性为正常,如果重试不成功,则需要将其中的数据迁移到其他数据库。
第二种情况:
随着数据存储量的增加,可能会存在原有数据库的容量无法满足数据的存储要求,此时需要增加数据库。若之前的数据是按照一定的散列规则存储在各数据库中,当新增数据库后,必然会使散列规则发生改变,此时,原本存储在某些数据库中的数据则可能需要迁移到新增数据库中。
对于此种情况,因为一直需要对老的数据库中的数据进行读写,老数据库中的数据量可能一直处在增加的状态,因此,在进行迁移时需要考虑到以下问题:如何将用根据旧的散列规则存储在老的数据库中的数据根据新的散列规则迁移到新的数据库中,同时又使老的数据库能够一直正常工作。为此,本申请采用如下方式实现数据的迁移:
选取一个时间点作为迁移的起始时间,此时开始的所有数据仍然按照老的散列规则写入数据库;
记录下从该起始时间按照老的散列规则写入到当前数据库的新数据;
采用新的散列规则计算该新数据实际应当写入的数据库,并将不属于当前数据库的新数据单独存储;
其中散列规则是指数据被分配到各数据库的依据,假设有两个数据库A和B,老的散列规则为:编号为单数的数据写入数据库A,反之则写入数据库B。那么对于新写入的数据进行编号,将单数写入数据库A,双数则写入数据库B。又如,新增加了数据库C,新的散列规则为:编号除以3,余数为1的写入数据库A,余数为2的写入数据库B,其余的写入数据库C。
经过预定延迟时间后,按照新的散列规则计算当前数据库中在迁移起始时间之前的老数据所属的数据库,判断是否属于当前数据库,若不属于,则将所述老数据复制到按照新的散列规则计算出的数据库,反之,则不作处理;
在当前数据库中在迁移起始时间之前的老数据全部复制完成后,将存储在当前数据库中的新数据复制到按照新的散列规则计算出的数据库;
监测存储在当前数据库中的新数据剩余数量,当剩余数量达到阈值时,停止当前数据库的写入操作,直到当前数据库中的新数据全部按照新的散列规则复制到对应的数据库中;
开启当前数据库的写入操作,后续所有数据采用新的散列规则写入到各数据库。
采用此种方式,当前数据库仅在新数据剩余数量达到阈值时才会停止当前数据库的写入操作。阈值可以根据实际情况或者经验来设置,例如1000条等等,因为系统复制小于或者等于阈值数量的新数据所需要消耗的时间很短,即使短暂的停止当前数据库的写入操作,对存储数据的影响也会很小,甚至可以忽略不计。因此,此种方式可以实现数据库中数据的平滑迁移,保证在迁移过程中不论是新的数据库还是老的数据库都能正常工作。
优选地,为了保证迁移数据的准确性,在迁移过程中,除了按照新的散列规则来计算存在当前数据库中的数据具体所属的数据库,还可以进一步地按照老的散列规则来计算存储在当前数据库中的数据是否属于当前数据库。只有当根据老的散列规则计算出数据不属于当前数据库,根据新的散列规则计算出属于其他数据库的情况下,才会对数据进行复制,反之,则需要留待后续校验。例如,对于前述情况,对于存储在数据库A中的数据,假设编号为6,按照新的散列规则,编号为6的数据应该写入数据库C。此时,还需要按照老的散列规则计算出编号为6的数据原本应该写入到数据库B,即不属于数据库A,那么就需要将该数据复制到数据库C中。若按照老的散列规则计算出编号为6的数据应该写入到数据库A,那么就需要进行后续校验来判断其应该写入的数据库。
当所有数据都迁移完成,并且新写入的数据已经按照新的散列规则正常写入后,则可以删除原有数据库中已经复制到新的数据库中的数据,从而降低对数据库容量的占用,同时保证数据存储的准确性。
参照图4,其示出了本申请连接管理系统实施例一的结构图,具体可以包括:
代理服务器410,应用服务器420,数据库430;
所述代理服务器410包括:
请求接收模块411,用于接收应用服务器转发的客户端的SQL请求;
结果集请求判断模块一412,用于当判断所述SQL请求是初次接收的针对结果集的SQL请求时,从未绑定的连接中取出一个连接,通过所述连接从对应数据库获取当前查询段的查询结果;
查询结果处理模块413,用于将所述查询结果和所述连接进行绑定,为所述连接分配连接ID,并将所述查询结果和连接ID一起发送给客户端;所述连接ID用于携带在所述客户端再次针对同一结果集发送后续的SQL请求中;
结果集请求判断模块二414,用于当判断所述SQL请求是针对结果集的SQL请求但不是初次接收的SQL请求时,提取对应所述SQL请求的连接ID并根据所述连接ID查找对应的连接,通过所述连接从对应数据库获取当前查询段的查询结果。
进一步地,还包括:绑定判断模块,用于针对同一结果集,当判断所述结果集的SQL请求不需要继续绑定所述连接后,将所述连接与查询结果解绑。
优选的,所述绑定判断模块包括:
通过所述连接向数据库请求得到的当前查询段的查询结果后,判断针对所述结果集的所有数据全部取出,则将所述连接与查询结果解绑。
优选的,所述绑定判断模块包括:
当客户端发送结束查询指令时,则将所述连接与查询结果解绑。
优选的,所述绑定判断模块包括:
记录所述连接的绑定时间,当所述绑定时间超过阈值时,则将所述连接与查询结果解绑。
参照图5,其示出了本申请连接管理系统实施例二的结构图,具体可以包括:
代理服务器510,应用服务器520,数据库530;
所述代理服务器510包括:
请求接收模块511,用于接收应用服务器转发的客户端的SQL请求;
第一事务请求判断处理模块512,用于当判断所述SQL请求是初次接收的针对事务的SQL请求时,从未绑定的连接中选择一个连接与对应所述事务SQL请求的事务绑定,并通过所述连接接到对应数据库处理所述SQL请求;
绑定处理模块513,用于为所述连接分配一个连接ID,并将所述连接ID返回给客户端;所述连接ID用于携带在所述客户端再次针对同一事务发送后续的SQL请求中;
第二事务请求判断处理模块514,用于当判断所述SQL请求是针对事务的SQL请求但不是初次接收的SQL请求时,提取对应所述事务SQL请求的连接ID;根据所述连接ID提取对应的连接,并通过所述连接接到对应数据库处理所述SQL请求。
进一步地,还包括:
绑定判断模块,用于针对同一事务,当判断所述事务的SQL请求不需要继续使用所述连接后,将所述连接与所述事务解绑。
优选的,所述绑定判断模块包括:
当客户端发送的SQL请求中包括事务结束命令时,则判断所述事务的SQL请求或者结果集分段SQL请求不需要继续使用所述连接;
优选的,所述绑定判断模块包括:
记录所述连接的绑定时间,当所述绑定时间超过阈值时,则将所述连接与查询结果解绑。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的系统及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上对本申请所提供的数据库连接管理方法及系统进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (9)
1.一种数据库连接管理方法,其特征在于,包括:
在代理服务器与应用服务器连接后,代理服务器接收应用服务器转发的客户端信息,代理服务器进入数据库连接管理步骤,所述数据库连接管理步骤包括:
接收应用服务器转发的客户端的SQL请求;
当判断所述SQL请求是初次接收的针对结果集的SQL请求时,从未绑定的连接中取出一个连接,通过所述连接从对应数据库获取当前查询段的查询结果;
将所述查询结果和所述连接进行绑定,为所述连接分配连接ID,并将所述查询结果和连接ID一起发送给客户端;所述连接ID用于携带在所述客户端再次针对同一结果集发送后续的SQL请求中;
当判断所述SQL请求是针对结果集的SQL请求但不是初次接收的SQL请求时,提取对应所述SQL请求的连接ID并根据所述连接ID查找对应的连接,通过所述连接从对应数据库获取当前查询段的查询结果。
2.如权利要求1所述的数据库连接管理方法,其特征在于,
针对同一结果集,当判断所述结果集的SQL请求不需要继续绑定所述连接后,将所述连接与查询结果解绑。
3.如权利要求2所述的数据库连接管理方法,其特征在于,针对同一结果集,当判断所述结果集的SQL请求不需要继续绑定所述连接后,将所述连接与查询结果解绑包括:
通过所述连接向数据库请求得到的当前查询段的查询结果后,判断针对所述结果集的所有数据全部取出,则将所述连接与查询结果解绑。
4.如权利要求2所述的数据库连接管理方法,其特征在于,针对同一结果集,当判断所述结果集的SQL请求不需要继续绑定所述连接后,将所述连接与查询结果解绑包括:
记录所述连接的绑定时间,当所述绑定时间超过阈值时,则将所述连接与查询结果解绑。
5.一种数据库连接管理方法,其特征在于,包括:
在代理服务器与应用服务器连接后,代理服务器接收应用服务器转发的客户端信息,代理服务器进入数据库连接管理步骤,所述数据库连接管理步骤包括:
接收应用服务器转发的客户端的SQL请求;
当判断所述SQL请求是初次接收的针对事务的SQL请求时,从未绑定的连接中选择一个连接与对应所述事务SQL请求的事务绑定,并通过所述连接接到对应数据库处理所述SQL请求;
为所述连接分配一个连接ID,并将所述连接ID返回给客户端;所述连接ID用于携带在所述客户端再次针对同一事务发送后续的SQL请求中;
当判断所述SQL请求是针对事务的SQL请求但不是初次接收的SQL请求时,提取对应所述事务SQL请求的连接ID;并根据所述连接ID提取对应的连接,并通过所述连接接到对应数据库处理所述SQL请求。
6.如权利要求5所述的数据库连接管理方法,其特征在于,
针对同一事务,当判断所述事务的SQL请求不需要继续使用所述连接后,将所述连接与所述事务解绑。
7.如权利要求6所述的数据库连接管理方法,其特征在于,针对同一事务,当判断所述事务的SQL请求不需要继续使用所述连接后,将所述连接与所述事务解绑包括:
当客户端发送的SQL请求中包括事务结束命令时,则判断所述事务的SQL请求不需要继续使用所述连接。
8.一种数据库连接管理系统,其特征在于,包括:
代理服务器,应用服务器,数据库;
所述代理服务器包括:
请求接收模块,用于接收应用服务器转发的客户端的SQL请求;
结果集请求判断模块一,用于当判断所述SQL请求是初次接收的针对结果集的SQL请求时,从未绑定的连接中取出一个连接,通过所述连接从对应数据库获取当前查询段的查询结果;
查询结果处理模块,用于将所述查询结果和所述连接进行绑定,为所述连接分配连接ID,并将所述查询结果和连接ID一起发送给客户端;所述连接ID用于携带在所述客户端再次针对同一结果集发送后续的SQL请求中;
结果集请求判断模块二,用于当判断所述SQL请求是针对结果集的SQL请求但不是初次接收的SQL请求时,提取对应所述SQL请求的连接ID并根据所述连接ID查找对应的连接,通过所述连接从对应数据库获取当前查询段的查询结果。
9.一种数据库连接管理系统,其特征在于,包括:
代理服务器,应用服务器,数据库;
所述代理服务器包括:
请求接收模块,用于接收应用服务器转发的客户端的SQL请求;
第一事务请求判断处理模块,用于当判断所述SQL请求是初次接收的针对事务的SQL请求时,从未绑定的连接中选择一个连接与对应所述事务SQL请求的事务绑定,并通过所述连接接到对应数据库处理所述SQL请求;
绑定处理模块,用于为所述连接分配一个连接ID,并将所述连接ID返回给客户端;所述连接ID用于携带在所述客户端再次针对同一事务发送后续的SQL请求中;
第二事务请求判断处理模块,用于当判断所述SQL请求是针对事务的SQL请求但不是初次接收的SQL请求时,提取对应所述事务SQL请求的连接ID;根据所述连接ID提取对应的连接,并通过所述连接接到对应数据库处理所述SQL请求。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310050150.9A CN103970807B (zh) | 2013-02-06 | 2013-02-06 | 数据库连接管理方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310050150.9A CN103970807B (zh) | 2013-02-06 | 2013-02-06 | 数据库连接管理方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103970807A CN103970807A (zh) | 2014-08-06 |
CN103970807B true CN103970807B (zh) | 2017-04-19 |
Family
ID=51240319
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310050150.9A Active CN103970807B (zh) | 2013-02-06 | 2013-02-06 | 数据库连接管理方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103970807B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2021091737A1 (en) * | 2019-11-04 | 2021-05-14 | Amazon Technologies, Inc. | Multi-tenant provider network database connection management and governance |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104836798B (zh) * | 2015-04-15 | 2018-11-20 | 国家计算机网络与信息安全管理中心 | 一种维护客户端连接信息的方法及装置 |
CN106021544B (zh) * | 2016-05-27 | 2020-02-07 | 北京京东尚科信息技术有限公司 | 数据库分布式连接池管理方法和系统 |
CN105978823B (zh) * | 2016-07-11 | 2019-05-07 | 中体彩科技发展有限公司 | 用于游戏系统的数据传输方法及装置 |
CN108259417B (zh) * | 2016-12-28 | 2020-07-24 | 华为技术有限公司 | 一种业务处理方法、装置及系统 |
CN107633179B (zh) * | 2017-08-03 | 2020-01-21 | 福建天晴数码有限公司 | 一种操作数据库的方法及系统 |
CN108183833B (zh) * | 2017-11-29 | 2021-08-10 | 努比亚技术有限公司 | 一种响应处理方法、装置及计算机可读存储介质 |
CN114095514B (zh) * | 2020-07-29 | 2023-03-10 | 华为技术有限公司 | 一种数据库访问方法和系统 |
CN112207833B (zh) * | 2020-10-16 | 2021-08-17 | 深圳市华成工业控制股份有限公司 | 一种运动路径的规划方法、系统、主机及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1815469A (zh) * | 2005-02-01 | 2006-08-09 | 华为技术有限公司 | 一种数据库连接资源的管理方法 |
CN1928873A (zh) * | 2006-09-25 | 2007-03-14 | 华为技术有限公司 | 一种实现负荷分担的数据库访问方法及系统 |
CN102033912A (zh) * | 2010-11-25 | 2011-04-27 | 北京北纬点易信息技术有限公司 | 一种分布式数据库访问方法及系统 |
CN102609463A (zh) * | 2012-01-13 | 2012-07-25 | 广东电网公司电力科学研究院 | 一种基于准实时平台的数据集群管理系统 |
-
2013
- 2013-02-06 CN CN201310050150.9A patent/CN103970807B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1815469A (zh) * | 2005-02-01 | 2006-08-09 | 华为技术有限公司 | 一种数据库连接资源的管理方法 |
CN1928873A (zh) * | 2006-09-25 | 2007-03-14 | 华为技术有限公司 | 一种实现负荷分担的数据库访问方法及系统 |
CN102033912A (zh) * | 2010-11-25 | 2011-04-27 | 北京北纬点易信息技术有限公司 | 一种分布式数据库访问方法及系统 |
CN102609463A (zh) * | 2012-01-13 | 2012-07-25 | 广东电网公司电力科学研究院 | 一种基于准实时平台的数据集群管理系统 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2021091737A1 (en) * | 2019-11-04 | 2021-05-14 | Amazon Technologies, Inc. | Multi-tenant provider network database connection management and governance |
Also Published As
Publication number | Publication date |
---|---|
CN103970807A (zh) | 2014-08-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103970807B (zh) | 数据库连接管理方法及系统 | |
US20210103604A1 (en) | System and method for implementing a scalable data storage service | |
US7349970B2 (en) | Workload management of stateful program entities | |
US11609697B2 (en) | System and method for providing a committed throughput level in a data store | |
US9372911B2 (en) | System and method for performing replica copying using a physical copy mechanism | |
US6510429B1 (en) | Message broker apparatus, method and computer program product | |
CN104793988A (zh) | 跨数据库分布式事务的实现方法和装置 | |
CN101576915A (zh) | 一种分布式b+树索引系统及构建方法 | |
CN100375088C (zh) | 利用事务语义法分段和处理连续数据流 | |
CN103890738A (zh) | 用于保留克隆分离操作之后的存储对象中的消重的系统和方法 | |
CN105608086A (zh) | 分布式数据库系统的事务处理方法及装置 | |
CN104520822A (zh) | 数据存储应用编程界面 | |
CN102253869A (zh) | 可缩放的容错元数据服务 | |
CN107464151A (zh) | 高并发业务的订单数据处理方法及装置 | |
CN105701112A (zh) | 一种数据处理方法、装置及系统 | |
CN112162846B (zh) | 事务处理方法、设备及计算机可读存储介质 | |
CN106897345A (zh) | 一种数据存储的方法及装置 | |
CN101504756A (zh) | 基于网络实现资金调动调拨的系统和方法 | |
US20100180024A1 (en) | Reducing occurrences of two-phase commits in a multi-node computing system | |
CN110119396A (zh) | 数据管理方法及相关产品 | |
CN107276914B (zh) | 基于cmdb的自助资源分配调度的方法 | |
RU2721235C2 (ru) | Способ и система для маршрутизации и выполнения транзакций | |
CN110659303A (zh) | 一种数据库节点的读写控制方法及装置 | |
CN110263060A (zh) | 一种erp电子附件管理方法及计算机设备 | |
CN111680069B (zh) | 数据库访问方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |