我們為什麼要使用資料庫連線池?

時間 2021-05-30 19:53:13

1樓:Drol

應用程式和資料庫建立連線的過程是這樣的:

首先通過TCP協議的三次握手和資料庫伺服器建立連線,然後傳送資料庫使用者賬號密碼,等待資料庫驗證使用者身份。

2. 完成使用者身份驗證後,系統才可以提交SQL語句到資料庫執行。

3. 好了這個時候假設我們不使用資料庫連線池,那麼完成一次SQL查詢後,我們還要把連線關閉,關閉連線就需要和資料庫通訊告訴它我們要斷開連線了然後再TCP四次揮手最後完成關閉。

這個過程中每一次發起SQL查詢所經歷的TCP建立連線,資料庫驗證使用者身份,資料庫使用者登出,TCP斷開連線消耗的等待時間都是可以避免的,這明顯是一種浪費。打個比方,你去網咖去玩遊戲,每次去到呢先插網線,然後開機登入遊戲,玩了一會兒要去上廁所,你就退出遊戲,然後關機拔網線。去完廁所回來就又重新插網線開機登遊戲。

有沒有覺得上面例子中的行為很扯蛋,所以每次SQL查詢都建立鏈結,查詢完後又關閉連線這個做法本身就很扯蛋。合理的做法就應該是系統啟動的時候就建立資料庫連線,然後需要使用SQL查詢的時候,就從系統拿出資料庫連線物件並提交查詢,查詢完了就把連線物件還給系統。系統在整個程式執行結束的時候再把資料庫連線關閉。

考慮到一般資料庫應用都是Web多使用者併發應用,那麼只有乙個資料庫連線物件肯定不夠用,所以系統啟動的時候就應該多建立幾個資料庫連線物件供多個執行緒使用,這一批資料庫連線物件集合在一起就被稱之為資料庫連線池。

資料庫連線池就是典型的用空間換時間的思想,系統啟動預先建立多個資料庫連線物件雖然會占用一定的記憶體空間,但是可以省去後面每次SQL查詢時建立連線和關閉連線消耗的時間。

2樓:專注.Net領域極客

因為建立乙個資料庫連線是乙個非常耗時耗力的事,如果使用連線池,當我們需要連線資料庫伺服器的時候,只需去連線池中取出一條空閒的連線,而不是新建一條連線。這樣我們就可以大大減少連線資料庫的開銷,從而提高了應用程式的效能。

caffe為什麼要使用lmdb資料庫

我也很想知道,大概說一下我認為的原因。1.為了資料更一致。原始資料可能是影象資料,文字資料,語音資料,但是使用lmdb之後都成了lmdb資料。2.大量小檔案的IO太花時間,使用lmdb能夠一次取乙個batch。3.貌似現在不用lmdb,只用imagedata也行。因為新的caffe加入了prefet...

什麼情況下,需要使用分布式資料庫?

NebulaGraph 首先,分布式資料庫的優勢大致上概括為三種 1,資料分布儲存在不同的節點上,解決了單機下資料量的限制問題 2,分布式計算,均衡了計算負載 3,從資料安全性考慮,分布式資料庫一般都有多副本機制,以此保證了某乙個節點資料壞掉後能正常提供服務。基於以上三點,我認為海量資料的高併發業務...

為什麼不能在前端連線資料庫呢?

codefollower 前端直接訪問後端資料庫很容易實現的,只是這麼用的人不多,通常是不想把業務邏輯直接暴露在前端。我做的資料庫 Lealone 幾年前就可以在前端直接訪問了。比如在前端像後端一樣用 ORM 框架來訪問後端資料庫lealone Lealone Plugins在前端還可以控制後端事務...