短鏈和長鏈區(qū)別 長連接和短連接的區(qū)別
當數(shù)據(jù)庫服務器和客戶端位于不同的主機上時,需要建立網(wǎng)絡連接進行通信 。客戶端必須使用數(shù)據(jù)庫連接來發(fā)送命令和接收回復和數(shù)據(jù) 。在通過提供給客戶端數(shù)據(jù)庫的驅(qū)動程序指定連接字符串之后,客戶端可以與數(shù)據(jù)庫建立連接 。可以查閱編程語言手冊,了解短連接和長連接的使用方法 。
1. 短連接
短連接是指程序與數(shù)據(jù)庫通信時需要建立連接 。執(zhí)行操作后,連接關(guān)閉 。短連接簡單來說就是每次操作數(shù)據(jù)庫,都要打開和關(guān)閉數(shù)據(jù)庫連接 。基本步驟是:連接→數(shù)據(jù)傳輸→關(guān)閉連接 。
在慢速網(wǎng)絡中使用短連接會花費很多;在生產(chǎn)繁忙的系統(tǒng)中,連接也可能受到系統(tǒng)端口數(shù)量的限制 。如果每秒要建立數(shù)千個連接,連接斷開后端口不會立即被回收,它們必須經(jīng)歷一個等待的“FIN”階段,直到它們可以被回收,這可能導致端口資源不足 。在Linux上,可以通過調(diào)整/proc/sys/net/IP v4/IP _ local _ port _ range來擴大端口的使用范圍;調(diào)整/proc/sys/net/IP v4/TCP _ fin _ time out來減少恢復延遲(如果要在應用服務器上調(diào)整這個參數(shù),一定要小心!) 。
另一種方法是讓主機使用多個IP地址 。端口號限制實際上是基于同一個IP:PORT 。如果主機添加IP,MySQL可以監(jiān)聽多個IP地址,客戶端可以選擇連接某個IP:PORT,這樣就增加了端口資源 。
2. 長連接
長連接是指程序間的連接建立后,總是打開的,被后續(xù)程序重用 。使用長連接的初衷是為了減少連接的開銷,雖然MySQL比其他數(shù)據(jù)庫快很多 。
以PHP程序為例 。當收到永久連接的請求時,PHP將檢查是否已經(jīng)有一個相同的永久連接(之前已經(jīng)打開過) 。如果存在,將直接使用該連接;如果不存在,則建立新的連接 。所謂“相同”連接是指使用相同的用戶名和密碼連接到同一臺主機 。
從客戶端的角度來看,使用長連接有一個好處 。沒有必要每次都創(chuàng)建新的連接 。如果客戶端頻繁向MySQL服務器發(fā)出連接請求,永久連接會更高效 。對于高并發(fā)服務,如果可能遇到連接的影響,建議使用長連接或連接池 。
從服務器的角度來看,情況略有不同 。它可以節(jié)省創(chuàng)建連接的開銷,但是維護連接也需要內(nèi)存 。如果濫用長連接,可能會使用過多的MySQL服務器連接 。現(xiàn)代操作系統(tǒng)可以有成千上萬個MySQL連接,但其中大部分可能都處于睡眠狀態(tài) 。這種工作方式效率不夠高,連接占用內(nèi)存,也會導致內(nèi)存浪費 。
對于擴展性好的網(wǎng)站,其實大部分的訪問都不需要連接數(shù)據(jù)庫 。如果用戶需要頻繁訪問數(shù)據(jù)庫,當流量增加時可能會出現(xiàn)性能問題 。這時候長短連接都解決不了問題,要進行合理的設計和優(yōu)化,避免性能問題 。
如果客戶機和MySQL數(shù)據(jù)庫之間有連接池或代理,一般建議在客戶機上使用短連接 。長連接的使用必須謹慎,不能濫用 。如果每秒鐘沒有幾百個或者幾千個新的連接請求,就不需要長連接,長連接并不能給你帶來多大的好處 。在Java語言中,由于連接池的原因,如果控制得當,不會對數(shù)據(jù)庫造成大的影響,但是PHP的長連接可能會導致數(shù)據(jù)庫連接數(shù)超過限制或者占用內(nèi)存過多 。
對此,R&D工程師、系統(tǒng)運維工程師、DBA需要保持聯(lián)系,確定合理的連接策略 。不要不假思索地使用長連接 。
【短鏈和長鏈區(qū)別 長連接和短連接的區(qū)別】3. 連接池
因為一些數(shù)據(jù)庫花費大量資金來創(chuàng)建和銷毀連接,或者因為相對于所執(zhí)行的特定數(shù)據(jù)操作,連接消耗了太多的資源,所以可能有必要添加連接池來提高性能 。
數(shù)據(jù)庫連接池是由一些網(wǎng)絡代理服務或應用服務器(如J2EE服務器)實現(xiàn)的功能 。它實現(xiàn)了一個持久連接的“池”,允許其他程序和客戶端連接 。該連接池將由所有連接的客戶端共享和使用 。連接池可以加快連接速度,減少數(shù)據(jù)庫連接數(shù),降低數(shù)據(jù)庫服務器的負載 。
4. 持久連接和連接池的區(qū)別
連接是一些驅(qū)動程序、驅(qū)動程序框架和ORM工具的特性 。驅(qū)動程序保持連接句柄打開,以便后續(xù)的數(shù)據(jù)庫操作可以重用該連接,從而減少數(shù)據(jù)庫的連接開銷 。連接池是應用服務器的一個組件,可以通過參數(shù)配置連接數(shù)、連接檢測、連接生命周期等 。
如果連接池或者長連接使用了大量的連接,可能會超過數(shù)據(jù)庫實例的限制,那么就需要注意連接相關(guān)的設置,比如最小和最大連接池的設置,以及php-fpm進程的數(shù)量等等 。,否則程序?qū)o法申請新的連接 。
推薦閱讀
- 西安火車站不出站換乘怎么找站臺 蘇州北和蘇州站的區(qū)別
- 基金和信托的相同之處 信托與基金的區(qū)別
- 水粉還是水彩畫出來的好看 水粉畫和水彩畫的區(qū)別
- 涂裝板和木飾面板區(qū)別 飾面板和免漆板的區(qū)別
- 潛水艇角閥和九牧比哪個好 全屋角閥要怎么選
- 人造鉆石和天然鉆石的區(qū)別有哪些
- 油煙機|「用后真實感受」老板21A6和老板21A5哪款好用?區(qū)別在哪?
- 陶罐和鐵罐告訴我們什么道理
- 金桔的功效和作用 對增強免疫力有很大的好處
- 紫薯和紅薯的營養(yǎng)區(qū)別 紫薯特別適合三高人群
