1. 程式人生 > >資料庫連線池併發的實現原理

資料庫連線池併發的實現原理

1 . 概述和說明在資料庫操作中,和資料庫建立連線(Connection)是最為耗時的操作之一,而且資料庫都有最大連線數目的限制,

如何很多使用者訪問的是同一資料庫,所進行的都是相同的操作,比如查詢記錄,那麼,為每個使用者都建立一個連線是不合理的 連線池的思想:Tomcat伺服器可以事先預備好若干個連線物件,

將這些連線物件存放在一個稱為連線池的容器中(通常由連結串列承擔這一角色)當某使用者需要操作資料庫時,

只要從連線池中取出一個連線物件即可,當用戶使用完改連線物件後,將該連線物件放回到連線池中,

如果某使用者需要操作資料庫時,連線池中已沒有連線物件可用,那麼該使用者就必須等待,

直到連線池中有了連線物件為止。

例:WebLogicWebSphere 連線池和資料來源都是由自己操作管理

2 . 案例IBM專案在讀寫MQ訊息佇列中,用的是此思想 3 . 程式的呼叫註釋和配置檔案的說明

package database.operation; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.LinkedList; public class

 ApplicationCon { private static ApplicationCon manager = new ApplicationCon(); private static LinkedList<Connection> list;// 存放Connection 物件的連結串列private staticfinal intMAX = 10;// 最大連線數public static String DRIVERNAME = "com.newatlanta.jturbo.driver.Driver"; public static String URL = "jdbc:JTurbo://127.0.0.1/DBA/charset=GBK"
; public static String UID = "sa"; public static String PWD = ""; private Connection con = null; //單例模式public static ApplicationCon getInstance() { returnmanager; } public ApplicationCon() { try { Class.forName(DRIVERNAME); } catch (Exception e) { // TODO Auto-generated catch blocke.printStackTrace(); } list= new LinkedList<Connection>(); for (int i = 0; i <= MAX; i++) { try { con = DriverManager.getConnection(URL , UID , PWD ); list.add(con); } catch (SQLException e) { // TODO Auto-generated catch blocke.printStackTrace(); } } } //單執行緒,當前執行緒沒有結束,其他執行緒處於等待public synchronized Connection getOneConnection() { if (list.size() > 0) return list.removeFirst();// 連結串列刪除第一個節點,並返回該節點中的連線物件;elsereturn null; } //單執行緒,當前執行緒沒有結束,其他執行緒處於等待public synchronized void puBackOneConnection(Connection con) { list.addFirst(con); } /** * 該方法執行增,,改操作 */public void executeUpdate(String strSql) throws SQLException { Statement stat = con.createStatement(); stat.executeUpdate(strSql); } /** * 該方法執行查詢操作,並返回結果集 */public ResultSet executeQuerry(String strSql) throws SQLException { Statement stat = con.createStatement(); return stat.executeQuery(strSql); }

4 . 如何呼叫

/** * 呼叫規則:ApplicationCon m =ApplicationCon.getInstance(); * Connection connection =m.getOneConnection(); * 執行增刪改查操作 * m.puBackOneConnection(connection); */

相關推薦

資料庫連線併發實現原理

1 . 概述和說明在資料庫操作中,和資料庫建立連線(Connection)是最為耗時的操作之一,而且資料庫都有最大連線數目的限制, 如何很多使用者訪問的是同一資料庫,所進行的都是相同的操作,比如查詢記錄,那麼,為每個使用者都建立一個連線是不合理的 連線池的思想:Tomcat

測試druid資料庫連線併發遇到的問題

測試條件配置: 1:配置druid連線池最大數量為500(maxActive=500)。 2:測試併發量為1000。 報錯:Data source rejected establishment of connection,  message from server: "Too

一個簡單資料庫連線實現

一、已實現功能   資料庫連線快取。將資料庫連線與執行緒ID繫結並提供執行資料庫操作時檢測。資料庫連線超時檢測。初始化資料庫環境,包括初始化資料庫,資料庫使用者,資料庫表。 二、程式碼列表: 1、MySqlDBManager:   用於管理資料庫配置、初始化資料庫環境及建立

Oracle資料庫連線實現

資料連線池的工做機制:J2EE伺服器啟動時會建立一定數量的池連線,並一直維持不少此數目的池連線。客戶端程式需要連線時,池驅動程式會返回一個未使用的池連線並將其表記為忙。如果當前沒有空閒連線,池驅動程式就新建一定數量的連線,新建連線的數量有配置引數決定。當使用的池連線呼叫完成後,池驅動程式將此連線

Java資料庫連線實現(不用框架)

前言:因為需要正式做專案,瞭解到了連線池這個東西。在網上找了很多資料,發現都是大同小異,各種轉載,看上去搜出來了幾十個答案,結果很可能是同一個。並且大多都是基於框架的資料庫連線池。可是我只是想採用MVC做一個不是很大的專案,不需要使用到框架啊。這可怎麼辦,最後沒

QT資料庫連線實現

mysql.h檔案 #ifndef MYSQL #define MYSQL #include <QtSql> #include <QQueue> #include <QString> #include <QMutex> #i

java資料庫連線程式碼實現

import java.io.InputStream; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.uti

JDBC程式設計學習筆記之資料庫連線實現

在JDBC程式設計的時候,獲取到一個數據庫連線資源是很寶貴的,倘若資料庫訪問量超大,而資料庫連線資源又沒能得到及時的釋放,就會導致系統的崩潰甚至宕機。造成的損失將會是巨大的。再看有了資料庫連線池的JDBC,就會較好的解決資源的建立與連線問題,其主要還是針對於連線

專案實訓(十三)資料庫連線實現

1.為什麼需要資料庫連線池: 資料庫連線是一種關鍵的、有限的、昂貴的資源。對資料庫連線的管理能顯著影響到整個應用程式的伸縮性和健壯性,影響到程式的效能指標。資料庫連線池正是針對這個問題提出來的。 資料庫連線池負責分配、管理和釋放資料庫連線,它允許應用程式重複使用一個現有的

JDBC的資料庫連線的工作原理

  隨著資訊科技的高速發展與廣泛應用,資料庫技術在資訊科技領域中的位置越來越重要,尤其是網路應用和電子商務的迅速發展,都需要資料庫技術支援動態Web站點的執行,而傳統的開發模式是:首先在主程式(如Servlet、Beans)中建立資料庫連線;然後進行SQL操作,對資料庫中的物

理解資料庫連線底層原理之手寫實現

前言 資料庫連線池的基本思想是:為資料庫連線建立一個“緩衝池”,預先在池中放入一定數量的資料庫連線管道,需要時,從池子中取出管道進行使用,操作完畢後,在將管道放入池子中,從而避免了頻繁的向資料庫申請資源,釋放資源帶來的效能損耗。在如今的分散式系統當中,系統的QPS瓶頸往往就

資料庫連線底層原理以及手寫實現

資料庫連線池的基本思想是:為資料庫連線建立一個“緩衝池”,預先在池中放入一定數量的資料庫連線管道,需要時,從池子中取出管道進行使用,操作完畢後,在將管道放入池子中,從而避免了頻繁的向資料庫申請資源,釋放資源帶來的效能損耗。 在如今的分散式系統當中,系統的QPS瓶頸往往就

資料庫連線原理實現(詳解)

資料庫連線池類的設計 類1:資料庫連線池類DBconnctionPool 屬性: inuserd 當前正在使用的連線數(int 型別) maxConn 最大的連線數(int 型別) minConn 最小的連線數(int 型別) poolName 連線池的名稱(String 型別) ArrayList free

JDBC資料庫連線實現原理(手動實現)

一、普通的資料庫連線     如下圖所示,個使用者獲取資料庫資料都要單獨建立一個jdbc連線,當用戶獲取資料完成後再將連線釋放,可見對cpu的資源消耗很大。  二

Java資料庫連線原理與簡易實現

1、什麼是資料庫連線池     我們現在在開發中一定都會用到資料庫,為了提高我們的系統的訪問速度,資料庫優化是一個有效的途徑。我們現在開發中使用資料庫一般都要經歷以下的四個步驟:(1)載入資料庫的驅動類,(2)建立資料庫連線,(3)進行資料操作,(4)關閉資料庫連線;在這四步中建立資料庫連線是一個比較耗時的操

淺析資料庫連線原理分析與實現

1 動機在專案初期對於資料庫的使用就是開啟一個連線並進行使用,使用過後關閉連線釋放資源,並且在後臺簡單測試中,並沒有出現問題。但是在與前端對接之後,發現頻繁地開啟和關閉連線會對效能造成很大的影響,而且之前假設的情況是接受的請求都是同步的,但是前端可能傳送非同步請求,當兩個請求

Linux + C + Epoll實現併發伺服器(執行緒 + 資料庫連線)

一, 背景        先說下我要實現的功能,server端一直在linux平臺下面跑,當客戶端有請求過來的時候server端接受到請求,拿到客戶端的資料,根據拿到的資料做出相應的處理,得到處理的結果直接把結果資料傳送給客戶端。這樣一個連線的請求結束,我的不

資料庫連線原理詳解與自定義連線實現

實現原理資料庫連線池在初始化時將建立一定數量的資料庫連線放到連線池中,這些資料庫連線的數量是由最小資料庫連線數制約。無論這些資料庫連線是否被使用,連線池都將一直保證至少擁有這麼多的連線數量。連線池的最大資料庫連線數量限定了這個連線池能佔有的最大連線數,當應用程式向連線池請求的連

java資料庫連線實現原理

原文:http://blog.csdn.net/frightingforambition/article/details/25464129  一、為什麼在連線資料庫時要使用連線池  資料庫連線是一種關鍵的有限的昂貴的資源,這一點在多使用者的網頁應用程式中體現得

httpclient工具類,使用連線實現原理資料庫連線

使用httpclient4.5實現。 注意事項: 1.user-agent最好不要亂寫,百度一些放到檔案,每次請求隨機讀取最好。 2.最好設定請求停頓時間,防止訪問過快被封。 3.返回結果亂碼請設定返回的資料的編碼格式,預設utf8. 程式碼: package com.c