PDOの接続プールがどのように機能するのかわかりません。また、検索でどこにも行き着きません。
まず、明確にするために、PDOの接続プールは自動ですか?
そうでない場合、AJAXページでどのように利用できますか?
ローカルのwampserverdevで、mysqliを介してデータベース接続を1回あたり10ミリ秒で行う時間コストを記録しました。待機時間を、可能な限り0に近づけようとしています。これは私の最後の問題の1つです。
PDOの接続プールがどのように機能するのかわかりません。また、検索でどこにも行き着きません。
まず、明確にするために、PDOの接続プールは自動ですか?
そうでない場合、AJAXページでどのように利用できますか?
ローカルのwampserverdevで、mysqliを介してデータベース接続を1回あたり10ミリ秒で行う時間コストを記録しました。待機時間を、可能な限り0に近づけようとしています。これは私の最後の問題の1つです。
持続的接続について話している場合は、ここを参照してください:http: //php.net/manual/en/pdo.connections.php
永続的な接続は、さまざまなAJAXリクエスト間で開いたままですか?
はい、そしてそれらが決して再利用されないというリスク。@carefulnowに感謝します。ここで彼のコメントを引用します:
持続的接続と接続プールは同じものではありません接続プールは最初に多くの接続を作成し、アプリケーションはそれらのすでに確立された接続の1つを取得するだけです。持続的接続は新しい接続を確立しますが、明示的に指示されない限り閉じません(通常の接続はスクリプトの最後で閉じます)。ほとんどのデータベースは最大接続数を実装しており、ヒットするとそれ以上の接続を拒否するため、永続的な接続は注意深く使用しないと危険です。ほとんどの場合、通常の接続(DSNとログインの詳細を使用してPDOコンストラクターを呼び出すだけ)で問題ありません。
PHPコードと、その結果の接続数をMariaDBコンソールモニターに表示して説明します。次のスクリーンショットを見て、右下の「実行回数」に注意してください。持続的接続を使用している場合、接続は閉じず、代わりにスリープモードになります。接続#231を無視します。これはコンソールモニターです。 http://i.imgur.com/IL42tjF.png、http://i.imgur.com/aDvl7F7.png、http://i.imgur.com/IuFEEvO.png。_ _ _ _ ご覧のとおり、時間列は接続されている時間ではなく、非アクティブの長さを示しています。したがって、SHOW PROCESSLIST;を実行したばかりなので、コンソールモニターの時間は常にゼロです。これですべてが少しクリアになることを願っています。データベース接続の管理は非常に難しい場合があります。
したがって、スクリーンショットを見ると、これらの持続的接続を再度取得する方法についての質問が開かれています。StackOverflowに関するいくつかの回答によると、それらはスレッドレベルでキャッシュされるため、複数のスレッドがある場合(これは非常に期待されます)、多くの接続を取得します。これにより、mysqlの接続制限に遭遇するリスクが生じます。永続的な接続を使用する前に、それらがどのように機能するかを理解していることを確認してください(私は理解していませんが、@ carefulnowのようです:-))
持続的接続を期限切れに設定することは可能ですか?
PHPのドキュメントには、キャッシュされていると書かれているので、しばらくするとクリーンアップされると思います。
@fabianによって提供された同じリンクでも、次のことがわかります。
<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, array(
PDO::ATTR_PERSISTENT => true
));
?>
Note: If you wish to use persistent connections, you must set PDO::ATTR_PERSISTENT in the array of driver options passed to the PDO constructor. If setting this attribute with PDO::setAttribute() after instantiation of the object, the driver will not use persistent connections.
Pdopersistentは複数のmysqlリクエストを含む任意のURLを1つの接続として使用します。ページがリロードされた場合、またはpdo接続で他のphpページにアクセスした場合、新しいpdo接続のみが作成されます。サーバーですでに作成されている静的SQL接続が必要であり、それをページで再利用します。ページが読み込まれる前のグローバル宣言のように。Expressを使用したノードmysqlパッケージでのみ可能です。Express jsでは、mysqlプール接続をグローバル宣言として構成できます。
nodejsでmysqlおよびexpressnpmモジュールを使用して接続プールを使用できます。そして、ノードにhttpサーバーをセットアップし、 POSTリクエストでhttp://127.0.0.1:1000/getdataのようなAPIを介してエクスプレスサーバーにリクエストを送信します。次に、postリクエストを作成するためのストリームコンテキストでfile()メソッドを使用して、phpをゲッターとして使用します。実行に時間がかかるため、curlは使用しないでください。Expressjsサーバーから返されるデータを確認するためにwhileステートメントを使用します
この投稿はモバイルで作成したので、使用するための説明されたコードを提供することはできません。誰かがサンプルコードを必要とする場合。GitHubリポジトリに投稿します。コメントを共有する