• ベストアンサー

PHPにコネクションプールってあるんですか?

JAVAを使ったwebシステムではDBのコネクションをプールする方法が一般的に用いられますが、PHPでも同じような方法はあるのでしょうか?

  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • gaball
  • ベストアンサー率61% (27/44)
回答No.1

JAVAの場合はJAVAのVMの中で全てのスレッドが動作するため、DBのコネクションを複数のリクエストを処理するスレッドで使いまわす事ができます。 (ここまでは当然ご存知だと思いますが) phpは通常WEBサーバのプロセス内のスレッドとして動作しますから、その中でのコネクションを永続的に使用する事は可能ですが、コネクションをプールして使いまわす事はできません。 例としてapacheの場合ですと、リクエストを処理するプロセスが20個走れば、DBのコネクションは必ず20個必要になります。ただし、一般的なCGIのようにリクエストごとに接続/切断を繰り返す事を避ける方法は存在します。

freshjive
質問者

お礼

なるほど。参考になりました。 ありがとうございました。

関連するQ&A

  • ルータを挟んだコネクションプール

    [Tomcat利用のWebアプリケーションサーバ]~[F/W兼ルータ]~[DBサーバ] という構成のシステムがあります(サーバは互いに別サブネット)。 ここで、Webサーバ~DBサーバ間にコネクションプールを使うか否かで内輪モメしています。 私の考えでは、「無通信のコネクションを張りっぱなしにすると、ルーティングテーブルが一定時間で消去されて通信不能になり、しかもWebアプリはそれを検知できない」なんですが、いまいち自信がありません。 パフォーマンス上、コネクションプールが欲しいのも事実なんですが、この構成で実現できるものなのでしょうか?

  • 接続プール、またはコネクションプールを教えて下さい。

    「接続プール」、「コネクションプール」について質問があります。 MSDNのサイトで「接続プール」に関するサイトを読んでみましたが難しくてあんまり理解できませんでしたが何となく何ですがDBコネクションを共有して使ってパフォーマンスをあげるっていうのはわかりましたが・・・間違ってたらすみません m(_ _)m 申し訳ありませんがこんな私でも簡単にわかるように説明してくれませんでしょうか? 「接続プール」と「コネクションプール」って同じですか? 開発環境は以下のとおりです。 言語:VB.net2005(ADO.net) DB:SQLServer2005 宜しくお願いします。

  • コネクションプールについて

    コネクションプール有とコネクションプール無でDB接続・切断を繰り返したときに どれくらい差があるか試してみようと思いWebアプリ上(フレームワークにStruts2を使用)で 下記コードを実行してみました。 dbcpConnectメソッド(コネクションプール有) と jdbcConnectメソッド(コネクションプール無) をそれぞれ千回づつループで回して実行してみました。 結果は 【コネクションプール有】実行にかかった時間:157384 ミリ秒 【コネクションプール無】実行にかかった時間:158760 ミリ秒 で大差はありませんでした。 コネクションプールを使用するともう少し早いと思っていたのですがそのようなことはないのでしょうか。 public String test4() { // コネクションプール有の接続 long start = System.currentTimeMillis(); for(int i=0; i< 1000; i++) { dbcpConnect(); } long stop = System.currentTimeMillis(); System.out.println("実行にかかった時間は " + (stop - start) + " ミリ秒です。"); // コネクションプール無の接続 start = System.currentTimeMillis(); for(int i=0; i< 1000; i++) { jdbcConnect(); } stop = System.currentTimeMillis(); System.out.println("実行にかかった時間は " + (stop - start) + " ミリ秒です。"); return "jstl4"; } public void dbcpConnect() { Connection con = null; try{ Context context = new InitialContext(); //DataSource ds = (DataSource)context.lookup("java:comp/env/jdbc/library"); DataSource ds = (DataSource)context.lookup("java:/comp/env/jdbc/dhcpTest"); con = ds.getConnection(); Statement stmt = con.createStatement(); String sql = "SELECT * FROM test.test"; ResultSet rs = stmt.executeQuery(sql); } catch(Exception e) { System.out.println("Error"); } finally { try { con.close(); } catch (SQLException e) { e.printStackTrace(); } } } public void jdbcConnect() { Connection con = null; try{ con = DriverManager.getConnection("jdbc:mysql://localhost", "root", "root"); Statement stmt = con.createStatement(); String sql = "SELECT * FROM test.test"; ResultSet rs = stmt.executeQuery(sql); } catch(Exception e) { System.out.println("Error"); } finally { try { con.close(); } catch (SQLException e) { e.printStackTrace(); } } }

    • ベストアンサー
    • Java
  • コネクションプールについて。

    いつもお世話になっております。 MySQLへのコネクションを確保しておく コネクションプールを作成したのですが、 このコネクションプールを利用して Select文を実行した時に 古いデータを取得してくる事があります。 コネクションは一度接続されたら それ以降常時接続し破棄は行なっていません。 その為コネクション内に古い情報が残っているのかなと考え、 これを回避する為には使うたびにコネクションのインスタンスを発行し、使い終わったら破棄しなければならないかという考えに至りました。 しかしそれでは、プールの意味が無くなってしまい本末転倒だと思い煮詰まってしまいました・・・。 お手数ですが、 コネクションプールとはどのように作るのが正しいのか教えていただけないでしょうか?

    • ベストアンサー
    • Java
  • ASPでのコネクションプーリングについて

    表題の通りですが、ASPでDBのコネクションプールを使用したいと思っています。 ネットでのASPでのDBを使用してのコネクションプールに関する情報量が少なく困っている次第です。 ASPでのコネクションプーリングは可能でしょうか? 可能と仮定してですが、使用するDBによって書き方は変わりますか? できたら具体的な方法等教えていただけると助かります。 よろしくお願いします。

  • Javaのコネクションやストリームについて

    Javaのコネクションやストリームを別クラスやメソッドに渡したときの、close処理について質問です。 例えば、あるクラスで取得したDBコネクションオブジェクトを、別のクラスやメソッドに渡した場合、close処理はどこで行うのが適切でしょうか? 呼び出し元で行うのが良いのか、呼び出し先で行うのが良いのか、または、両方で行うべきなのか。 どなたかご教授願います。

    • ベストアンサー
    • Java
  • MYSQLでコネクションを張り続ける

    「MYSQLのデータベースにコネクションを張り続けて、必要なときに情報を格納する」というJAVAプログラムを作成したいのですが、情報を格納する際コネクションが切られていないかどうかを確認する良い方法があったら教えてください。 よろしくお願い致します。

    • ベストアンサー
    • Java
  • PHPからMySQLへのクエリの振り分け方法

    LAMP構成のWebアプリケーションでのDBサーバ増設について質問です。 今までDBサーバ(MySQL)1台で運用していたのですが、 1台増設してレプリケーションを行うことになりました。 DBサーバ1:マスター(新設) DBサーバ2:スレーブ そこで、PHPスクリプトを全面的に見直して、以下のように DBへのコネクション部分を変更する必要が出てきました。 ・コネクション中に一度でも更新系のクエリを発行する場合はマスターへ ・それ以外はスレーブへ これをインクルード先まで追って調査するのは現実的ではないため、 一括で振り分ける方法を探しています。 雑で申し訳ありませんが、環境は以下の通りです。 PHP 5.1.6 (cli) PEAR::DB(1.7.13) MySQL 4.1.22

    • ベストアンサー
    • PHP
  • コネクションハンドル

    DBで出てくる言葉で、コネクションハンドルって何のことなのでしょう?

  • PHPのフレームワークとはどれがいいのでしょうか

    私は、PHPを使ってWEBのシステム構築に携わっております。 いままではフォームの組み込み等の簡単なものだったため、 PHPを記述して対応しておりましたが、大きいシステムのお話などが 出てきだしており、システムの作成をもっと効率化できないかなど 自分のステップアップを考えております。 ある程度の規模に対応でき、システム開発が柔軟に行えるようなPHP フレームワークはございますでしょうか。 Cake PHPやFuelPHP等が出てきますが、多数の種類があるため、 利用者様や学習者様のお声をお聞きしたく、質問をさせていただきました。 DBを利用することも多々ありますので、DBとの連携も容易なものがありがたいです。

    • ベストアンサー
    • PHP

専門家に質問してみよう