posts - 101,  comments - 29,  trackbacks - 0

                  最近在做一個移動的開發(fā)項目,整個項目兼有后臺和客戶端,客戶端是安裝在android終端上的,需要和服務(wù)器端進行龐大的數(shù)據(jù)交互。之前雖然有做過一些Web端的數(shù)據(jù)庫編程,但是還知識停留在了練習和學習的水平上,有很多現(xiàn)實的問題并沒有考慮非常多。但是這次接觸的是一個商業(yè)項目,而且預(yù)估的用戶群是一個非常龐大的群體,所以我們不能忽視用戶的操作感受,不能讓用戶有太久的等待,這樣是不符合一款優(yōu)秀產(chǎn)品設(shè)計初衷的,而且也是背離市場的。

                 經(jīng)過一位大牛學長的講解后,對連接池的強大深感膜拜。。。。Orz。。。

                So,接下來就是要好好研究一下連接池的原理了,這樣我們才能更好的學以致用微笑

                首先我們需要來說一下連接池的優(yōu)勢和有點:

                  1.減少連接創(chuàng)建時間

            雖然與其它數(shù)據(jù)庫相比 GBase 提供了較為快速連接功能,但是創(chuàng)建新的 JDBC 連接仍會招致網(wǎng)絡(luò)和 JDBC 驅(qū)動的開銷。如果這類連接是“循環(huán)”使用的,使用該方式這些花銷就可避免。
            2.簡化的編程模式
            當使用連接池時,每一個單獨的線程能夠像創(chuàng)建了一個自己的 JDBC 連接一樣操作,允許用戶直接使用JDBC編程技術(shù)。
            3.受控的資源使用
            如果用戶不使用連接池,而是每當線程需要時創(chuàng)建一個新的連接,那么用戶的應(yīng)用程序的資源使用會產(chǎn)生非常大的浪費并且可能會導致高負載下的異常發(fā)生。
            注意,每個連到 GBase 的連接在客戶端和服務(wù)器端都有花銷(內(nèi)存,CPU,上下文切換等等)。每個連接均會對應(yīng)用程序和 GBase 服務(wù)器的可用資源帶來一定的限制。不管這些連接是否在做有用的工作,仍將使用這些資源中的相當一部分。
            連接池能夠使性能最大化,同時還能將資源利用控制在一定的水平之下,如果超過該水平,應(yīng)用程序?qū)⒈罎⒍粌H僅是變慢。

                 看到如此諸多優(yōu)點,可見連接池在大數(shù)據(jù)模型中還是能夠顯著提高效能的。

                 在實際應(yīng)用開發(fā)中,特別是在WEB應(yīng)用系統(tǒng)中,如果JSP、Servlet或EJB使用JDBC直接訪問數(shù)據(jù)庫中的數(shù)據(jù),每一次數(shù)據(jù)訪問請求都必須經(jīng)歷建立數(shù)據(jù)庫連接、打開數(shù)據(jù)庫、存取數(shù)據(jù)和關(guān)閉數(shù)據(jù)庫連接等步驟,而連接并打開數(shù)據(jù)庫是一件既消耗資源又費時的工作,如果頻繁發(fā)生這種數(shù)據(jù)庫操作,系統(tǒng)的性能必然會急劇下降,甚至會導致系統(tǒng)崩潰。數(shù)據(jù)庫連接池技術(shù)是解決這個問題最常用的方法,在許多應(yīng)用程序服務(wù)器(例如:Weblogic,WebSphere,JBoss)中,基本都提供了這項技術(shù),無需自己編程,但是,深入了解這項技術(shù)是非常必要的。

            數(shù)據(jù)庫連接池技術(shù)的思想非常簡單,將數(shù)據(jù)庫連接作為對象存儲在一個Vector對象中,一旦數(shù)據(jù)庫連接建立后,不同的數(shù)據(jù)庫訪問請求就可以共享這些連接,這樣,通過復用這些已經(jīng)建立的數(shù)據(jù)庫連接,可以克服上述缺點,極大地節(jié)省系統(tǒng)資源和時間。
            數(shù)據(jù)庫連接池的主要操作如下:
            (1)建立數(shù)據(jù)庫連接池對象(服務(wù)器啟動)。
            (2)按照事先指定的參數(shù)創(chuàng)建初始數(shù)量的數(shù)據(jù)庫連接(即:空閑連接數(shù))。
            (3)對于一個數(shù)據(jù)庫訪問請求,直接從連接池中得到一個連接。如果數(shù)據(jù)庫連接池對象中沒有空閑的連接,且連接數(shù)沒有達到最大(即:最大活躍連接數(shù)),創(chuàng)建一個新的數(shù)據(jù)庫連接。
            (4)存取數(shù)據(jù)庫。
            (5)關(guān)閉數(shù)據(jù)庫,釋放所有數(shù)據(jù)庫連接(此時的關(guān)閉數(shù)據(jù)庫連接,并非真正關(guān)閉,而是將其放入空閑隊列中。如實際空閑連接數(shù)大于初始空閑連接數(shù)則釋放連接)。
            (6)釋放數(shù)據(jù)庫連接池對象(服務(wù)器停止、維護期間,釋放數(shù)據(jù)庫連接池對象,并釋放所有連接)。

                 連接池給我們在設(shè)計大用戶連接處理時提供了有效的解決方案,能夠在一定資源耗費程度上給我們的項目提供最好的用戶體驗和軟件的穩(wěn)定性,所以連接池確實是一個好東西。。。奮斗

          posted on 2012-05-30 00:35 mixer-a 閱讀(1690) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 东平县| 修文县| 綦江县| 卓资县| 天镇县| 大渡口区| 岳阳县| 翁牛特旗| 安丘市| 邢台县| 阆中市| 绵阳市| 尼玛县| 禄劝| 鲁山县| 东方市| 瓮安县| 临颍县| 措勤县| 独山县| 稻城县| 康定县| 宕昌县| 贵州省| 格尔木市| 平陆县| 贵溪市| 铜山县| 厦门市| 柳林县| 伊吾县| 开封县| 晋城| 台中市| 兴国县| 乳山市| 曲水县| 通河县| 游戏| 鸡西市| 容城县|