数据库访问方法及数据库访问中间件与流程

文档序号:18823274发布日期:2019-10-09 01:08阅读:386来源:国知局
数据库访问方法及数据库访问中间件与流程

本发明涉及通信技术领域,尤其涉及一种数据库访问方法及数据库访问中间件。



背景技术:

在通信领域中经常存在着对海量数据的存储和读取,例如电信运营商的计费系统,而数据库的连接、断开将消耗和释放一定的系统资源,因此,短连接不可取,大都采用长连接的方式,也即长时间保持与数据库的连接状态,在没有数据通信时,定时发送数据包,以维持连接状态。

由于对于电信运营商的计费系统,应用进程数量非常庞大,数据库的连接数是有限的,如果每个应用进程和数据库建立一个长连接,数据库的连接将超过其最大连接数,数据吞吐效率将急剧下降,严重的会导致连接失败,稳定性大受影响。



技术实现要素:

本发明提供一种数据库访问方法及数据库访问中间件,以在减少数据库的长连接,避免了数据库连接数量超过其最大连接数造成数据吞吐效率下降,提高数据访问的可靠性和稳定性。

本发明的一个方面是提供一种数据库访问方法,该数据库访问方法步骤如下:

服务器轮询多个客户端,其中所述多个客户端与所述服务器连接,分别用于接收用户发送的数据访问请求;

所述服务器将所述客户端接收到的所述数据访问请求转发给空闲的服务模块,以使所述服务模块根据所述数据访问请求连接对应的异构数据库,建立所述异构数据库与所述用户之间的数据连接。

进一步的,所述服务器将所述客户端接收到的所述数据访问请求转发给空闲的服务模块前,还包括:

获取各所述服务模块的当前状态;

根据所述当前状态选择负荷最小的服务模块作为所述空闲的服务模块。

进一步的,所述服务器至少有两个,各所述服务器实现负载均衡,并在接收到升级指令或维护指令时,依次进行升级或维护。

进一步的,所述数据访问请求为经过所述客户端操作符重载后的标准化应用代码。

进一步的,所述服务模块通过统一接口与各所述异构数据库连接。

本发明的另一个方面是提供一种数据库访问中间件,包括:

多个客户端,分别用于接收用户发送的数据访问请求;

服务器,与所述多个客户端连接,用于轮询所述多个客户端,将所述客户端接收到的所述数据访问请求转发给空闲的服务模块;

所述服务模块,用于根据所述数据访问请求连接对应的异构数据库,建立所述异构数据库与所述用户之间的数据连接。

进一步的,所述服务器还用于:

获取各所述服务模块的当前状态;

根据所述当前状态选择负荷最小的服务模块作为所述空闲的服务模块。

进一步的,所述服务器至少有两个,各所述服务器实现负载均衡,并在接收到升级指令或维护指令时,依次进行升级或维护。

进一步的,所述数据访问请求为经过所述客户端操作符重载后的标准化应用代码。

进一步的,所述服务模块通过统一接口与各所述异构数据库连接。

本发明提供的数据库访问方法及数据库访问中间件,通过多个客户端分别接收用户发送的数据访问请求,服务器通过轮询该多个客户端,将客户端接收到的数据访问请求转发给空闲的服务模块,服务模块根据数据访问请求连接对应的异构数据库,建立异构数据库与用户之间的数据连接。本发明的方法通过服务器对客户端轮询以及由空闲服务模块连接对应的异构数据库,降低数据库与用户的连接数量,减轻了数据库压力,避免了用户与数据库的长连接,进而避免了数据库连接数量超过其最大连接数造成数据吞吐效率下降,并且支持高并发,提高了可靠性和稳定性,有效提高数据库响应的整体效率。

附图说明

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

图1为本发明实施例提供的数据库访问方法流程图;

图2为本发明实施例提供的数据库访问中间件的架构图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

图1为本发明实施例提供的数据库访问方法流程图。本实施例提供了一种数据库访问方法,通过数据库访问中间件实现用户对异构数据库的数据访问,其中如图2所示,数据库访问中间件包括多个客户端client、多个服务模块service,以及位于客户端client和服务模块service间的服务器server,其中服务器server可以为一个或者多个(图2仅示出一个服务器)。

需要说明的是,中间件(middleware)是基础软件的一大类,属于可复用软件的范畴。顾名思义,中间件处于操作系统软件与用户的应用软件之间:在操作系统、网络和数据库之上,应用软件的下层。总的作用是为处于自己上层的应用软件提供运行与开发的环境,帮助用户灵活、高效地开发和集成复杂的应用软件。本实施例的数据库访问中间件就是建立在数据库和用户之间的数据访问代理软件。

如图1所示,本实施例提供的方法执行主体为服务器,该方法具体步骤如下:

s101、服务器轮询多个客户端,其中所述多个客户端与所述服务器连接,分别用于接收用户发送的数据访问请求。

在本实施例中,客户端client负责直接跟用户进行交互,可接受用户发送的数据访问请求。在接收到用户发送的数据访问请求后,客户端client并不是立即将数据访问请求发送给服务器server,而是由服务器server轮询多个客户端client,以对收到数据访问请求的客户端client进行后续的处理,而没有收到数据访问请求的客户端client则继续处于等待状态,本实施例通过服务器server轮询多个客户端client的方式,可依次对用户的数据访问请求进行处理,避免了将客户端client与服务器server需要保持长连接,可以释放服务器server的系统资源,避免超过其最大连接数,对服务器server负载过大,降低数据访问服务效率。

s102、所述服务器将所述客户端接收到的所述数据访问请求转发给空闲的服务模块,以使所述服务模块根据所述数据访问请求连接对应的异构数据库,建立所述异构数据库与所述用户之间的数据连接。

在本实施例中,服务器server通过轮询依次将各客户端client接收到的数据访问请求转发给空闲的服务模块service,由该空闲的服务模块service根据数据访问请求查找对应的异构数据库,并与该异构数据库连接,从而建立该异构数据库与用户之间的数据连接。其中异构数据库系统是相关的多个数据库系统的集合,可以实现数据的共享和透明访问,几个数据库系统在加入异构数据库系统之前本身就已经存在,拥有自己的数据阵管理系统、外构数据库的各个组成部分具有自身的自治性,实现数据共享的同时,每个数据库系统仍有自己的应用特性、完整性控制和安全性控制。本实施例中,服务器server将数据访问请求转发给空闲的服务模块service前,还可首先查找空闲的服务模块service,其中空闲的服务模块service可以为当前没有数据访问任务的服务模块service,若不存在,也可将当前负荷最小的服务模块作为空闲的服务模块service。

本实施例提供的数据库访问方法,通过多个客户端分别接收用户发送的数据访问请求,服务器通过轮询该多个客户端,将客户端接收到的数据访问请求转发给空闲的服务模块,服务模块根据数据访问请求连接对应的异构数据库,建立异构数据库与用户之间的数据连接。本实施例的方法通过服务器对客户端轮询以及由空闲服务模块连接对应的异构数据库,降低数据库与用户的连接数量,减轻了数据库压力,避免了用户与数据库的长连接,进而避免了数据库连接数量超过其最大连接数造成数据吞吐效率下降,并且支持高并发,提高了可靠性和稳定性,有效提高数据库响应的整体效率。

在上述实施例的基础上,本实施例的数据库访问中间件采用c/s架构,由负载平衡的2个server负责轮询client的请求和监控维护信息接入,根据请求报头判断并通过socketpair将socketfd传递给对应的空闲的service,由service负责和client的对话,;2个server之间负载平衡,提高效率并保证在service维护和升级过程中仍能对外提供服务;还可采用udp(userdatagramprotocol,用户数据报协议)协议实现一点维护。

进一步的,s102中的所述服务器将所述客户端接收到的所述数据访问请求转发给空闲的服务模块前,还可包括:

获取各所述服务模块的当前状态;

根据所述当前状态选择负荷最小的服务模块作为所述空闲的服务模块。

本实施例中,server按照配置文件启动不同数据库的、一定数量的服务,并开始负责轮询client的接入,批量地接受和将请求分发给对应的负荷最小的service。server和service之间通过socketpair连接,其中socketpair是linux提供的一种双向通讯机制,通过socket实现双向通讯,由其传递client的socketfd,并感知service的状态,以根据service的状态判断其负荷大小,若存在空闲的service,则直接将请求分发给空闲的service,若不存在空闲的service,则选择负荷最小的service作为所述空闲的服务模块。此外,当感知到service异常退出,则自动重启service,保证系统的可靠性。

此外,server还可首先通过统计和分析,判断client的数据访问属于频繁的、大实务的,将该client与异构数据库建立长连接,而判断client的数据访问属于不太频繁的、小事务的,则采用上述实施例提供的数据库访问方法。

进一步的,所述服务器至少有两个,各所述服务器实现负载均衡,并在接收到升级指令或维护指令时,依次进行升级或维护。

本实施例中,采用双服务器负载均衡,可提高效率并保证在service维护和升级过程中不间断服务。具体的,采用udp通讯方式,实现一点监控、一点维护;版本升级一点通知,自动下载更新,由server负责下载并更新service服务程序,由于采用双server机制,依次升级,不会造成服务中断。

进一步的,所述数据访问请求为经过所述客户端操作符重载后的标准化应用代码。

其中,操作符重载是指把已经定义的、有一定功能的操作符进行重新定义,来完成更为细致具体的运算等功能。操作符重载可以将概括性的抽象操作符具体化,便于外部调用而无需知晓内部具体运算过程。本实施例中利用的操作符重载的方式,实现应用代码的标准化、简易化;以oracle数据库为例,查询语句:

sql="selectu_id,u_name,to_char(u_date,'yyyy-mm-dd')fromstudent";

接口的实现为:

而对于insert:

sql="insertintostudent(u_id,u_name,u_date)values(:1,:2,to_date(:3,'yyyy-mm-dd)";

接口的实现为:

通过上述的操作符重载,实现应用代码的标准化、简易化,大大降低应用程序开发的难度和开发工作量,并提高可移植性和可复用性。

进一步的,所述服务模块通过统一接口与各所述异构数据库连接。

由于不同系统采用的数据库各异,主要有oracle、mysql、altibase等,各数据库接口各不相同,给应用开发带来额外的开发工作量。本实施例中service与数据库接口的代码可与上述代码相同,针对异构数据库,不管是oracle、mysql还是其他数据库,service均通过统一接口与各数据库连接,从而保证系统的可移植、可扩展性。即使撇开数据库访问中间件,由应用直连数据库也不需要改动代码,充分保护了企业在应用软件开发和维护中的投资。此外,本实施例中需要将不同数据库封装成不同的类实现异构数据库的操作,对外暴露统一的接口。而数据库和接口均以多态的形式继承自相同的基类cdb,因此对外提供的方法是一致的,从而解决了移植性、可扩展性。

本实施例中,service可以以md5码自动缓存sql,并查找复用sql的解析结果(出入参个数、类型等),避免重复解析,最大限度提高响应效率。采用md5码主要是为了减少存储空间、提高查询效率。

本实施例的数据库访问中间件支持分布式事务xa,并支持表按分布键分布在不同库上,利用xa协议保证事务的一致性,支持数据分布式或统一的插入、修改以及大小表关联查询等。其中,xa是一个分布式事务协议,由tuxedo提出,xa中大致分为两部分:事务管理器和本地资源管理器,其中本地资源管理器往往由数据库实现,比如oracle、db2这些商业数据库都实现了xa接口,而事务管理器作为全局的调度者,负责各个本地资源的提交和回滚。

本实施例提供的数据库访问方法,通过多个客户端分别接收用户发送的数据访问请求,服务器通过轮询该多个客户端,将客户端接收到的数据访问请求转发给空闲的服务模块,服务模块根据数据访问请求连接对应的异构数据库,建立异构数据库与用户之间的数据连接。本实施例的方法通过服务器对客户端轮询以及由空闲服务模块连接对应的异构数据库,降低数据库与用户的连接数量,减轻了数据库压力,避免了用户与数据库的长连接,进而避免了数据库连接数量超过其最大连接数造成数据吞吐效率下降,并且支持高并发,提高了可靠性和稳定性,有效提高数据库响应的整体效率。同时,采用统一接口,符合软件设计的接口隔离和依赖倒置原则,实现异构数据库(如oracle、mysql、altibase等)接口标准化、简易化、智能化,大大降低应用程序开发的难度和开发工作量,提高系统的可移植、可扩展性;利用的操作符重载的方式,实现应用代码的标准化、简易化,紧密贴合软件设计的里氏替换原则,对应用开发来说,无论是通过数据代理中间件、还是直接访问数据库,只需更换数据访问类,代码不需要任何改变;利用sql语法分析和缓存,提高中间件的智能化和自动化,并提高效率;采用可靠的c/s设计架构,并发的socket的通讯,多进程协同处理的机制,满足高并发要求;支持分布式事务xa,以及支持远程监控、维护和版本升级。

图2为本发明实施例提供的数据库访问中间件的结构图。本实施例提供的数据库访问中间件可以执行上述数据库访问方法实施例提供的处理流程,如图2所示,数据库访问中间件包括多个客户端client41、多个服务模块service43,以及位于客户端client41和服务模块service43间的服务器server42,其中服务器server42可以为一个或者多个(图2仅示出一个服务器42)。

其中,多个客户端41,分别用于接收用户发送的数据访问请求;

服务器42,与所述多个客户端41连接,用于轮询所述多个客户端41,将所述客户端41接收到的所述数据访问请求转发给空闲的服务模块43;

所述服务模块43,用于根据所述数据访问请求连接对应的异构数据库,建立所述异构数据库与所述用户之间的数据连接。

进一步的,所述服务器42还用于:

获取各所述服务模块43的当前状态;

根据所述当前状态选择负荷最小的服务模块43作为所述空闲的服务模块43。

进一步的,所述服务器42至少有两个,各所述服务器42实现负载均衡,并在接收到升级指令或维护指令时,依次进行升级或维护。

进一步的,所述数据访问请求为经过所述客户端41操作符重载后的标准化应用代码。

进一步的,所述服务模块43通过统一接口与各所述异构数据库连接。

本实施例提供的数据库访问中间件可以具体用于执行上述图1所提供的方法实施例,具体功能此处不再赘述。

本实施例提供的数据库访问中间件,通过多个客户端分别接收用户发送的数据访问请求,服务器通过轮询该多个客户端,将客户端接收到的数据访问请求转发给空闲的服务模块,服务模块根据数据访问请求连接对应的异构数据库,建立异构数据库与用户之间的数据连接。也即通过服务器对客户端轮询以及由空闲服务模块连接对应的异构数据库,降低数据库与用户的连接数量,减轻了数据库压力,避免了用户与数据库的长连接,进而避免了数据库连接数量超过其最大连接数造成数据吞吐效率下降,并且支持高并发,提高了可靠性和稳定性,有效提高数据库响应的整体效率。

在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。

上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

本领域技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1