数据库连接复用方法和装置制造方法

文档序号:6487568阅读:123来源:国知局
数据库连接复用方法和装置制造方法
【专利摘要】本发明实施例公开了一种数据库连接复用方法和装置,涉及计算机【技术领域】,能够提高系统资源的利用率,从而提高系统总体的性能。本发明实施例的数据库连接复用方法,包括:第一进程接收客户端发送的第一连接请求信息,并将所述第一连接请求信息发送给第二进程;所述第二进程根据所述第一连接请求信息处理连接复用逻辑,得到包含目的数据库路径的第二连接信息,并将所述第二连接信息发送给第三进程;所述第三进程将所述第二连接信息发送给数据库管理系统,以使所述数据库管理系统根据所述第二连接信息返回请求的数据至所述客户端。
【专利说明】数据库连接复用方法和装置
【技术领域】
[0001]本发明涉及计算机【技术领域】,尤其涉及一种数据库连接复用方法和装置。
【背景技术】
[0002]SQL (Structured Query Language,结构化查询语言)是一种数据库查询和程序设计语言,用于存取数据以及管理关系数据库系统。MySQL是一种关系数据库管理系统,关系数据库基于关系数据模型将数据保存在不同的表中,在保证灵活性的同时又保持了一定的存取速度。
[0003]现有的MySQL中,通常采用基于线程的连接复用技术,即将数据库连接作为对象存储在一个容器中,数据库连接建立后,不同的数据库访问请求就可以共享这些数据库连接。基于线程的连接复用技术的主要机制如下:首先建立数据库连接池对象,并创建好指定数量的数据库连接;为数据库访问请求在连接池中寻找一个空闲的连接;如果无法在数据库连接池中找到空闲的数据库连接,且数据库连接的数量没有超过预设的阈值,则创建一个新的数据库连接。
[0004]复用已经建立的数据库连接,虽然能减少建立数据库连接的开销,但发明人发现这种复用技术至少具有如下缺点:由于每个客户端始终占用一个线程,如果客户端没有关闭或者断开该连接,则该连接一直不能被复用,这样往往会形成大量没有数据库操作的空闲时间,此外,线程的频繁创建和调度会加大系统资源的开销,影响了系统总体的性能。

【发明内容】

[0005]本发明的实施例所要解决的技术问题在于提供一种数据库连接复用方法和装置,能够提高系统资源的利用率,从而提高系统总体的性能。
[0006]为解决上述技术问题,本发明的实施例采用如下技术方案:
[0007]—种数据库连接复用方法,包括:
[0008]第一进程接收客户端发送的第一连接请求信息,并将所述第一连接请求信息发送给第二进程;
[0009]所述第二进程根据所述第一连接请求信息处理连接复用逻辑,得到包含目的数据库路径的第二连接信息,并将所述第二连接信息发送给第三进程;
[0010]所述第三进程将所述第二连接信息发送给数据库管理系统,以使所述数据库管理系统根据所述第二连接信息返回请求的数据至所述客户端;
[0011]所述第一进程、第二进程和所述第三进程之间的通信使用唯一的连接标识ID来标识每个连接。
[0012]所述第一进程与所述第二进程之间,以及所述第二进程与所述第三进程之间的通信方式均为异步通信方式。
[0013]在所述第一进程接收客户端发送的数据库连接请求后,还包括:
[0014]所述第一进程为每个连接分配唯一的连接标识ID(Identity)。[0015]所述数据库管理系统根据所述第二连接信息返回请求的数据至所述客户端,包括:
[0016]所述第三进程接收所述数据库管理系统返回的所述请求的数据,并将所述请求的数据发送给第二进程;
[0017]所述第二进程接收所述请求的数据,根据所述连接复用逻辑查找对应的所述客户端,并将所述请求的数据发送至所述第一进程,以使所述第一进程将所述请求的数据发送给所述客户端。
[0018]所述第一进程、第二进程和第三进程之间通过管道与共享内存进行进程间通信,所述第一进程将生成的所述ID发送至所述共享内存中,以使所述第二进程和第三进程从所述共享内存中读取所述ID。
[0019]所述数据库管理系统包括MySQL。
[0020]一种数据库连接复用装置,其特征在于,包括:
[0021]第一处理模块,用于接收客户端发送的第一连接请求信息,并将所述第一连接请求信息发送给第二处理模块;
[0022]第二处理模块,用于根据所述第一连接请求信息处理连接复用逻辑,得到包含目的数据库路径的第二连接信息,并将所述第二连接信息发送给第三处理模块;
[0023]第三处理模块,用于将所述第二连接信息发送给数据库管理系统,以使所述数据库管理系统根据所述第二连接信息返回请求的数据至所述客户端;
[0024]所述第一进程、第二进程和所述第三进程之间的通信使用唯一的连接标识ID来标识每个连接。
[0025]所述第一处理模块与所述第二处理模块之间,以及所述第二处理模块与所述第三处理模块之间的通信方式均为异步通信方式。
[0026]所述第一处理模块还用于为每个连接分配唯一的连接标识ID。
[0027]所述第一处理模块、第二处理模块和第三处理模块之间通过管道与共享内存进行进程间通信,所述第一处理模块将生成的所述ID发送至所述共享内存中,以使所述第二处理模块和第三处理模块从所述共享内存中读取所述ID。
[0028]所述数据库管理系统包括MySQL。
[0029]本发明实施例的数据库连接复用方法和装置,通过建立三个功能独立的进程来实现数据库连接的复用,与现有技术采用线程的方案相比,能够减小系统资源的开销,提高系统资源的利用率,从而提高系统总体的性能。
【专利附图】

【附图说明】
[0030]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0031]图1为本发明实施例中的数据库连接复用方法的流程示意图;
[0032]图2为本发明实施例中各进程的工作示意图;
[0033]图3为本发明实施例中第二进程的异步数据处理示意图;[0034]图4为本发明实施例中数据库连接复用装置的示意图。
【具体实施方式】
[0035]本发明实施例提供一种数据库连接复用方法和装置,能够提高系统资源的利用率,从而提高系统总体的性能。
[0036]以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、接口、技术之类的具体细节,以便透切理解本发明。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本发明。在其它情况中,省略对众所周知的装置、电路以及方法的详细说明,以免不必要的细节妨碍本发明的描述。
[0037]本实施例提供一种数据库连接复用方法,如图1和图2所示,该方法包括:
[0038]步骤101、第一进程接收客户端发送的第一连接请求信息,并将所述第一连接请求信息发送给第二进程。
[0039]本实施例的方法中,首先建立三个进程,即第一进程、第二进程和第三进程,三个进程之间通过管道与共享内存进行进程间通信,其中,第一进程主要负责处理与客户端之间的网络请求,第二进程主要负责处理连接复用逻辑,第三进程主要负责处理与数据库管理系统之间的网络请求。进程是一个“执行中的程序”,程序是一个没有生命的实体,只有处理器赋予程序生命时,它才能成为一个活动的实体,我们称其为进程。它可以申请和拥有系统资源,是一个活动的实体,进程一般通过程序计数器的值和处理寄存器的内容来表示。
[0040]另外,由于本实施例中将连接复用的过程分成三个进程来处理,每个进程负责不同的职能,因此,每个进程的性能更加稳定,进而使系统也更加稳定。
[0041]作为本发明的一种实施方式,数据库管理系统可以是MySQL,当然,也可以是其它的系统。以下是以数据库管理系统为MySQL为例,详细介绍本发明的数据库连接复用方法。
[0042]当客户端请求接入MySQL时,第一进程接收客户端发送的第一连接请求信息,并将所述第一连接请求信息发送给第二进程,其中,第一连接请求信息中包含需要接入的MySQL的地址等信息。
[0043]进一步的,在所述第一进程接收客户端发送的数据库连接请求后,还包括:所述第一进程为每个连接分配唯一的连接标识ID,第一进程、第二进程和所述第三进程之间的通信使用唯一的连接标识ID来标识每个连接。
[0044]第一进程为每个连接分配ID是为了区分每一个请求接入的客户端。另外第一进程还将生成的ID发送至共享内存中,以使第二进程和第三进程从所述共享内存中读取和使用该ID。
[0045]步骤102、所述第二进程根据所述第一连接请求信息处理连接复用逻辑,得到包含目的数据库路径的第二连接信息,并将所述第二连接信息发送给第三进程。
[0046]第二进程在接收到第一进程发送来的第一连接请求信息后,首先根据第一连接请求信息处理连接复用逻辑,得到包含目的数据库路径的第二连接信息,然后将第二连接信息发送给第三进程。“连接复用逻辑”即等待接入的客户端如何接入数据库管理系统,例如,假定MySQL最多允许20个客户端同时接入,而某一时刻有100个客户端等待接入,因此,第二进程将每5个等待接入的客户端划分为一组,每组中的成员排队等待接入。需要注意的是,在经过第二进程的连接复用逻辑处理后,包含在第一连接请求信息中的需要接入的MySQL的地址与目的数据库路径可能指向不同的MySQL,因为经过第二进程的连接逻辑复用处理后,会根据MySQL的使用等情况对目的数据库路径进行优化,以使MySQL具有最佳的
工作效率。
[0047]进一步的,如图3所示,第二进程经过连接逻辑复用处理后,准备进行数据传输。首先等待接收来自客户端的数据请求,在接收到该数据请求后,第二进程将该数据请求转发给第三进程,并等待第三进程返回数据结果:若接收到了来自第三进程的数据结果,且判断数据结果的传送未完成,则转发该数据结果给第一进程,并继续等待第三进程发送数据结果,直至数据结果传送完成;若等待第三进程返回数据结果超时或者连接被数据库管理系统关闭,则继续等待连接。此外,第二进程在等待数据请求的过程中,若等待超时或者连接被数据库管理系统关闭,同样继续等待连接。
[0048]进一步的,所述第一进程与所述第二进程之间,以及所述第二进程与所述第三进程之间的通信方式均为异步通信方式。
[0049]异步通信是指在发送字符时,所发送的字符之间的时隙可以是任意的,当然,接收端必须时刻做好接收的准备。发送端可以在任意时刻开始发送字符,因此必须在每一个字符的开始和结束的地方加上标志,即加上开始位和停止位,以便接收端能够正确地将每一个字符接收下来。作为本发明实施例的一种实施方式,第一进程向第二进程发送第一连接请求信息时,可以将第一连接请求信息以帧作为发送单位,第二进程必须随时做好接收帧的准备。这时,帧的首部必须设有一些特殊的比特组合,使得第二进程能够找出每一帧数据的开始,也称帧定界,帧定界还包含确定帧的结束位置,例如在帧的尾部设有某种特殊的比特组合来标志帧的结束,或者在帧首部中设有帧长度的字段。需要注意的是,在异步发送帧时,并不要求第一进程对帧中的每一个字符都必须加上开始位和停止位后再发送出去,而是说,第一进程可以在任意时间发送一个帧,而帧与帧之间的时间间隔也可以是任意的,每一帧数据中的所有比特是连续发送的。第一进程不需要在发送一帧之前和第二进程进行协调(不需要先进行比特同步)。第二进程向第三进程发送第二连接信息的原理同上,在此不再赘述。
[0050]步骤103、所述第三进程将所述第二连接信息发送给数据库管理系统,以使数据库管理系统根据所述第二连接信息返回请求的数据至所述客户端。
[0051]第三进程接收第二进程发送来的第二连接信息,然后再将第二连接信息发送给MySQL0 MySQL根据第二连接信息读取数据并返回客户端请求的数据至所述第三进程。第三进程在接收到请求的数据后,将请求的数据以异步通信的方式发送给第二进程;第二进程接收所述请求的数据,根据所述连接复用逻辑查找对应的所述客户端,并将所述请求的数据发送至所述第一进程,以使所述第一进程将所述请求的数据发送给所述客户端。
[0052]另外,在各个进程将请求的数据发送给客户端完成后,或者因MySQL发送数据出错出现超时或数据库关闭时,第一进程或者第二进程可以关闭该客户端的连接,以节省系统资源。
[0053]本实施例的数据库连接复用方法,通过建立三个功能独立的进程来实现数据库连接的复用,与现有技术采用线程的方案相比,能够减小系统资源的开销,提高系统资源的利用率,从而提高系统总体的性能。
[0054]与上述方法实施例相对应的,本实施例还提供一种数据库连接复用装置,如图4所示,包括:
[0055]第一处理模块1,用于接收客户端发送的第一连接请求信息,并将所述第一连接请求信息发送给第二处理模块;
[0056]第二处理模块2,用于根据所述第一连接请求信息处理连接复用逻辑,得到包含目的数据库路径的第二连接信息,并将所述第二连接信息发送给第三处理模块;
[0057]第三处理模块3,用于将所述第二连接信息发送给数据库管理系统,以使所述数据库管理系统根据所述第二连接信息返回请求的数据至所述客户端;
[0058]其中,所述第一进程、第二进程和所述第三进程之间的通信使用唯一的连接标识ID来标识每个连接。
[0059]进一步的,所述第一处理模块I与所述第二处理模块2之间,以及所述第二处理模块2与所述第三处理模块3之间的通信方式均为异步通信方式。
[0060]进一步的,所述第一处理模块I还用于为每个连接分配唯一的连接标识ID。
[0061]所述第一处理模块1、第二处理模块2和第三处理模块3之间通过管道与共享内存进行进程间通信,所述第一处理模块I将生成的所述ID发送至所述共享内存中,以使所述第二处理模块2和第三处理模块3从所述共享内存中读取所述ID。
[0062]进一步的,所述数据库管理系统包括MySQL。
[0063]本实施例中各模块的工作原理和工作过程同上述方法实施例,在此不再赘述。
[0064]本实施例的数据库连接复用装置,通过建立三个功能独立的处理模块来实现数据库连接的复用,与现有技术采用线程的方案相比,能够减小系统资源的开销,提高系统资源的利用率,从而提高系统总体的性能。
[0065]所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0066]在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0067]所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0068]另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0069]所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM, Read-Only Memory)、随机存取存储器(RAM, Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0070]以上所述,仅为本发明的【具体实施方式】,但本发明的保护范围并不局限于此,任何熟悉本【技术领域】的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
【权利要求】
1.一种数据库连接复用方法,其特征在于,包括: 第一进程接收客户端发送的第一连接请求信息,并将所述第一连接请求信息发送给第二进程; 所述第二进程根据所述第一连接请求信息处理连接复用逻辑,得到包含目的数据库路径的第二连接信息,并将所述第二连接信息发送给第三进程; 所述第三进程将所述第二连接信息发送给数据库管理系统,以使所述数据库管理系统根据所述第二连接信息返回请求的数据至所述客户端; 所述第一进程、第二进程和所述第三进程之间的通信使用唯一的连接标识ID来标识每个连接。
2.根据权利要求1所述的数据库连接复用方法,其特征在于,所述第一进程与所述第二进程之间,以及所述第二进程与所述第三进程之间的通信方式均为异步通信方式。
3.根据权利要求1或2所述的数据库连接复用方法,其特征在于,在所述第一进程接收客户端发送的数据库连接请求后,还包括: 所述第一进程为每个连接分配唯一的连接标识ID。
4.根据权利要求1或2所述的数据库连接复用方法,其特征在于,所述数据库管理系统根据所述第二连接信息返回请求的数据至所述客户端,包括: 所述第三进程接收所述数据库管理系统返回的所述请求的数据,并将所述请求的数据发送给第二进程; 所述第二进程接收所述请求的数据,根据所述连接复用逻辑查找对应的所述客户端,并将所述请求的数据发送至所述第一进程,以使所述第一进程将所述请求的数据发送给所述客户端。
5.根据权利要求3所述的数据库连接复用方法,其特征在于,所述第一进程、第二进程和第三进程之间通过管道与共享内存进行进程间通信,所述第一进程将生成的所述ID发送至所述共享内存中,以使所述第二进程和第三进程从所述共享内存中读取所述ID。
6.根据权利要求1-5任一项所述的数据库连接复用方法,其特征在于,所述数据库管理系统包括MySQL。
7.一种数据库连接复用装置,其特征在于,包括: 第一处理模块,用于接收客户端发送的第一连接请求信息,并将所述第一连接请求信息发送给第二处理模块; 第二处理模块,用于根据所述第一连接请求信息处理连接复用逻辑,得到包含目的数据库路径的第二连接信息,并将所述第二连接信息发送给第三处理模块; 第三处理模块,用于将所述第二连接信息发送给数据库管理系统,以使所述数据库管理系统根据所述第二连接信息返回请求的数据至所述客户端; 所述第一进程、第二进程和所述第三进程之间的通信使用唯一的连接标识ID来标识每个连接。
8.根据权利要求7所述的数据库连接复用装置,其特征在于,所述第一处理模块与所述第二处理模块之间,以及所述第二处理模块与所述第三处理模块之间的通信方式均为异步通信方式。
9.根据权利要求7或8所述的数据库连接复用装置,其特征在于,所述第一处理模块还用于为每个连接分配唯一的连接标识ID。
10.根据权利要求9所述的数据库连接复用装置,其特征在于,所述第一处理模块、第二处理模块和第三处理模块之间通过管道与共享内存进行进程间通信,所述第一处理模块将生成的所述ID发送至所述共享内存中,以使所述第二处理模块和第三处理模块从所述共享内存中读取所述ID。
11.根据权利要求7-10任一项所述的数据库连接复用装置,其特征在于,所述数据库管理系统包括 MySQL。
【文档编号】G06F17/30GK103577469SQ201210275184
【公开日】2014年2月12日 申请日期:2012年8月3日 优先权日:2012年8月3日
【发明者】程彬, 李宇 申请人:深圳市腾讯计算机系统有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1