亚洲av色香蕉一区二区三区,十四以下岁毛片带血a级,亚洲 校园 欧美 国产 另类,亚洲av日韩av一区谷露,色欲av无码一区二区三区

  • 相關(guān)軟件
    >小談JDBC中的連接與連接池 創(chuàng)建者:webmaster 更新時間:2005-05-16 22:15

    對于java使用者來說,操作數(shù)據(jù)庫JDBC連ODBC是十分常

    用的方法。在基于JDBC的應(yīng)用當中,許多工作都是圍繞java。

    sql。Connection接口展開的。做任何數(shù)據(jù)庫操作之前,應(yīng)用必

    須創(chuàng)建一個數(shù)據(jù)庫Connection,此連接則相當于應(yīng)用和數(shù)據(jù)庫之

    間的一個信息通道,承載應(yīng)用發(fā)送的SQL語句及數(shù)據(jù)庫返回的結(jié)

    果。Connection會與一個數(shù)據(jù)庫用戶賬戶相關(guān)聯(lián),從而使得數(shù)據(jù)

    庫能夠?qū)νㄟ^Conection提交的SQL語句施加一些訪問控制規(guī)則。

    最后,Conection還是數(shù)據(jù)庫事務(wù)的邊界。只有通過同一個

    Connection執(zhí)行的SQL語句才能組成一個事務(wù)。事務(wù)由多條SQL語

    句組成,這些SQL語句要么全部成功,要么作為一個原子操作全

    部失敗。同過調(diào)用Connection方法,可以提交事務(wù),也可以回滾

    事務(wù)。
    在一個獨立的應(yīng)用中,Connection通常只創(chuàng)建一次,而

    且在應(yīng)用關(guān)閉前一直保持打開。獨立的應(yīng)用一次僅為一個用戶提

    供服務(wù),而由一個用戶所啟動的所有數(shù)據(jù)庫操作通常會相互關(guān)聯(lián)

    。在一個服務(wù)器應(yīng)用中,如果它要處理來自多個不同的用戶的彼

    此無關(guān)的請求,處理連接就沒有那么顯而易見了。在此需要考慮

    的是:Connection的創(chuàng)建相當?shù)暮馁M時間,一次只能用于一個用

    戶以避免事務(wù)崩潰,而要保持連接打開其代價也很大。
    創(chuàng)建Connection的實際操作需要大概花費1-2秒。除了

    與數(shù)據(jù)庫建立一個網(wǎng)絡(luò)連接之外,數(shù)據(jù)庫引擎必須對數(shù)據(jù)庫用戶

    進行鑒別,并創(chuàng)建一個包含各種數(shù)據(jù)結(jié)構(gòu)的上下文來跟蹤記錄事

    務(wù)、所緩存的語句、結(jié)果等等。若為服務(wù)器接收到的每個請求都

    創(chuàng)建一個Connection,盡管實現(xiàn)簡單,但是對于大流量的服務(wù)器

    應(yīng)用來說,卻要花費太多的時間。
    要使創(chuàng)建連接所需要的時間盡可能減少,一直方法就是

    為每個需要訪問數(shù)據(jù)庫的Servlet或JSP頁面維護一個Connection

    。Connection可以在初始化web資源的時候創(chuàng)建,并保存在一個

    實例變量中,直到應(yīng)用關(guān)閉??梢园l(fā)現(xiàn),基于這種方法部署一個

    應(yīng)用的時候,將會導致大量多線程問題。每個請求都作為一個單

    獨的線程通過同一個Servlet或JSP頁面執(zhí)行。有些JDBC驅(qū)動程序

    根本不支持多線程訪問同一個Connection,這就帶來了各種各樣

    的運行時錯誤。還有一些JDBC驅(qū)動程序通過將所有調(diào)用串行化來

    支持多線程訪問同一連接,這又會帶來擴展性差的問題。這種方

    法還存在一個嚴重的問題,即來自多個用戶的請求都使用同樣的

    Connection,這樣就會在同一個事務(wù)中操作。如果一個請求回滾

    ,那么就可能導致同一Connection的所有其他數(shù)據(jù)庫操作都要回

    滾。
    從服務(wù)器資源(內(nèi)參)的角度看,保持連接打開代價也

    很高。許多 商業(yè)數(shù)據(jù)庫產(chǎn)品使用的許可證都是基于同時打開的

    連接數(shù)來定價,因此即便是從實際的花銷上來看,連接也是很昂

    貴的。由此看來,盡量減少應(yīng)用所需的連接數(shù)的確是一個明智之

    舉。相應(yīng)于“每一個資源一個Connection”的做法,還有一種方

    法是在接收第一個請求的時候為每一個用戶創(chuàng)建一個Connection

    ,并將其作為一個會話作用域?qū)ο?。不過,這種方法有一個缺點

    ,即Connection可能在大多數(shù)時間內(nèi)處于未激活狀態(tài),因為用戶

    在做下一個請求之前需要一定的時間來查看前一個請求的結(jié)果。
    最好的做法是使用一個連接池。連接池包含一些

    Connection對象,這些對象由所有Servlet和JSP頁面所共享。對

    于每個請求,會從池中選出一個Connection,使用后再將其放回

    池中。使用連接池即可解決其他做法所存在的問題:
    如,創(chuàng)建連接相當耗費時間
    置于池中的Connection僅創(chuàng)建一次,然后會得到重用。

    大多數(shù)池實現(xiàn)都允許指定開始時Connection對象的起始數(shù),還可

    以指定最大連接對象數(shù)??梢愿鶕?jù)需要創(chuàng)建新的Connection對象

    ,直到達到最大數(shù)為止。一旦達到了最大連接數(shù),池的客戶等待

    一個現(xiàn)有的Connection對象重新可用,而不會創(chuàng)建一個新的連接

    對象。
    對于共享連接存在多線程問題
    利用池,每個請求都會得到其自己的Connection,因此

    一次僅由一個線程使用,從而消除了所有潛在的多線程問題。
    連接是有限資源
    利用池,每個Connection都將得到高效使用。只要有未

    處理的請求,Connection就不會空閑。連接池允許指定

    Connection對象的最大數(shù),還可以將同時連接數(shù)的許可證限制與

    可接受的響應(yīng)時間加以權(quán)衡。
    不過,連接池并不是萬能的。因為所有用戶都使用同樣

    的Connection,因此不能依賴于數(shù)據(jù)庫引擎逐個的限制用戶對受

    保護資源的訪問。相反,必須按腳色來定義數(shù)據(jù)訪問規(guī)則,所謂

    角色就是有相同訪問權(quán)限的用戶組。然后可以對不同角色使用不

    同的池,每個池利用數(shù)據(jù)庫帳戶(對應(yīng)角色)來創(chuàng)建Connection

    對象。
    相關(guān)文章
    本頁查看次數(shù):