SMProxyMySQL 數(shù)據(jù)庫連接池
中文 | English
SMProxy
Swoole MySQL Proxy
一個(gè)基于 MySQL 協(xié)議,Swoole 開發(fā)的MySQL數(shù)據(jù)庫連接池。
原理
將數(shù)據(jù)庫連接作為對象存儲(chǔ)在內(nèi)存中,當(dāng)用戶需要訪問數(shù)據(jù)庫時(shí),首次會(huì)建立連接,后面并非建立一個(gè)新的連接,而是從連接池中取出一個(gè)已建立的空閑連接對象。 使用完畢后,用戶也并非將連接關(guān)閉,而是將連接放回連接池中,以供下一個(gè)請求訪問使用。而連接的建立、斷開都由連接池自身來管理。
同時(shí),還可以通過設(shè)置連接池的參數(shù)來控制連接池中的初始連接數(shù)、連接的上下限數(shù)以及每個(gè)連接的最大使用次數(shù)、最大空閑時(shí)間等等。 也可以通過其自身的管理機(jī)制來監(jiān)視數(shù)據(jù)庫連接的數(shù)量、使用情況等。超出最大連接數(shù)會(huì)采用協(xié)程掛起,等到有連接關(guān)閉再恢復(fù)協(xié)程繼續(xù)操作。
特性
支持讀寫分離
支持?jǐn)?shù)據(jù)庫連接池,能夠有效解決 PHP 帶來的數(shù)據(jù)庫連接瓶頸
支持 SQL92 標(biāo)準(zhǔn)
采用協(xié)程調(diào)度
支持多個(gè)數(shù)據(jù)庫連接,多個(gè)數(shù)據(jù)庫,多個(gè)用戶,靈活搭配
遵守 MySQL 原生協(xié)議,跨語言,跨平臺(tái)的通用中間件代理
支持 MySQL 事務(wù)
支持 HandshakeV10 協(xié)議版本
完美兼容 MySQL4.1 - 8.0
兼容各大框架,無縫提升性能
設(shè)計(jì)初衷
PHP 沒有連接池,所以高并發(fā)時(shí)數(shù)據(jù)庫會(huì)出現(xiàn)連接打滿的情況,Mycat 等數(shù)據(jù)庫中間件會(huì)出現(xiàn)部分 SQL 無法使用,例如不支持批量添加等,而且過于臃腫。 所以就自己編寫了這個(gè)僅支持連接池和讀寫分離的輕量級(jí)中間件,使用 Swoole 協(xié)程調(diào)度 HandshakeV10 協(xié)議轉(zhuǎn)發(fā)使程序更加穩(wěn)定,不用像 Mycat 一樣解析所有 SQL 包體,增加復(fù)雜度。
開發(fā)與討論
若被墻請?jiān)L問:https://smproxy.gitee.louislivi.com
歡迎各類 Issue 和 Pull Request。
