一种数据库访问方法及装置制造方法及图纸

技术编号:15724574 阅读:92 留言:0更新日期:2017-06-29 10:35
本申请公开了一种数据库访问方法及装置。一种数据库访问方法该方法包括:接收用户侧发送的用户访问请求;根据接收到的用户访问请求,使用NIO方式向数据库侧发送数据库访问请求;确认所述数据访问请求发送成功后,生成数据库访问请求任务,并将该任务添加至工作队列,所述数据库访问请求任务中,携带有本次用户访问请求标识以及数据库访问请求标识;释放当前的处理线程。应用上述方案,数据库的响应耗时阶段无需占用应用服务器的线程,从而不会导致线程耗尽而影响到应用服务器的实际业务处理能力,也使得应用服务器的CPU资源可以充分用来处理业务。

【技术实现步骤摘要】
一种数据库访问方法及装置
本申请涉及计算机应用
,尤其涉及一种数据库访问方法及装置。
技术介绍
在JAVA环境中,每个线程都会消耗内存,如果同时运行的线程数量过多,会对系统的性能造成较大影响,因此,在基于JAVA开发的Web应用中,一般对会为应用服务器设定线程池,通过限定线程数量的方式来保证应用服务器的性能。根据现有的数据库访问方法,应用服务器接收到用户侧的数据访问请求后,需要为该请求分配处理线程,而且从应用服务器向数据库侧发起数据访问请求后、直到数据库返回数据这段时间内,该线程是一直被占用的。这样,数据库的内部处理的速度就会在很大程度上影响到应用服务器的线程占用情况,一旦数据库出现问题、响应速度变慢,很容易导致应用服务器的线程耗尽,从而降低应用服务器的实际业务处理能力。
技术实现思路
针对上述技术问题,本申请提供一种数据库访问方法及装置,技术方案如下:根据本申请的第一方面,提供一种数据库访问方法,该方法包括:接收用户侧发送的用户访问请求;根据接收到的用户访问请求,使用NIO方式向数据库侧发送数据库访问请求;确认所述数据访问请求发送成功后,生成数据库访问请求任务,并将该任务添加至工作队列,所述数据库访问请求任务中,携带有本次用户访问请求标识以及数据库访问请求标识;释放当前的处理线程。根据本申请的第二方面,提供一种数据库访问装置,该装置包括:用户访问请求接收模块,用于接收用户侧发送的用户访问请求;数据库访问请求发送模块,用于根据接收到的用户访问请求,使用NIO方式向数据库侧发送数据库访问请求;数据库访问请求任务添加模块,用于在确认所述数据访问请求发送成功后,生成数据库访问请求任务,并将该任务添加至工作队列,所述数据库访问请求任务中,携带有本次用户访问请求标识以及数据库访问请求标识;线程释放模块,用于释放当前的处理线程。本申请所提供的技术方案,应用服务器使用异步IO模式处理向数据库的访问请求,同时使用任务队列来保存应用服务器与数据库之间的连接,使连接不与线程绑定,这样,应用服务器在向数据库发送访问请求后,处理线程就可以被释放,数据库的响应耗时阶段无需占用应用服务器的线程,从而不会导致线程耗尽而影响到应用服务器的实际业务处理能力,也使得应用服务器的CPU资源可以充分用来处理业务。应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。附图说明为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。图1是现有技术的数据库访问方法的流程示意图;图2是本申请的数据库访问方法的访问阶段流程示意图;图3是本申请的数据库访问方法的响应阶段流程示意图;图4是本申请的数据库访问方法的完整流程示意图;图5是本申请的数据库访问装置的第一种结构示意图;图6是本申请的数据库访问装置的第二种结构示意图。具体实施方式根据现有技术的实现方案,应用服务器都是采用同步调用的方式与数据库进行交互,如图1所示,应用服务器需要为用户侧发来的每个访问请求分配处理线程,而且从应用服务器向数据库(DB)侧发起数据访问请求后、直到数据库返回数据这段时间内,该线程是一直被占用的。假设在一次数据读取过程中,数据库平均耗时为200毫秒,在忽略应用服务器内部处理、数据交互等其他时间占用的情况下,可以近似认为每个线程需要被占用200毫秒,也就是说1个线程最多能够在1秒内处理5个线程。如果应用服务器的设计需求是每秒能够支撑500次的访问量,可以将线程池的大小设置为100。但是,一旦数据库出现问题,例如某段时间内平均耗时从200毫秒上升到1秒,那么100次/秒的请求量就会将应用服务器的线程耗尽,导致应用服务器可支撑的访问量从500次/秒下降到100次/秒,业务处理能力严重下降。并且,此时应用服务器的CPU等其他资源并没有达到使用上限,因此资源浪费问题也比较严重。针对上述问题,本申请提出的方案是:应用服务器使用异步IO模式处理向数据库的访问请求,同时使用任务队列来保存应用服务器与数据库之间的连接,使连接不与线程绑定,这样,应用服务器在向数据库发送访问请求后,处理线程就可以被释放,数据库的响应耗时阶段无需占用应用服务器的线程,从而不会导致线程耗尽而影响到应用服务器的实际业务处理能力。为了使本领域技术人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行详细地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于本申请保护的范围。图2所示,为本申请提供的数据访问请求方法的流程图,该方法可以由应用服务器执行,包括以下步骤:S101,接收用户侧发送的用户访问请求;S102,根据接收到的用户访问请求,使用NIO方式向数据库侧发送数据库访问请求;应用服务器根据用户的访问内容,先确定目标数据库/表,构建数据访问指令,然后与目标数据库设备建立长连接,通过长连接发送数据访问指令。S103,确认数据访问请求发送成功后,生成数据库访问请求任务,并将该任务添加至工作队列。在所生成的数据库访问请求任务中,需要携带以下信息:本次数据库访问请求的标识,作用是在数据库返回访问结果后,从任务队列中找到对应的任务。本次用户访问请求的标识,作用是在数据库返回访问结果后,根据“数据库访问请求”与“用户访问请求”的绑定关系,确定相应的用户访问请求信息携带有本次用户访问请求标识以及数据库访问请求标识;S104,释放当前的处理线程。NIO是在JAVA1.4版本中提供的一种可以替代标准JavaIOAPI的IOAPI,与标准IO相比,NIO能够支持异步IO模式。在本申请所提供的方案中,应用服务器使用异步IO模式处理向数据库的访问请求,同时使用任务队列来保存应用服务器与数据库之间的连接信息。基于NIO的特性,应用服务器向数据库发送完数据访问请求后,就可以释放当前的处理线程,不需要设置线程对数据库侧进行监听。当数据库耗时上升时,只会增加工作队列中的任务数量,对应用服务器的线程占用没有影响,也不会导致应用服务器业务处理能力的降低。另一方面,也使得应用服务器的CPU资源可以充分用来处理业务。在本申请的一种改进实施方式中,应用服务器与用户侧的交互也可以使用NIO方式,具体而言,在S101~S102,应用服务器使用NIO方式接收用户侧发送的用户访问请求;根据接收到的用户访问请求,生成用户访问请求任务,并将该任务添加至工作队列;后续将从工作队列中获取用户访问请求任务,然后针对所获取的用户访问请求任务,使用NIO方式向数据库侧发送数据库访问请求。在上述数据访问请求方法的基础上,本申请还进一步提供数据访问响应的方法,该方法由应用服务器执行,参见图3所示,该方法可以包括以下步骤:S201,使用NIO方式接收数据库侧发送的数据库访问响应;S202,根据数据库访问响应中携带的数据库访问请求标识,从工作队列中获取具有相同标识的数据库访问请求任务;S203,根据所获取的数据库访问请求任务中本文档来自技高网...
一种数据库访问方法及装置

【技术保护点】
一种数据库访问方法,其特征在于,该方法包括:接收用户侧发送的用户访问请求;根据接收到的用户访问请求,使用NIO方式向数据库侧发送数据库访问请求;确认所述数据访问请求发送成功后,生成数据库访问请求任务,并将该任务添加至工作队列,所述数据库访问请求任务中,携带有本次用户访问请求标识以及数据库访问请求标识;释放当前的处理线程。

【技术特征摘要】
1.一种数据库访问方法,其特征在于,该方法包括:接收用户侧发送的用户访问请求;根据接收到的用户访问请求,使用NIO方式向数据库侧发送数据库访问请求;确认所述数据访问请求发送成功后,生成数据库访问请求任务,并将该任务添加至工作队列,所述数据库访问请求任务中,携带有本次用户访问请求标识以及数据库访问请求标识;释放当前的处理线程。2.根据权利要求1所述的方法,其特征在于,所述接收用户侧发送的用户访问请求,包括:使用NIO方式接收用户侧发送的用户访问请求,根据接收到的用户访问请求,生成用户访问请求任务,并将该任务添加至工作队列。3.根据权利要求1所述的方法,其特征在于,所述根据接收到的用户访问请求,使用NIO方式向数据库侧发送数据库访问请求,包括:从工作队列中获取用户访问请求任务,针对所获取的用户访问请求任务,使用NIO方式向数据库侧发送数据库访问请求。4.根据权利要求1至3任一项所述的方法,其特征在于,所述方法还包括:使用NIO方式接收数据库侧发送的数据库访问响应;根据所述数据库访问响应中携带的数据库访问请求标识,从工作队列中获取具有相同标识的数据库访问请求任务;根据所获取的数据库访问请求任务中所携带的用户访问请求标识,向用户侧发送用户访问响应。5.根据权利要求4所述的方法,其特征在于,所述向用户侧发送用户访问响应,包括:使用NIO方式向用户侧发送用户访问响应。6.根据权利要求4所述的方法,其特征在于,所述根据所获取的数据库访问请求任务中所携带的用户访问请求标识,向所述用户侧发送用户访问响应,包括:根据所获取的数据库访问请求任务中所携带的用户访问请求标识,生成数据库访问响应任务,并将该任务添加至工作队列;从工作队列中获取数据库访问响应任务,针对所获取的数据库访问响应任务,使用NIO方式向用户侧发送用户访问响应。7.一种数据库访问装置,其特征在于,该装置包括:用户访问请求接收模块...

【专利技术属性】
技术研发人员:刘晟东
申请(专利权)人:阿里巴巴集团控股有限公司
类型:发明
国别省市:开曼群岛,KY

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1