CN1510575A - 一种数据库连接的高效管理方法 - Google Patents
一种数据库连接的高效管理方法 Download PDFInfo
- Publication number
- CN1510575A CN1510575A CNA021399484A CN02139948A CN1510575A CN 1510575 A CN1510575 A CN 1510575A CN A021399484 A CNA021399484 A CN A021399484A CN 02139948 A CN02139948 A CN 02139948A CN 1510575 A CN1510575 A CN 1510575A
- Authority
- CN
- China
- Prior art keywords
- connection
- affairs
- connect
- numeration
- pool
- 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.)
- Granted
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种在数据库应用开发中对数据库连接进行高效管理进而实现数据库连接复用的方法,通过建立用于存放数据库连接的连接池,配置该连接池初始化时应放置的连接生成数目和每个连接的最大可复用数;对建立的连接池进行初始化,按所配置的连接生成数目建立连接、设置非事务属性并放入连接池中;在连接池中,对每一个普通连接请求,建立及分配使之能被复用;在连接池中,利用事务处理方法来建立、分配并使用事务连接,保持其唯一性、一致性并且支持嵌套事务;在连接池中,回收使用完的连接使之可复用。从而有效地解决了连接使用不当和连接无法复用的问题,也提高了数据库的使用效率,从而可以得到较高的安全性和可靠性以及高性能的应用。
Description
技术领域
本发明涉及数据库应用开发,具体涉及一种核心思想是连接复用的数据库连接管理方法,更具体地说,涉及一种数据库连接的高效管理方法。
背景技术
在数据库应用开发中,连接的管理是一个难点,它是决定该应用性能的一个重要因素。连接管理包括对建立、使用和关闭连接的管理,刚开始由于对数据库的访问不是很频繁,传统连接管理采用需要时就建立、用完就关闭的策略,主要分为分布式事务和工作线程2种管理方式。其中,建立连接是指应用开始访问DB前向DBMS提出连接申请并由DBMS建立相应的连接;使用连接是指应用占用连接来访问和使用数据库;回收连接是指在应用访问结束后,根据情况释放或者回收该应用所使用的连接。
事务方式仅仅提供了对分布式事务的管理方法,将应用内化为全局事务,将应用对连接的使用,转化为通过全局事务获取和关闭连接。1999年6月14日提交的申请号为333141的美国专利,公开了一种使用JDBC1.0驱动支持分布式事务的方法,它提供了一种基于JDBC1.0支持分布式事务的方法,不是为每一个连接请求分配一个新的物理连接,而是在内部为全局事务和它们使用的连接维护一张映射表。由于这种方式是基于事务的,而在这种方式中,事务获取和关闭连接不具备对连接的有效利用,因此即使在一个事务中对数据库有多个连接请求,仍然保持对同一条连接的使用,造成了资源浪费。
另一种管理是用线程方式将对应用内化为工作线程,从而将应用对连接的使用,转化为通过工作线程获取和关闭连接。2000年7月7日提交的申请号为611604的美国专利,公开了一种对数据库管理系统的连接进行管理的方法和系统,每个数据库管理系统对应一个数据库系统,其中建有一系列的工作线程,将对数据库的请求分配到这些工作线程上去执行,也包括将特定的连接,工作线程和已用过的数据库子系统连接起来。这种线程方式充分利用了计算机线程管理的优势,大大提高了执行效率,也很大程度提高了应用性能,但由于这种方式是基于线程的,而在这种方式中线程获取和关闭连接也不具备对连接的有效利用,因此,一旦出现同一工作线程对同一数据库子系统的调用,就仍然使用同一连接,造成了效率低下。
对上述两种连接管理技术进行分析,分别存在如下缺陷:1)同一工作线程对同一子系统的同一连接的使用或同一事务对数据库同一条连接的使用,都等于是为该应用或子应用分配固定连接,而不管该连接的真正的使用情况,没有从整体上对连接进行管理,使得连接的使用效率不高;2)有建立和关闭连接,但没有用于判断需要建立和关闭连接的条件,没有建立、分配、使用和回收连接的方法以及策略,从而没有合理使用连接;3)不能复用连接;4)没有涉及对分配和回收连接的管理。
发明内容
本发明要解决的技术问题是提供一种可以克服上述现有技术缺点的数据库连接的管理方法,采用模块封装技术、连接池设计模式、连接管理方法和事务处理方法,为普通连接的复用及事务连接的一致性管理提供了有效方法,从而能复用和合理使用连接,减少连接建链的握手开销,提高数据库使用效率;保证事务的连接在组成事务的方法中的一致性;减少数据库建立链接的细节产生的耦合,使模块便于维护;为得到安全,高可靠性,高性能的应用提供连接管理保证。所述的模块封装技术是指将对连接资源的按策略回收分配,复用以及连接池初始化等一系列策略封装在模块内部。
本发明上述技术问题可以这样解决,构造一种数据库连接的高效管理方法,包括以下步骤:
1.1)建立用于存放数据库连接的连接池,配置该连接池初始化时应放置的连接生成数目和每个连接的最大可复用数;
1.2)对建立的连接池进行初始化,按所配置的所述连接生成数目建立连接、设置非事务属性并放入所述连接池中;
1.3)在所述连接池中,对每一个普通连接请求,建立及分配使之能被复用;
1.4)在所述连接池中,利用事务处理方法来建立、分配并使用事务连接,保持其唯一性、一致性并且支持嵌套事务;
1.5)在所述连接池中,回收使用完的数据库连接使之可被再使用。
在上述按照本发明提供的方法中,对新建连接进行初始化,其中,所述初始化包括以下步骤:
2.1)设置该连接的非事务属性;
2.2)为普通连接提供一个引用的记数,为事务连接提供嵌套层次的记数;
2.3)为事务连接提供显式的事务开始、结束声明和以及一个事务注册表。
在上述按照本发明提供的方法中,所述步骤(1.3)包括以下步骤:判断连接池是否存在空闲连接,如有空闲连接,则直接分配该连接,开始引用记数;如不存在,则判断是否有可被复用的连接,如有可复用连接则直接分配到引用记数最小的连接,同时递增该连接的引用记数;否则,建立和分配新的连接,同时初始化该连接。
在上述按照本发明提供的方法中,根据步骤(1.4)包括启动事务使之获得连接,以及提交和回退事务使之释放连接的步骤。
在上述按照本发明提供的方法中,所述步骤(1.5)包括以下步骤:判断连接池是否是满的,如连接池已满关闭该连接;否则,将该连接放入连接池。
在上述按照本发明提供的方法中,对数据库的连接和连接管理进行封装。
在上述按照本发明提供的方法中,为每个连接提供一个引用记数和为每个连接配置一个的最大可复用数,是在每次使用普通连接时都递增该连接的引用记数;选择所述引用记数最小的连接作为可用连接,当该连接引用记数小于最大可复用数,判断为可复用的连接;复用连接时,不区分初始化时建立的连接和程序运行时被重新建立出来的连接,最大效用地复用已经被建立出来的连接。
在上述按照本发明提供的方法中,为连接池配置初始化时应放置的连接生成数目,当连接池中连接的数小于上述配置数目时,判断连接池未满。
在上述按照本发明提供的方法中,所述启动事务步骤包括判断该事务是否已存在有连接,如存在连接,仍然分配该连接并递增其嵌套层次记数;否则,判断是否有空闲连接,如有空闲连接,分配空闲连接;否则,建立和分配新连接。
在上述按照本发明提供的方法中,所述提交和回退事务步骤包括判断是是否属于嵌套事务,如属于则递减连接的嵌套层次;否则回退事务;其中回退事务包括以下步骤:
10.1)恢复连接的非事务属性;
10.2)删除事务注册表中该事务的发起者和使用的事务连接对应关系的记录;
10.3)回收该连接。
在上述按照本发明提供的方法中,为每个事务连接提供一个事务注册表,建立时将事务发起者所在的线程号和事务使用的连接的对应关系登记到事务注册表,结束时删除对应关系;事务在事务注册表中无对应关系,判断该事务没有连接。
在上述按照本发明提供的方法中,为每个事务连接提供嵌套层次的记数,建立时开始记数,每使用一次递增,每用完一次递减;嵌套层次的记数大于1,判断该事务为嵌套连接。
在上述按照本发明提供的方法中,连接池建立初始连接时设置非事务属性、分配新的空闲连接时初始化连接,回收普通连接时保持非事务属性和事务回退时恢复非事务属性,保证空闲连接都是非事务属性,不分事务连接和普通连接,使分配空闲连接时,事务连接和普通连接都能使用所有空闲连接。
实施本发明提供的数据库连接的高效管理方法,可应用于各种数据库应用开发中。与传统的事务和线程的连接管理方法相比,传统方法对连接需要时就建立,用完就关闭的方式和通过线程和全局事务直接对数据库打开关闭操作的方式,缺乏连接管理和模块隔离,不能复用,而本发明提供的对连接的分配,回收,以及事务连接管理一致性等管理特性可以方便地作为单独的模块加入到整个系统中,将开发数据库业务应用对数据库的交互全都放在该发明提供的处理模块内部,能够做到高效,安全的连接复用,并且有效地解决了连接的滥用及回收,极大地提高了效率。对该发明提供的方法作成的连接管理模块和以往对连接的应用做过效率上的测试比对,发现在连接管理的安全,可靠性及效率方面,都比以往有了很大的提高,实用性强。
附图说明
图1是利用本发明提供的数据库连接的高效管理方法,建立、分配和使用普通连接的流程示意图。
图2是利用本发明提供方法,通过事务处理方法启动事务的流程示意图。
图3是本发明提供方法,通过事务处理方法提交和回退事务的流程示意图。
图4是利用本发明提供方法,回收连接的流程示意图。
具体实施方式
结合下面对本发明方法进一步展开,说明发明方法的主要基础点如下:
1)建立连接池存放管理连接;该连接池可以根据具体应用提供该连接池初始化时应放置的连接数目生成,程序中动态生成的连接也放入连接池,应用从连接池中获取连接池新建或分配的连接,连接使用完,由连接池回收或释放连接,连接池为连接整体管理奠定基础。
2)把连接分为事务连接和普通连接二类,并针对普通连接和事务连接不同特点对事务连接和普通连接管理采取不同的方法:
3)建立、分配和使用普通连接,复用已有的普通连接;
4)通过事务处理方法来建立、分配和使用事务连接,保证事务数据库连接的一致和支持嵌套事务,最后回收连接,使连接能被重复利用,从而能安全地复用、整体地管理和有效地使用连接,既复用普通连接,又保证事务数据库连接的一致和支持嵌套事务,提高了数据库使用效率。
5)封装数据库原始连接和连接管理,即把连接和连接管理封装在该发明提供的数据库模块内部,隔离应用的本身的处理逻辑和具体数据库访问逻辑,减小和其他模块之间的耦合性,为应用本身的复用奠定基础;同时方便了应用对于连接尤其是对于事务连接的使用,提高了开发效率。
6)分配空闲连接是申请连接时不区分事务连接和普通连接,而将其一致对待,避免当事务连接被申请,而事务连接已被用空,虽有空闲的普通连接,却不能使用的情况;反之当普通连接被申请,而普通连接已被用空,虽有空闲的事务连接,却不能使用的情况。
7)本发明方法中复用普通连接和有效使用连接的策略是:不区分初始化时建立的(静态连接)和程序运行时被重新建立出来的(动态连接),一、根据具体情况,设置最大可复用数,复用可被复用的连接。只要是已被建立的连接,当连接引用记数小于最大可复用数,就可以被复用。所述引用记数是普通连接已被复用的次数;最大可复用数是系统配置的连接最大复用数。二、根据具体情况,设置连接池初始连接的配置数,回收应该被回收的连接。当被用完的连接被释放时,只要连接池中的连接数未达到该配置,就将该连接回收,以备后用。所述连接池初始连接的配置数在一个具体应用上可以决定使用空闲连接的频率和建立连接的频率。通过连接的最大可复用数和连接池初始连接的配置数,保证了连接的复用效率和使用效率。
8)事务处理方法包括启动事务,提交和回退事务。对于事务,通过事务处理方法来处理,使事务不直接获得对连接的管理,保证事务对所用连接的唯一性,为其他模块启动事务提供方便;同时可以按其他方式组织事务,也可以调用已实现的方法来组织事务,甚至可以在事务中调用事务方法组成嵌套事务。事务连接的分配,回收以及连接上操作的一致提交,回退和组成事务操作使用的连接的唯一性都由事务处理方法保证。这时既满足了事务对连接的要求又不防碍连接复用,实现了安全复用。
本发明提出了一种高效的数据库连接复用方法,分各个步骤逐个说明如下:
步骤1:建立和初始化连接池
第1步在系统(DBMS)初始化时建立一个连接池,该连接池根据具体系统使用用配置该连接池初始化时应放置的连接生成数目,同时配置每个连接可达的最大复用数。第2步初始化连接池,即系统在第一次得到连接请求时,连接请求包括普通连接的和事务连接的,系统会对连接池进行初始化,按照配置的连接数目建立连接并放入连接池中。
步骤2:用连接池管理方法建立、分配和初始化以及使用连接。初始化连接具体是指,在分配空闲或新连接时,设置该连接的类型,是普通连接,设置非事务属性,提供一个引用的记数,是事务连接,设置事务属性,提供嵌套层次的记数同时为该事务连接提供了显式的事务开始、结束(commit或者rollback)声明和以及一个事务注册表。上述事务注册表,登记了事务发起者和事务使用的连接的对应关系,保证了事务使用连接的一致性。该表是在运行时根据实际的调用情况动态生成的,通过该表隔离了处理事务的部分和连接管理部分。本发明中事务使用的连接在该事务运行中唯一使用、不能被复用的。
如图1所示,利用本发明的方法,用避免每个连接建链握手开销的连接池管理方法建立、分配和初始化以及复用普通连接:图中“圆点开始标记”表示当应用请求普通连接时,进入第1步;第1步查看连接池是否已经初始化。否,先初始化连接池,再进入第2步;是,则直接进入第2步。第2步查询事务注册表中是否有该调用者的记录。是,说明对普通连接的请求是组成事务的一部分,应该保证该连接的一致性,所以返回在该事务注册表中该调用者登记的连接;否,则进入第3步。第3步查询连接池中是否有未被使用的空闲连接。是,返回其中的一个空闲连接并开始该连接的引用记数;否,则进入第4步。第4步查询是否有可复用的连接,即是否有连接引用的记数没有达到最大复用记数的连接。否,建立一个新的连接,并且对这个连接开始引用记数;是,则在连接池中找出一个引用记数最小并且没有达到最大引用记数的连接,复用该连接并将它的引用记数加一。复用连接是指,首先有可被复用的连接,不区分初始化时建立的连接(静态连接)和程序运行时被重新建立出来的连接(动态连接),只要不是空闲的连接,不管他是普通连接还是事务连接,只要未被占用,就将它弹出堆栈(连接池),判断是普通连接,判断引用记数最小,复用该连接。
进一步,如图2、图3所示,利用启动、提交和回退的事务处理方式调用连接池管理方法建立、分配和初始化以及唯一使用事务连接,对事务的连接在组成事务的方法中的一致性给予了保证,并且提供了对嵌套事务的支持。
如图2所示,启动事务:图中“圆点开始标记”表示当应用请求事务连接时,进入第1步;第1步查看连接池是否已经初始化。否,先初始化连接池,进入第2步;是,则直接进入第2步。第2步查看事务注册表中是否有该事务发起者的注册使用的连接。是,说明这是一个嵌套事务,返回事务注册表中该事务发起者使用的连接并将事务连接的嵌套层次记数递增;否,则进入第3步。第3步查询连接池中是否有未被使用的空闲连接。是,直接进入第4步;否,则建立一个新的连接,再进入第4步。第4步登记事务发起者所在的线程号和事务使用的连接的对应关系到事务注册表,同时开始事务的嵌套层次记数和设置该事务连接的相应属性。后面的同一事务对数据库的所有访问都是通过查找该注册表,使用已经分配的连接来完成的,这样就保证了该事务中所有操作使用同一个数据库连接。
如图3所示,提交和回退事务:图中“圆点开始标记”表示当事务的所有任务完成后,进入调用提交和回退事务步骤。首先从事务连接调用值获得该事务使用的连接,再查看事务注册表中该事务使用的连接的类型和嵌套层次,当该连接为NULL或者其嵌套层次大于1,则使用该连接的是嵌套事务,将该连接的嵌套层次递减;当该连接存在且嵌套层次小于等于1,则使用该连接的不是嵌套事务,提交在该连接上完成的所有操作到数据库,从事务连接调用值对中去除该连接号,恢复该连接的非事务属性,同时将该事务的发起者和使用的事务连接对从事务注册表中删除,然后调用连接池回收连接的管理方法回收该连接。步骤3:用连接池管理方法回收连接。
如图4所示,提交和回退事务:图中“圆点开始标记”表示连接使用完后,进入第1步;第1步查看连接是否为空或者已经被关闭。是,调用返回;不是进入第2步。第2步查看事务连接注册表中,事务是否由一系列已有的数据库方法构成即是否存在该连接。是,调用返回;不是进入第3步。第3步查看该连接是否存在其他的引用者,即查看事务注册表中,是否有该连接的回收者的登记。是,说明该数据库方法被一个事务所调用,而事务的结束由事务提交或事务回退完成,所以此时除递减引用记数外不做其他处理,调用返回;否,检查该连接的引用记数,大于等于1,则说明还有引用者,调用失败返回。小于1,则从当前被使用的结构中取出,准备回收,进入第4步。第4步查看连接池中的连接数目是否已经达到初始设定的数目。否,将该连接放入连接池中;是,将该连接关闭,回收。关闭连接是指,不区分初始化时建立的连接(静态连接)和程序运行时被重新建立出来的连接(动态连接),当被用完的连接被释放时,只要堆栈(连接池)中的连接数未达到初始配置的连接数目,而不由于它是动态连接,就将它关闭,而是将它推入堆栈,以备后用。
下面用JAVA语言实现的一个例子来说明本发明。一利用JAVA提供的面向对象的设计方法定义本发明的对象层次结构:建立连接池父对象(比如定义为ConpoolClass)和连接子对象(比如定义为ConnClass)、事务注册表父对象(比如定义为AfregClass)和事务子对象(比如定义为AffClass)。二利用这种面向对象设计方法和JAVA语言定义、描述本发明对象提供的功能和属性:定义连接池对象的所含连接数属性(比如定义为lnkNum)、初始化连接数(比如定义为beginNum)、普通连接最大复用数(比如定义为muxNum)和建立(create())方法、初始化操作(利用构造函数)方法以及使用synchronized关键字定义连接池管理方法包括新建连接(比如定义为creatConn())、获取普通连接(比如定义为getCommConn())、释放复用的普通连接(比如定义为releaseMuxConn())和回收连接(比如定义为releaseConn())的方法,保证安全复用普通连接。定义连接对象的非事务属性(比如定义为commTrue)、占用属性(比如定义为usedTrue)普通连接对象的引用记数属性或事务连接的嵌套层次(比如定义为usedNum)和连接初始化操作(利用构造函数)方法。定义事务注册表对象(比如定义为affRecord)的记录属性,该记录属性是记录了事务的发起者、使用的事务连接(含连接、连接类型及嵌套层次)以及它们间对应关系;以及定义事务注册表对象的事务开始的登记事务(比如定义为regRecord())和事务结束声明的注销事务(比如定义为delRecord())的方法。定义事务对象的连接调用属性(比如定义为usedLink)、事务处理方法包括启动事务(比如定义为beginTrans())、提交和回退事务(比如定义为endTrans())的方法。三通过以上用面向对象方法建立的对象和方法,按以下步骤实现本发明:
系统初始化时调用Connpool.create(thePool)方法为一个数据库创建一个连接池对象thePool,设置thePool.beginNum和thePool.muxNum,并设置数据库对象的连接池存在标示poolI:=False,同时调用AffRecord.Create(theRecord)创建一个事务注册表对象;当系统第一次得到该数据库的连接请求(见下),调用构造函数初试化该连接池thePool,并设置数据库对象的连接池存在标示poolI:=True;其中在这个方法中调用连接池方法,thePool.createConn()按thePool.beginNum数目创建连接子对象ConnClassN(1≤N≤beginNum),设置ConnClassN.usedTrue:=False,连接压入连接池堆栈。
进一步,普通连接请求管理:应用请求普通连接,判断poolI=False,调用构造函数初试化thePool;poolI=True,查询theRecord有该应用,应用调用thePool.getCommConn()返回theRecord记录的连接号的连接;没有,判断thePool.ConnClassM.usedTrue=Flase(1≤M≤lnkNum),应用调用thePool.getCommConn(thePool.ConnClassM)选用它;所有连接usedTrue都为True,选用最小的thePool.ConnClassM.usedNum,判断thePool.ConnClassM.usedNum<thePool.muxNum,调用thePool.getCommConn(thePool.ConnClassM)选用它;若最小的thePool.ConnClassM.usedNum≥thePool.muxNum,thePool.Create(ConnClassK),(lnkNum:=lnkNum+1,K:=lnkNum)建立新连接,再调用thePool.getCommConn(thePool.ConnClassK)。
进一步,启动事务:应用请求事务连接,该应用对应的事务对象为AffClassN(N为自然数),判断poolI=False,调用构造函数初试化thePool;poolI:=True,查询theRecord有该应用,找到连接号,调用AffClassN.beginTrans()返回theRecord记录的连接号的连接;没有,判断thePool.ConnClassM.usedTrue=Flase(1≤M≤lnkNum),应用调用AffClassN.beginTrans(thePool.ConnClassM)选用它;所有连接usedTrue都为True,thePool.Create(ConnClassK),(lnkNum:=lnkNum+1,K:=lnkNum)建立新连接,调用theRecord.regRecord(ConnClassK,事务号)登记,调用AffClassN.beginTrans(thePool.ConnClassK)选用,设置AffClassN.usedLink:=thePool.ConnClassK。
进一步,提交、回退事务:事务所有任务完成,调用AffClassN.endTrans(),其中包括从该事务AffClassN.beginTrans()的thePool.ConnClass参数获得连接号,根据连接号查询theRecord中的连接ConnClassX,是嵌套事务调用AffClassN.endTrans();不是,设置AffClassN.usedLink:=NULL,ConnClass.commTrue:=True,调用theRecord.delRecord(AffClassN)取消登记,调用thePool.releaseConn(ConnClassX)回收连接。
进一步,回收连接:连接ConnClassX使用完后,调用thePool.releaseConn(ConnClassX)方法。ReleaseConn()包括:判断连接占用ConnClassX.usedTrue=True,返回;ConnClassX.usedTrue=False,判断连接类型,一种事务由一系列已有的数据库方法构成情况即theRecord中有该连接,返回;一种是事务调用的连接,调用该事务AffClassX.endTrans();一种ConnClassX.commTrue:=True,判断ConnClass.usedNum>1,调用thePool.releaseMuxConn(ConnClassX);判断ConnClass.usedNum≤1,判断thePool.lnkNum>thePool.beginNum,调用释构函数释放该连接ConnClassX;否则,设置ConnClassX.usedTrue:=False。
本发明提供的具体实现方式中所述系统是指数据库管理系统DBMS。
Claims (13)
1.一种数据库连接的高效管理方法,其特征在于,包括以下步骤:
1.1)建立用于存放数据库连接的连接池,配置该连接池初始化时应放置的连接生成数目和每个连接的最大可复用数;
1.2)对建立的连接池进行初始化,按所配置的所述连接生成数目建立连接、设置非事务属性并放入所述连接池中;
1.3)在所述连接池中,对每一个普通连接请求,建立及分配使之能被复用;
1.4)在所述连接池中,利用事务处理方法来建立、分配并使用事务连接,保持其唯一性、一致性并且支持嵌套事务;
1.5)在所述连接池中,回收使用完的数据库连接使之可被再使用。
2.根据权利要求1所述方法,其特征在于,对新建连接进行初始化,其中,所述初始化包括以下步骤:
2.1)设置该连接的非事务属性;
2.2)为普通连接提供一个引用的记数,为事务连接提供嵌套层次的记数;
2.3)为事务连接提供显式的事务开始、结束声明和以及一个事务注册表。
3.根据权利要求1所述方法,其特征在于,所述步骤(1.3)包括以下步骤:判断连接池是否存在空闲连接,如有空闲连接,则直接分配该连接,开始引用记数;如不存在,则判断是否有可被复用的连接,如有可复用连接则直接分配到引用记数最小的连接,同时递增该连接的引用记数;否则,建立和分配新的连接,同时初始化该连接。
4、根据权利要求1所述方法,其特征在于,根据步骤(1.4)包括启动事务使之获得连接,以及提交和回退事务使之释放连接的步骤。
5、根据权利要求1所述方法,其特征在于,所述步骤(1.5)包括以下步骤:判断连接池是否是满的,如连接池已满关闭该连接;否则,将该连接放入连接池。
6.根据权利要求1-5中任何一项所述方法,其特征在于,对数据库的连接和连接管理进行封装。
7、根据权利要求1、2、3所述方法,其特征在于,为每个连接提供一个引用记数和为每个连接配置一个的最大可复用数,是在每次使用普通连接时都递增该连接的引用记数;选择所述引用记数最小的连接作为可用连接,当该连接引用记数小于最大可复用数,判断有可复用的连接;复用连接时,不区分初始化时建立的连接和程序运行时被重新建立出来的连接,最大效用地复用已经被建立出来的连接。
8、根据权利要求1或5所述方法,其特征在于,为连接池配置初始化时应放置的连接生成数目,当连接池中连接的数小于上述配置数目时,判断连接池未满。
9、根据权利要求4所述方法,其特征在于,所述启动事务步骤包括判断该事务是否已存在有连接,如存在连接,仍然分配该连接并递增其嵌套层次记数;否则,判断是否有空闲连接,如有空闲连接,分配空闲连接;否则,建立和分配新连接。
10、根据权利要求4所述方法,其特征在于,所述提交和回退事务步骤包括判断是是否属于嵌套事务,如属于则递减连接的嵌套层次;否则回退事务;其中回退事务包括以下步骤:
10.1)恢复连接的非事务属性;
10.2)删除事务注册表中该事务的发起者和使用的事务连接对应关系的记录;
10.3)回收该连接。
11、根据权利要求2、9、10中任何一项所述方法,其特征在于,为每个事务连接提供一个事务注册表,建立时将事务发起者所在的线程号和事务使用的连接的对应关系登记到事务注册表,结束时删除对应关系;事务在事务注册表中无对应关系,判断该事务没有连接。
12、根据权利要求11所述方法,其特征在于,为每个事务连接提供嵌套层次的记数,建立时开始记数,每使用一次递增,每用完一次递减;嵌套层次的记数大于1,判断该事务为嵌套连接。
13、根据权利要求1、2、10中任何一项所述方法,其特征在于,连接池建立初始连接时设置非事务属性、分配新的空闲连接时初始化连接,回收普通连接时保持非事务属性和事务回退时恢复非事务属性,保证空闲连接都是非事务属性,不分事务连接和普通连接,使分配空闲连接时,事务连接和普通连接都能使用所有空闲连接。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB021399484A CN1317653C (zh) | 2002-12-25 | 2002-12-25 | 一种数据库连接的高效管理方法 |
AU2003289602A AU2003289602A1 (en) | 2002-12-25 | 2003-11-28 | A method for administrating database connection |
BR0317733-5A BR0317733A (pt) | 2002-12-25 | 2003-11-28 | Processo para administração de conexão de base de dados |
PCT/CN2003/001016 WO2004059906A1 (fr) | 2002-12-25 | 2003-11-28 | Procede d'administration de connexions a une base de donnees |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB021399484A CN1317653C (zh) | 2002-12-25 | 2002-12-25 | 一种数据库连接的高效管理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1510575A true CN1510575A (zh) | 2004-07-07 |
CN1317653C CN1317653C (zh) | 2007-05-23 |
Family
ID=32661076
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB021399484A Expired - Lifetime CN1317653C (zh) | 2002-12-25 | 2002-12-25 | 一种数据库连接的高效管理方法 |
Country Status (4)
Country | Link |
---|---|
CN (1) | CN1317653C (zh) |
AU (1) | AU2003289602A1 (zh) |
BR (1) | BR0317733A (zh) |
WO (1) | WO2004059906A1 (zh) |
Cited By (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100395710C (zh) * | 2005-05-27 | 2008-06-18 | 华为技术有限公司 | 一种多线程应用程序访问数据库的方法 |
CN100458790C (zh) * | 2006-12-31 | 2009-02-04 | 中国建设银行股份有限公司 | 访问数据库的方法和系统 |
CN1815469B (zh) * | 2005-02-01 | 2010-04-28 | 华为技术有限公司 | 一种数据库连接资源的管理方法 |
CN1758606B (zh) * | 2004-10-08 | 2010-06-16 | 国际商业机器公司 | 用于自主管理连接池的方法和设备 |
CN101777047A (zh) * | 2009-01-08 | 2010-07-14 | 国际商业机器公司 | 多租户环境下访问数据库的系统、设备和方法 |
WO2010148966A1 (zh) * | 2009-11-26 | 2010-12-29 | 中兴通讯股份有限公司 | 一种网管数据同步的实现方法及装置 |
CN101261640B (zh) * | 2005-02-21 | 2011-01-19 | 兄弟工业株式会社 | 内容提供系统、输出控制设备和输出控制程序 |
CN101447993B (zh) * | 2008-12-23 | 2012-01-25 | 深圳市金蝶中间件有限公司 | 查找连接池中未释放的连接的方法和装置 |
CN102346767A (zh) * | 2011-09-19 | 2012-02-08 | 北京金和软件股份有限公司 | 一种基于双连接池的数据库连接方法 |
CN103067293A (zh) * | 2012-12-31 | 2013-04-24 | 北京京东世纪贸易有限公司 | 负载均衡设备的连接管理和复用的方法和系统 |
CN103064964A (zh) * | 2012-12-29 | 2013-04-24 | 天津南大通用数据技术有限公司 | 一种支持分布式事务的数据库的连接方法 |
CN103365929A (zh) * | 2012-04-10 | 2013-10-23 | 阿里巴巴集团控股有限公司 | 一种数据库连接的管理方法及系统 |
CN103646084A (zh) * | 2013-12-16 | 2014-03-19 | 浪潮电子信息产业股份有限公司 | 一种基于c程序连接mysql数据库的管理方法 |
CN103810203A (zh) * | 2012-11-13 | 2014-05-21 | 深圳市腾讯计算机系统有限公司 | 一种数据库管理系统连接复用方法及装置 |
CN105426544A (zh) * | 2015-12-25 | 2016-03-23 | 北京奇虎科技有限公司 | 监控数据库状态的方法及装置 |
CN105512188A (zh) * | 2015-11-25 | 2016-04-20 | 用友网络科技股份有限公司 | 数据连接方法和数据连接系统 |
CN106446183A (zh) * | 2016-09-28 | 2017-02-22 | 中国农业银行股份有限公司 | 数据库连接方法及装置 |
CN106550027A (zh) * | 2016-10-25 | 2017-03-29 | 深圳中兴网信科技有限公司 | 设备连接方法和设备连接系统 |
CN107291747A (zh) * | 2016-03-31 | 2017-10-24 | 北京优朋普乐科技有限公司 | 一种数据库连接池的管理方法、装置及系统 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11995481B2 (en) | 2022-08-22 | 2024-05-28 | Sap Se | Efficient connection pooling |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3166943B2 (ja) * | 1992-12-31 | 2001-05-14 | ソニー株式会社 | データベースアクセス処理方法 |
ES2251118T3 (es) * | 1997-12-12 | 2006-04-16 | Alcatel Usa Sourcing, L.P. | Gestion de red. |
KR100566292B1 (ko) * | 1998-04-06 | 2006-06-13 | 삼성전자주식회사 | 망관리장치에서 망요소 구성시 가변위치 자동검출 방법 |
US6138143A (en) * | 1999-01-28 | 2000-10-24 | Genrad, Inc. | Method and apparatus for asynchronous transaction processing |
US6704779B1 (en) * | 1999-11-24 | 2004-03-09 | Unisys Corporation | Method and apparatus for a web application server to provide an administration system using a dual set of tiered groups of objects |
-
2002
- 2002-12-25 CN CNB021399484A patent/CN1317653C/zh not_active Expired - Lifetime
-
2003
- 2003-11-28 BR BR0317733-5A patent/BR0317733A/pt not_active Application Discontinuation
- 2003-11-28 WO PCT/CN2003/001016 patent/WO2004059906A1/zh not_active Application Discontinuation
- 2003-11-28 AU AU2003289602A patent/AU2003289602A1/en not_active Abandoned
Cited By (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1758606B (zh) * | 2004-10-08 | 2010-06-16 | 国际商业机器公司 | 用于自主管理连接池的方法和设备 |
CN1815469B (zh) * | 2005-02-01 | 2010-04-28 | 华为技术有限公司 | 一种数据库连接资源的管理方法 |
CN101261640B (zh) * | 2005-02-21 | 2011-01-19 | 兄弟工业株式会社 | 内容提供系统、输出控制设备和输出控制程序 |
CN100395710C (zh) * | 2005-05-27 | 2008-06-18 | 华为技术有限公司 | 一种多线程应用程序访问数据库的方法 |
CN100458790C (zh) * | 2006-12-31 | 2009-02-04 | 中国建设银行股份有限公司 | 访问数据库的方法和系统 |
CN101447993B (zh) * | 2008-12-23 | 2012-01-25 | 深圳市金蝶中间件有限公司 | 查找连接池中未释放的连接的方法和装置 |
CN101777047A (zh) * | 2009-01-08 | 2010-07-14 | 国际商业机器公司 | 多租户环境下访问数据库的系统、设备和方法 |
WO2010148966A1 (zh) * | 2009-11-26 | 2010-12-29 | 中兴通讯股份有限公司 | 一种网管数据同步的实现方法及装置 |
CN102346767A (zh) * | 2011-09-19 | 2012-02-08 | 北京金和软件股份有限公司 | 一种基于双连接池的数据库连接方法 |
CN103365929A (zh) * | 2012-04-10 | 2013-10-23 | 阿里巴巴集团控股有限公司 | 一种数据库连接的管理方法及系统 |
CN103365929B (zh) * | 2012-04-10 | 2016-09-28 | 阿里巴巴集团控股有限公司 | 一种数据库连接的管理方法及系统 |
CN103810203A (zh) * | 2012-11-13 | 2014-05-21 | 深圳市腾讯计算机系统有限公司 | 一种数据库管理系统连接复用方法及装置 |
CN103810203B (zh) * | 2012-11-13 | 2018-02-27 | 深圳市腾讯计算机系统有限公司 | 一种数据库管理系统连接复用方法及装置 |
CN103064964A (zh) * | 2012-12-29 | 2013-04-24 | 天津南大通用数据技术有限公司 | 一种支持分布式事务的数据库的连接方法 |
CN103064964B (zh) * | 2012-12-29 | 2016-04-20 | 天津南大通用数据技术股份有限公司 | 一种支持分布式事务的数据库的连接方法 |
CN103067293A (zh) * | 2012-12-31 | 2013-04-24 | 北京京东世纪贸易有限公司 | 负载均衡设备的连接管理和复用的方法和系统 |
CN103067293B (zh) * | 2012-12-31 | 2017-03-22 | 北京京东世纪贸易有限公司 | 负载均衡设备的连接管理和复用的方法和系统 |
CN103646084A (zh) * | 2013-12-16 | 2014-03-19 | 浪潮电子信息产业股份有限公司 | 一种基于c程序连接mysql数据库的管理方法 |
CN105512188A (zh) * | 2015-11-25 | 2016-04-20 | 用友网络科技股份有限公司 | 数据连接方法和数据连接系统 |
CN105426544A (zh) * | 2015-12-25 | 2016-03-23 | 北京奇虎科技有限公司 | 监控数据库状态的方法及装置 |
CN105426544B (zh) * | 2015-12-25 | 2020-06-30 | 北京奇虎科技有限公司 | 监控数据库状态的方法及装置 |
CN107291747A (zh) * | 2016-03-31 | 2017-10-24 | 北京优朋普乐科技有限公司 | 一种数据库连接池的管理方法、装置及系统 |
CN106446183A (zh) * | 2016-09-28 | 2017-02-22 | 中国农业银行股份有限公司 | 数据库连接方法及装置 |
CN106446183B (zh) * | 2016-09-28 | 2019-05-31 | 中国农业银行股份有限公司 | 数据库连接方法及装置 |
CN106550027A (zh) * | 2016-10-25 | 2017-03-29 | 深圳中兴网信科技有限公司 | 设备连接方法和设备连接系统 |
CN106550027B (zh) * | 2016-10-25 | 2020-02-21 | 深圳中兴网信科技有限公司 | 设备连接方法和设备连接系统 |
Also Published As
Publication number | Publication date |
---|---|
CN1317653C (zh) | 2007-05-23 |
WO2004059906A1 (fr) | 2004-07-15 |
BR0317733A (pt) | 2005-11-22 |
AU2003289602A1 (en) | 2004-07-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1317653C (zh) | 一种数据库连接的高效管理方法 | |
CN1266590C (zh) | 面向构件基于系统内核的进程池/线程池管理方法 | |
CN1276361C (zh) | 一种嵌入式系统内存管理的方法 | |
CN1292370C (zh) | 从源系统复制信息到目标系统的方法 | |
US5822749A (en) | Database system with methods for improving query performance with cache optimization strategies | |
CN1815451A (zh) | 日志信息管理方法及系统 | |
CN1264106C (zh) | 一种统一访问数据库系统的方法 | |
EP0675451A2 (en) | A distributed database architecture and distributed database management system for open network evolution | |
CN1829964A (zh) | 用于处理消息队列的方法、设备和计算机程序 | |
CN1831802A (zh) | 将模块耦合到互连上的管理控制器的方法和装置 | |
CN1928873A (zh) | 一种实现负荷分担的数据库访问方法及系统 | |
CN1710865A (zh) | 一种提高基于构件软件系统可靠性的方法 | |
CN1828557A (zh) | 嵌入式操作系统中进程映射实现方法 | |
CN101354720B (zh) | 一种分布式内存数据库数据系统及其共享方法 | |
CN1777154A (zh) | 用于对应用组件的接口的方法和系统 | |
CN1851676A (zh) | 一种嵌入式系统缓冲式内存分配方法 | |
CN1801086A (zh) | 应用于Java操作系统中设备支持的实现方法 | |
CN100341298C (zh) | 协同系统中可扩展的动态容错方法 | |
CN1351299A (zh) | 一种访问数据库的方法及装置 | |
CN1266602C (zh) | 用于锁定表目的方法和设备及用于并行处理的计算机系统 | |
CN1567835A (zh) | 智能网中的分布式集群业务管理系统及业务管理方法 | |
CN1897629A (zh) | 基于内存的海量话单快速交叉排重方法 | |
CN1866203A (zh) | 一种字符串引用方法 | |
CN1141654C (zh) | 面向对象的系统中向二进制类增加对象服务的系统和方法 | |
CN1235151C (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 | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CX01 | Expiry of patent term | ||
CX01 | Expiry of patent term |
Granted publication date: 20070523 |