Oraclepaip.提升性能—-数据库连接池以及线程池以及对象池

paip.提升性能—-数据库连接池以及线程池以及对象池

目:数据库连接池c3po,线程池ExecutorService:Jakartacommons-pool对象池

作者Attilax  艾龙,  EMAIL:1466519819@qq.com
来源:attilax的专栏
地址:http://blog.csdn.net/attilax

//////////为什么要运数据库连接池
树立连接是一个来之不易的位移,每次都得费0.05s~1s底时空,而且系统还要分配内存资源。
于共享资源,有一个良红的设计模式:资源池 (Resource Pool)。

/////////////连接池主要工作模式

3. 当连接池中之连都早就为此完,而起新的连天要到来时会有啊?
当连接池已经上它的卓绝酷连接数目时,有新的连续要到来时,新的连要将停放到连续队列中。当有连续释放于连接池时,连接池将新释放的连年分配为在队中排队的接连要。你可调用close和dispose将连接归还给连接池。
4. 自我当怎么样允许连接池?
对于.NET应用程序而言,默认为允许连接池。(这表示你可不必为当下宗工作做另外的作业)当然,如果你可当SQLConnection对象的连字符串中多Pooling=true;确保您的应用程序允许连接池的施用。
5. 自身应当怎么样禁止连接池?
ADO.NET默认为允许数据库连接池,如果你希望取缔连接池,可以以如下的章程:
1) 使用SQLConnection对象时,往连接字符串加入如下内容:Pooling=False;
2) 使用OLEDBConnection对象时,往连接字符串加入如下内容:OLE DB
Services=-4;

当应用程序向连接池请求的接连数超最可怜连接数量时,这些请求将于加入到等候队列

///////Java连接池
当Java中开源的数据库连接池有以下几种植 :
1, C3P0
C3P0是一个开源代码的JDBC连接池,它在lib目录中与Hibernate[1]手拉手发布,包括了实现jdbc3以及jdbc2扩展规范说明的Connection
和Statement 池的DataSources 对象。
2,Proxool 这是一个Java SQL
Driver驱动程序,提供了对而选择的另类型的驱动程序的连接池封装。可以非常简单的移植到现存的代码中。完全可配置。快速,成熟,健壮。可以透明地也汝留存的JDBC驱动程序增加连接池功能。
3,Jakarta DBCP
DBCP是一个依赖Jakartacommons-pool对象池机制的数据库连接池.DBCP可以直接的以应用程序中行使。

////////////11,Druid,但她不光是一个数据库连接池,它还隐含一个ProxyDriver,一多元内置的JDBC组件库,一个SQL
Parser。
支撑所有JDBC兼容的数据库,包括Oracle、MySql、Derby、Postgresql、SQL
Server、H2等等。
Druid针对Oracle和MySql做了特别优化,比如Oracle的PS
Cache内存占用优化,MySql的ping检测优化。
Druid提供了MySql、Oracle、Postgresql、SQL-92的SQL的完整支持,这是一个手写的大性能SQL
Parser,支持Visitor模式,使得分析SQL的肤浅语法树好有利。
简而言之SQL语句用时10微秒以内,复杂SQL用时30微秒。
经Druid提供的SQL
Parser可以当JDBC层拦截SQL做相应处理,比如说分库分表、审计等。Druid防御SQL注入攻击的WallFilter就是通过Druid的SQL
Parser分析语义实现之

////////线程池
Java里面线程池的头等接口是Executor,但是严格意义及讲Executor并无是一个线程池,而仅仅是一个履线程的家伙。真正的线程池接口是ExecutorService。下面就张图完全描述了线程池的好像系布局。
标记一下于主要之近乎:
ExecutorService:     真正的线程池接口。
ScheduledExecutorService   
 能和Timer/TimerTask类似,解决那些欲任务重执行之问题。
ThreadPoolExecutor     ExecutorService的默认实现。
ScheduledThreadPoolExecutor   
 继承ThreadPoolExecutor的ScheduledExecutorService接口实现,周期性任务调度的接近实现。

要是布局一个线程池是比较复杂的,尤其是于线程池的规律不是甚知的景况下,很有或部署的线程池不是比较出色的,因此于Executors类里面提供了有静态工厂,生成有常用之线程池。

   
newSingleThreadExecutor:创建一个单线程的线程池。这个线程池只来一个线程在办事,也不怕是一对一给单线程串行执行有任务。如果此唯一的线程因为大了,那么会出一个新的线程来顶替她。此线程池保证有任务的尽顺序以职责之交付顺序执行。
   
newFixedThreadPool:创建固定大小的线程池。每次交一个任务就创办一个线程,直到线程达到线程池的卓绝充分尺寸。线程池的尺寸要上极端要命价值就是会见维持无变换,如果某线程因为执行好要截止,那么线程池会补充一个初线程。
   
newCachedThreadPool:创建一个不过缓存的线程池。如果线程池的轻重超过了处理任务所待的线程,那么尽管会见回收部分空(60秒不执任务)的线程,当任务数多时,此线程池又足以智能的长新线程来拍卖任务。此线程池不会见针对线程池大小做限定,线程池大小完全靠让操作系统(或者说JVM)能够创造的无比深线程大小。
   
newScheduledThreadPool:创建一个分寸无限的线程池。此线程池支持定时与周期性执行任务之求。
   
newSingleThreadExecutor:创建一个单线程的线程池。此线程池支持定时和周期性执行任务的需要。

//////////对象池
Jakartacommons-pool对象池
    
    
参考:
数据库连接池C3P0学习 – haoran-10 – ITeye技术网站.htm
c3p0使用数据库连接池示例_newflyaaa的空间_百度空间.htm

相关文章