2011-08-25 3 views
6

私は4つのコアとPHPを実行しているWebサーバーを持つ単一のデータベースサーバーを持っています。 1つのPHPスクリプトでデータベースサーバに対してクエリを発行できるようにして、各mysqldプロセスで1つずつデータベースサーバ上で並列に実行するようにします。通常、PHPでこれを行います:PHPはApache環境で複数の処理済みのmysqlクエリを発行できますか?

しかし、これらは連続して実行され、1つのmysqldプロセスのみを使用します。このアプリケーションでは、各クエリ(A〜D)はデータの異なる部分を処理していますが、InnoDBテーブルの同じセットで作業しています。

一つの可能​​な解決策は、AJAXがかもしれない並列に実行されますが、私は、ApacheがそれらのAJAXを処理することを推測しているが、順次、クライアントごとに1つのhttpdプロセスを呼び出し、サブスクリプトにそれを打破するようにApacheために呼び出すようにすることです。

これを達成する方法はありますか?誰かがmysqlnd MYSQLI_ASYNC機能の経験がありますか?彼らは単一のデータベースサーバーとmysqli接続と並行して動作することができますか?

目的:グラフを生成するリアルタイムの解析ツールを実行します。私たちはデータベースの処理能力を活用して、時間がかかるクエリを高速化したいと考えています。

答えて

6

必要なものは、非同期クエリの実行です。新しいmysqlndドライバを持っている場合、PHP 5.3から始めることができます。MYSQLI_ASYNCフラグをquery()メソッドに渡すことができます。スクリプトの実行は、クエリが終了するのを待たずに続行されます。 poll() methodのコメントには、PHPマニュアルで利用可能な素晴らしい使用例があります。

並列に実行するクエリごとに別個のMySQL接続が必要です。

+0

私の質問にも示唆しましたが、単一の接続を使用する場合にはこれが確実に機能しますか?複数の異なるサーバーに複数の接続を行う必要はありませんか? – Toxikman

+0

はい、複数の接続が必要です。つまり、クエリごとに1つです。例を持つ 'mysqli_poll()' docsへのリンクを追加しました。 – Crack

関連する問題