小編的世界 優質文選 資料
字體大小:
2020年8月19日 -
:
開源中國旗下代碼托管平台
對於很多 PHP 開發者來說,連接數據庫一直是個讓人頭疼的問題,那麼今天 Gitee 為大家介紹的就是一款一個基於 MySQL 協議,Swoole 開發的MySQL數據庫連接池
。
項目名稱:
SMProxy
項目作者:
louislivi
開源許可協議:
MIT
項目地址:https://gitee.com/louislivi/smproxy
設計初衷
PHP 沒有連接池,所以高並發時數據庫會出現連接打滿的情況,Mycat 等數據庫中間件會出現部分 SQL 無法使用,例如不支持批量添加等,而且過於臃腫。
所以就自己編寫了這個僅支持連接池和讀寫分離的輕量級中間件,使用 Swoole 協程調度 HandshakeV10 協議轉發使程序更加穩定,不用像 Mycat 一樣解析所有 SQL 包體,增加複雜度。
項目原理
將數據庫連接作為對象存儲在內存中,當用戶需要訪問數據庫時,首次會建立連接,後面並非建立一個新的連接,而是從連接池中取出一個已建立的空閑連接對象。
使用完畢後,用戶也並非將連接關閉,而是將連接放回連接池中,以供下一個請求訪問使用。而連接的建立、斷開都由連接池自身來管理。
同時,還可以通過設置連接池的參數來控制連接池中的初始連接數、連接的上下限數以及每個連接的最大使用次數、最大空閑時間等等。
也可以通過其自身的管理機制來監視數據庫連接的數量、使用情況等。超出最大連接數會采用協程掛起,等到有連接關閉再恢複協程繼續操作。
特性
支持讀寫分離
支持數據庫連接池,能夠有效解決 PHP 帶來的數據庫連接瓶頸
支持 SQL92 標准
采用協程調度
支持多個數據庫連接,多個數據庫,多個用戶,靈活搭配
遵守 MySQL 原生協議,跨語言,跨平台的通用中間件代理
支持 MySQL 事務
支持 HandshakeV10 協議版本
完美兼容 MySQL5.5 - 8.0
兼容各大框架,無縫提升性能
性能測試
介紹了這麼多,那麼這個項目的性能到底如何呢?我們可以看一下作者進行的性能測試。
沒用框架的 PHP 7.2.6
未使用連接池:
使用連接池:
ThinkPHP 5.0
未使用連接池:
使用連接池: