人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHP pthreads と MySQL


MySQLからデータを取得し、while内でループしながら処理をしています。


↓↓イメージ
while( $row = mysql_fetch_array( $result, MYSQL_BOTH ) )
{
$data = $syori->excute($row["data"]);
mysql_query("insert into hoge ".$data);
}
//1処理とデータinsertに1秒かかる。
//100回の処理では100秒かかる。


この方法ですと、ひとつひとつ順番待ちの様に処理を行う為、処理が完了するまでに時間がかかってしまいます。

マルチスレッドを用いて一度に複数の処理を走らせたいのですが、どの様に記述すればよいのでしょうか?

詳細:
http://qiita.com/rana_kualu/items/02f380f2f3d5020051bb

●質問者: webtomake
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● e_p_i
●34ポイント

insertは一括で行えませんか?
一回一回行っていると通信やトランザクション負荷が大きいと思われます。
まぁ例外処理にもよりますが…。


e_p_iさんのコメント
ではinsertをループ外に出して一括コミットをする事をおすすめします。 システム全体でDBをどういう形で使っているか分からないので、それがシステムに適しているかどうかは分かりませんけれども…。

2 ● tea_cup
●33ポイント

マルチスレッドとか難しいこと考えずに、SQL呼び出すのに時間がかかるのだから、DBから、テーブルまるごと取り出せば良いのでは。

http://d.web5.jp/sql/ の mysql_fetch より抜粋。

//db接続
$con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD);
//データベースを選択
$selectdb = mysql_select_db($dbname, $con);
//指定テーブルから全レコードを読み込むSQL文
$sql = "select * from $tblname where id like \"4\"";
//データセット取得
$rst = mysql_query($sql, $con);

3 ● pogpi
●33ポイント

http://php.net/manual/ja/class.pool.php

$p->submitに、$row["data"]を渡して、runで処理と格納をやればできそうですね。

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ