1. MySQLの接続プールとは何ですか
シーン:
同時に並行あたり1000がありますが、これは唯一のMySQLがダウンタイムでしょう、400同時MySQLの接続を処理することができます。
解決策:
接続プール、接続プールの接続200とMySQLを確立するため、および1000は順序があります200の同時接続のこの接続プールを共有します。
接続プールは、接続が確立されているため、追加的なパフォーマンスの向上をもたらすとMySQLことができます。このプロセスは、接続プールのMySQLを使用して、より大きな、単一の接続を消費します。
接続プールの定義:
このプログラムは、メモリ常駐プログラムであるに抜かないでください、私たちが必要となります。データベース接続プール(接続プーリング)プログラムが起動しています
十分なダイナミックデータベース接続を確立し、接続プール、プールがプログラムアプリケーションによって接続されて、放出の使用を形成するためにそれらを接続します。
II。小型ケース
最新の3人のメンバー登録ユーザデータベーステーブルを探しますか?
(1)のヒント
PROCESSLIST #mysqlビューの接続を示し
(2)サンプルコードコネクタ10 MySQLを作成します
<?phpの
/ **
* PhpStormによって作成されます。
*ユーザー:ルーク
*日:2019年10月30日
*時間:14:12
* /
//書き込みmysqlの接続プール、クラスは一度だけインスタンス化することができます(シングルトン)
クラスMysqlConnectionPool
{
プライベート静的$インスタンス; //シングルトンオブジェクト
民間の$ connection_num = 10; //接続の数
民間の$ connection_obj = [];
//コンストラクタ接続MySQLは、20mysql接続を作成します
プライベート関数の__construct()
{
{(I ++は$; $ I <の$ this - > connection_num $ I = 0)のための
$のDSN = "mysqlの:ホスト= 127.0.0.1; dbnane = swoole";
の$ this - > connection_obj [] =新しいPDO($ DSN、 'ルート'、 'rootmysql123');
}
}
プライベート関数の__clone()
{
// TODO:__clone()メソッドを実装します。
}
パブリック静的関数のgetInstance()
{
もし(IS_NULL(自己:: $インスタンス)){
自己:: $インスタンス=新しい自己();
}
}
}
MysqlConnectionPool ::のgetInstance();
// swool httpサーバオブジェクトを作成します。
$のSERV =新しいswoole_http_server( '0.0.0.0'、8000);
場合は、ブラウザ// HTTPサーバリンクこの時点、ブラウザは、HelloWorldを送信
$ serv->( '要求'、関数($要求、$応答)に{
// $要求などのパラメータとして、すべての要求された情報を含みます
// $応答は、HelloWorldのように、ブラウザにすべての情報が含まれています
//(2.3)ブラウザのHelloWorldに送られます
$対応 - >終了( "Hello World" の);
});
HTTP //サーバを起動します。
$ serv->スタート();
(3)効果
(4)MySQLの接続プールを改善します
<?phpの
/ **
* PhpStormによって作成されます。
*ユーザー:ルーク
*日:2019年10月30日
*時間:14:12
* /
//書き込みmysqlの接続プール、クラスは一度だけインスタンス化することができます(シングルトン)
クラスMysqlConnectionPool
{
プライベート静的$インスタンス; //シングルトンオブジェクト
民間の$ connection_num = 20; //接続の数
民間の$ connection_obj = [];
民間の$ avil_connection_num = 20; //利用可能な接続
//コンストラクタ接続MySQLは、20mysql接続を作成します
プライベート関数の__construct()
{
{(I ++は$; $ I <の$ this - > connection_num $ I = 0)のための
$のDSN = "mysqlの:ホスト= 127.0.0.1; DBNAME = swoole";
の$ this - > connection_obj [] =新しいPDO($ DSN、 'ルート'、 'rootmysql123');
}
}
プライベート関数の__clone()
{
// TODO:__clone()メソッドを実装します。
}
パブリック静的関数のgetInstance()
{
もし(IS_NULL(自己:: $インスタンス)){
自己:: $インスタンス=新しい自己();
}
自己:: $インスタンスを返します。
}
// SQL操作を実行します
パブリック関数のクエリ($ sqlを)
{
もし(の$ this - > avil_connection_num == 0){
(「一時的に利用できません接続えっお待ちください」)新しい例外を投げます。
}
// SQL文を実行
$ PDO = array_pop(の$ this - > connection_obj);
//利用可能な接続の数を保存
の$ this - > avil_connection_num - 。
接続プールのMySQL接続クエリから削除//使用して実行され、データが連想配列に取り込まれ
$行= $ PDO->クエリ($ sqlを) - > fetchAllの(PDO :: FETCH_ASSOC)。
バック接続プールは、利用可能な接続数に// mysqlの接続1
array_push(の$ this - > connection_obj、$のPDO)。
の$ this - > avil_connection_num ++;
$行を返します。
}
}
// swool httpサーバオブジェクトを作成します。
$のSERV =新しいswoole_http_server( '0.0.0.0'、8000);
場合は、ブラウザ// HTTPサーバリンクこの時点、ブラウザは、HelloWorldを送信
$ serv->( '要求'、関数($要求、$応答)に{
// $要求などのパラメータとして、すべての要求された情報を含みます
// $応答は、HelloWorldのように、ブラウザにすべての情報が含まれています
ブラウザに送信// HelloWorldの
$ = falseを停止します。
しばらく(!$停止){
{試します
$ sqlを= "のid DESCをLIMIT 5によるユーザORDER SELECT * FROM";
$行= MysqlConnectionPool ::のgetInstance() - >クエリ($ sqlを);
$対応 - >終了(json_encode($行));
$ =真停止。
}キャッチ(例外の$ E){
usleep(100000)。
}
}
});
HTTP //サーバを起動します。
$ serv->スタート();