1. 程式人生 > 資訊 >訊息稱《黑手黨(四海兄弟)》系列正在開發前傳遊戲,改用虛幻引擎 5

訊息稱《黑手黨(四海兄弟)》系列正在開發前傳遊戲,改用虛幻引擎 5

1. 池化技術?

2. 什麼是資料庫連線池?

3. 為什麼使用資料庫連線池?

4. 資料庫連線池執行機制

5.連線池和執行緒池的關係

6.連線池設計要點

7. 連線池的具體實現

8.連線池連線設定數量

1. 池化技術?

池化技術能夠減少資源物件的建立次數,提高程式的響應效能,特別是在高併發下這種提高更加明顯。 使用池化技術快取的資源物件有如下共同特點:   1. 物件建立時間長;   2. 物件建立需要大量資源;   3. 物件建立後可被重複使用 像常見的執行緒池、記憶體池、連線池、物件池都具有以上的共同特點。

2. 什麼是資料庫連線池?

定義:資料庫連線池(Connection pooling)是程式啟動時建立足夠的資料庫連線,並將這些連線組成 一個連線池,由程式動態地對池中的連線進行申請,使用,釋放。 大白話:建立資料庫連線是一個很耗時的操作,也容易對資料庫造成安全隱患。所以,在程式初始化的 時候,集中建立多個數據庫連線,並把他們集中管理,供程式使用,可以保證較快的資料庫讀寫速度, 還更加安全可靠。 這裡講的資料庫,不單只是指Mysql,也同樣適用於Redis。

3. 為什麼使用資料庫連線池?

3.1普通使用資料庫時,需要首先建立TCP連線,賬號、密碼認證建立資料庫連線,執行sql語句,關閉資料庫連線,關閉TCP連線。這個步驟浪費時間與資源,可以把建立資料庫的連線儲存在一個連線容器內,需要執行任務時從連線容器內取出一個連線,任務完成時歸還連線,就可以節省很多時間與資源。

優點:

  • 降低了網路開銷
  • 連線複用,優先減少了連線數
  • 提升效能,避免頻繁的新建連線,新建連線的開銷比較大
  • 沒有TIME_WAIT狀態的問題

缺點:

  設計較為複雜

3.2 長連線和連線池的區別

  • 長連線是一些驅動、驅動框架、ORM工具的特性,由驅動來保持連線控制代碼的開啟,一邊後續的資料庫操作可以重用連線,從而減少資料庫的連線開銷。
  • 連線池是應用伺服器的元件,它可以通過引數來配置連線數,連線檢測、連線的生命週期等。
  • 連線池內的連線,其實就是長連線。

4. 資料庫連線池執行機制

  1. 從連線池獲取或建立可用連線;
  2. 使用完畢之後,把連線返回給連線池;
  3. 在系統關閉前,斷開所有連線並釋放連線佔用的系統資源;

5.連線池和執行緒池的關係

 執行緒池是主動操作,主動執行任務,當任務佇列不為空的時候從佇列取任務取執行。 

連線池是被動操作(類似記憶體池),池的物件被任務獲取,執行完任務後歸還。

6 .連線池設計要點

使用連線池需要預先建立資料庫連線。

連線池設計思路:

  1. 連線到資料庫,設計到資料庫ip、埠、使用者名稱、密碼、資料庫名字等;
    1. 連線的操作,每個連線物件都是獨立的連線通道,它們是獨立的;
    2. 配置最小連線數和最大連線數。
  2. 配置一個佇列管理池的連線,比如list;
  3. 獲取連線物件;connection_wait,notify
  4. 歸還連線物件;
  5. 連線池的名字。

 第一步:建構函式,賦值 pool_name,db_server_ip(mysql ip地址),db_server_port(mysql埠),username(mysql使用者名稱),password(mysql使用者密碼),db_name(mysql資料庫名稱),max_conn_cnt(最大連線數)

第二步:int init()初始化,建立最小數量連線,把連線插入到空閒佇列,建立一次來連線要經歷三次握手和連線資料庫的過程。

第三步: 請求獲取連線

 第四步:歸還連線

 第五步:釋放資源

 6.2 mysql連線重連機制

設定啟用(當發現連線斷開時的)自動重連
my_bool reconnect = true;
mysql_options(m_mysql, MYSQL_OPT_RECONNECT, &reconnect); // 配合mysql_ping實現自動重連
檢測連線是否正常 
int STDCALL mysql_ping(MYSQL *mysql);
描述: 檢查與服務端的連線是否正常。連線斷開時,如果自動重新連線功能未被禁用,則嘗試重新連線服務 器。該函式可被客戶端用來檢測閒置許久以後,與服務端的連線是否關閉,如有需要,則重新連線。 返回值: 連線正常,返回0;如有錯誤發生,則返回非0值。返回非0值並不意味著伺服器本身關閉掉,也有可能 是網路原因導致網路不通。  6.3 redis重連機制   1. 使用之前檢測連線是否可用   2. 使用過程中出現連線異常則釋放異常   3. 下一次使用該連線的時候如果發現連線不可用則重新初始化 redis的重連機制設計和mysql有區別。

7. 連線池的具體實現

8.連線池連線設定數量

連線池的連線數量一般與執行緒的數量是相等的。

連線數 = ((核心數 * 2) + 有效磁碟數) 按照這個公式,即是說你的伺服器 CPU 是 4核 i7 的,那連線池連線數大小應該為 ((4*2)+1)=9 這裡只是一個經驗公式。還要和執行緒池數量以及具體業務結合在一起。

搜尋

複製