最近在做一个移动的开发项目,整个项目兼有后台和客户端,客户端是安装在android终端上的,需要和服务器端进行庞大的数据交互。之前虽然有做过一些Web端的数据库编程,但是还知识停留在了练习和学习的水平上,有很多现实的问题并没有考虑非常多。但是这次接触的是一个商业项目,而且预估的用户群是一个非常庞大的群体,所以我们不能忽视用户的操作感受,不能让用户有太久的等待,这样是不符合一款优秀产品设计初衷的,而且也是背离市场的。
经过一位大牛学长的讲解后,对连接池的强大深感膜拜。。。。Orz。。。
So,接下来就是要好好研究一下连接池的原理了,这样我们才能更好的学以致用
首先我们需要来说一下连接池的优势和有点:
1.减少连接创建时间
虽然与其它数据库相比 GBase 提供了较为快速连接功能,但是创建新的 JDBC 连接仍会招致网络和 JDBC 驱动的开销。如果这类连接是“循环”使用的,使用该方式这些花销就可避免。 2. 简化的编程模式 当使用连接池时,每一个单独的线程能够像创建了一个自己的 JDBC 连接一样操作,允许用户直接使用JDBC编程技术。 3. 受控的资源使用 如果用户不使用连接池,而是每当线程需要时创建一个新的连接,那么用户的应用程序的资源使用会产生非常大的浪费并且可能会导致高负载下的异常发生。 注意,每个连到 GBase 的连接在客户端和服务器端都有花销(内存,CPU,上下文切换等等)。每个连接均会对应用程序和 GBase 服务器的可用资源带来一定的限制。不管这些连接是否在做有用的工作,仍将使用这些资源中的相当一部分。 连接池能够使性能最大化,同时还能将资源利用控制在一定的水平之下,如果超过该水平,应用程序将崩溃而不仅仅是变慢。看到如此诸多优点,可见连接池在大数据模型中还是能够显著提高效能的。
在实际应用开发中,特别是在WEB应用系统中,如果JSP、Servlet或EJB使用JDBC直接访问数据库中的数据,每一次数据访问请求都必须经历建立数据库连接、打开数据库、存取数据和关闭数据库连接等步骤,而连接并打开数据库是一件既消耗资源又费时的工作,如果频繁发生这种数据库操作,系统的性能必然会急剧下降,甚至会导致系统崩溃。数据库连接池技术是解决这个问题最常用的方法,在许多应用程序服务器(例如:Weblogic,WebSphere,JBoss)中,基本都提供了这项技术,无需自己编程,但是,深入了解这项技术是非常必要的。
数据库连接池技术的思想非常简单,将数据库连接作为对象存储在一个Vector对象中,一旦数据库连接建立后,不同的数据库访问请求就可以共享这些连接,这样,通过复用这些已经建立的数据库连接,可以克服上述缺点,极大地节省系统资源和时间。 数据库连接池的主要操作如下: (1)建立数据库连接池对象(服务器启动)。 (2)按照事先指定的参数创建初始数量的数据库连接(即:空闲连接数)。 (3)对于一个数据库访问请求,直接从连接池中得到一个连接。如果数据库连接池对象中没有空闲的连接,且连接数没有达到最大(即:最大活跃连接数),创建一个新的数据库连接。 (4)存取数据库。 (5)关闭数据库,释放所有数据库连接(此时的关闭数据库连接,并非真正关闭,而是将其放入空闲队列中。如实际空闲连接数大于初始空闲连接数则释放连接)。 (6)释放数据库连接池对象(服务器停止、维护期间,释放数据库连接池对象,并释放所有连接)。 连接池给我们在设计大用户连接处理时提供了有效的解决方案,能够在一定资源耗费程度上给我们的项目提供最好的用户体验和软件的稳定性,所以连接池确实是一个好东西。。。