[发明专利]数据库访问方法和装置有效
申请号: | 201310681688.X | 申请日: | 2013-12-12 |
公开(公告)号: | CN103761240B | 公开(公告)日: | 2017-12-15 |
发明(设计)人: | 朱超;王超;陈飞 | 申请(专利权)人: | 北京奇虎科技有限公司;奇智软件(北京)有限公司 |
主分类号: | G06F17/30 | 分类号: | G06F17/30 |
代理公司: | 北京华沛德权律师事务所11302 | 代理人: | 刘杰 |
地址: | 100088 北京市西城区新*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 数据库 访问 方法 装置 | ||
技术领域
本发明涉及数据库访问技术,具体涉及一种数据库访问方法以及数据库访问装置。
背景技术
客户端对数据库的访问通常包括建立数据库连接、打开数据库、数据存取以及关闭数据库连接等操作,其中,建立数据库连接以及打开数据库操作等会消耗大量的系统资源以及时间。目前,为了节约系统资源以及时间,在数据库访问过程中引入了连接池技术。
基于连接池的数据库访问的实现方式通常为:在连接池中存储多条已经建立好的数据库连接,针对来自客户端的数据库访问请求,从连接池中获取一条数据库连接,并将该数据库连接提供给客户端;在数据库访问请求执行完成后,该数据库连接被回收至连接池中;后续,针对来自客户端(可以为前次发送数据库访问请求的客户端,也可以为其他客户端)的数据库访问请求,从连接池中获取一条数据库连接(可以是前次获取的数据库连接,也可以为其他数据库连接),并将该数据库连接提供给客户端,同样的,在数据库访问请求执行完成后,该数据库连接被回收至连接池中。
由上述描述可知,在引入连接池技术后,在数据库的数据存取操作完成后,客户端所使用的数据库连接并没有被关闭,而是被存储在连接池中,且存储在连接池中的数据库连接会被再次使用,即连接池中的数据库连接得到了复用,避免了反复建立数据库连接以及反复关闭数据库连接的操作,从而节约了系统资源以及时间。
由于数据库访问请求中的SQL语句可能是加锁的SQL语句、解锁的SQL语句或者不涉及加解锁的SQL语句(可以称为普通的SQL语句),因此,在引入连接池技术后,数据库访问会存在锁权限管理疏漏问题;一个具体的例子,图1中,第一客户端通过连接池中的第一数据库连接与MySQL数据库连接,第二客户端通过连接池中的第二数据库连接与MySQL数据库连接;第一客户端请求执行SELECT GET_LOCK(‘lock1’,0)的SQL语句,第二客户端请求执行SELECT GET_LOCK(‘lock2’,0)的SQL语句;这两条SQL语句被执行后,第一客户端获得锁lock1,第二客户端获得锁lock2,且第一数据库连接和第二数据库连接被回收到连接池中;在第一客户端和第二客户端请求执行SELECT RELEASE_LOCK(‘lock2’)及SELECT RELEASE_LOCK(‘lock1’)的SQL语句之前,如果第一客户端请求执行SELECT GET_LOCK(‘lock2’,0)的SQL语句,或者第二客户端请求执行SELECT GET_LOCK(‘lock1’,0)的SQL语句,则由于锁的状态是和数据库连接绑定的,因此,在为第一客户端分配的数据库连接为前述第一数据库连接,为第二客户端分配的数据库连接为前述第二数据库连接,则第一客户端会获得锁lock2,第二客户端会获得锁lock1。然而,正确的处理结果应该为第一客户端和第二客户端均被阻塞,从而第一客户端不能够获得锁lock2,第二客户端不能够获得锁lock1。
为了避免数据库访问中的锁权限管理疏漏的问题,现有的解决方案通常为:使客户端在运行期间独占一个数据库连接,直到该客户端退出后,该数据库连接才会被回收至连接池中,这样,在客户端运行期间,该客户端所有加锁的SQL语句、解锁的SQL语句以及普通的SQL语句都会基于同一数据库连接而被执行,从而该客户端获得的锁不会被其他客户端获得。
发明人在实现本发明过程中发现,上述基于独占数据库连接的解决方案会使数据库连接的复用度大大降低,具体而言,客户端在运行期间除了请求执行SQL语句之外还需要执行其他逻辑,从而在客户端请求执行两条SQL语句之间会存在时间间隔,在该时间间隔内,客户端所占用的数据库连接既没有被回收到连接池中,也没有被该客户端充分利用。由上述描述可知,数据库连接的复用度有待于进一步提高。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的数据库访问方法以及相应的数据库访问装置。
依据本发明的一个方面,提供了一种数据库访问方法,该方法包括:接收来自客户端的数据库访问请求;判断客户端当前是否具有数据库连接;在客户端当前不具有数据库连接的情况下,从连接池中选取数据库连接,并提供给所述客户端;基于所述客户端当前具有的数据库连接执行所述数据库访问请求;在所述数据库访问请求执行完成后,根据存储的所述客户端对应的锁信息判断所述客户端当前是否具有未释放的锁;如果所述客户端当前具有未释放的锁,则为所述客户端保持所述数据库连接,否则,将所述数据库连接回收至所述连接池中。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京奇虎科技有限公司;奇智软件(北京)有限公司,未经北京奇虎科技有限公司;奇智软件(北京)有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310681688.X/2.html,转载请声明来源钻瓜专利网。
- 上一篇:车载语音控制设备
- 下一篇:七轴联动数控砂带磨抛机床