数据库连接池的理解和实现

作者: 云中布衣   分类:  学习笔记    热度: (496℃)   时间: 2017-7-27 17:06   标签: #DataBase    

数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。数据库连接是一种关键的、有限的、昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。

选区_120.png

连接池的概念

1)连接池是一个进程

多个连接是在一个进程里面存储、管理的。这个进程保存所有的连接,当我们打开连接,如果有未用连接可用,则返回该链接。如果池中的连接都用完了,则创建一个新的连接保存到连接池。而当我们关闭连接的时候,连接池里面并不关闭连接,而是返回连接池中并标记为可重用状态,等待重新链接直到等待超时。再次打开连接的时候,我们就可以重用上次的连接。如果这个时间内没有连接请求(打开连接),这个数据库连接将被关闭,并从连接池中移除这个连接实例。如果连接池中连接达到了最大数,请求进入等待队列直到空闲连接可用。如果在可获取连接对象之前超时期限已过(由Connect Timeout连接字符串属性决定),则将出错。

2)该进程保存连接并使其处于活动状态,使连接可以被重复使用。)

应用程序访问底层的数据源的时候是通过OS的数据访问组件或者说Sql Client数据访问提供程序进行访问的。都是通过系统提供的组件去访问数据库服务器的数据库的。连接是通过这些组件建立的,连接池是在这些组件之上的,它存在于应用程序的进程里面。因此需要重用连接,就是在这一个进程里面重用。例如:两个WinForm程序在不同的计算机上,他们同时连接一个数据库服务器,这个时候,连接池就没办法起作用,因为连接池是一个进程里面。这时候,我们可以在数据库服务器上层搭建一个Web Service,而Web Service 和数据库服务器之间使用的是连接池,数据库服务器的压力就会小。

如果没有连接池,连接到数据源

建立物理通道(例如套接字或命名管道)
与服务器进行初次握手
分析连接字符串信息
由服务器对连接进行身份验证

运行检查以便在当前事务中登记(连接的环境是不是分布式事务)

连接池的作用

1)通过数据库连接池,应用程序可以重用池中现有的连接中现有的连接,而不必反复与数据库建立新的连接。

2)使用连接池可显著提高应用程序的可伸缩,因为有限数量的数据库连接可以为数量大得多的客户端提供服务。

3)同时,由于可以节省建立新连接所需的大由于可以节省建立新连接所需的大量时间,使用连接池还能够改善性能。

4)连接池对于应用程序来说是透明的,例如:conn.Open() 和 conn.Close()。

总的来说,创建数据库连接是一个很耗时的操作,也容易对数据库造成安全隐患。所以,在程序初始化的时候,集中创建多个数据库连接,并把他们集中管理,供程序使用,可以保证较快的数据库读写速度,还更加安全可靠。

(未完待续)



56.8K

发表评论:

© 云中布衣 2015 | Driven by EMLOG  | SiteMap | RunTime: 7.91ms RSS  | MORE  |   | TOP

文章数量【252】 评论数量【206】 稳定运行【1150天】

Visitor IP Address【54.80.96.153】

Email:ieeflsyu#outlook.com