「みんな教えて! 選手権!!」開催のお知らせ

PHPで、Postgresに対して大量(3万件前後)のINSERT、
もしくはUPDATEを繰り返すバッチ処理を実装しております。
当方、PHP歴が浅く、PHPで大量件数を取り扱う際の注意点やTIPSなどの知識が
乏しく、処理速度の改善や、メモリ使用量の軽量化などを行いたいのですが、
どこから手を付けてよいのやら取っ掛かりすら掴めない状況です。
そこで、有識者の皆様にお伺いしたいのですが、
PHPで大量件数を処理するにあたって、
1.処理速度の改善に役立つTIPS
2.メモリ使用量の軽量化に役立つTIPS
この2点をお伺いしたく、何卒宜しくお願い致します。

A 回答 (1件)

1.処理速度



単純にINSERTで済む場合はCOPY文やpsqlによる手続きが便利かも知れません。

UPDATEとINSERTがどちらも含まれる場合、最初にINSERTとUPDATEの二つに分けてしまった方が早いかも知れません。

SELECT primary_column FROM table_name WHERE primary_column IN (プライマリーキーの配列3万前後);
とかで。

PRIMARYキーが40バイトだったとしても、1MB程度のメモリ量で済みそうです。

2.メモリ使用料について
3万件のデータはファイルに入っていると思うので、単純にfopen+fgetsにしてやればそれほどメモリは使わないんじゃないかと思います。
memory_get_usage()関数を使えれば、実際にメモリ量を見てやると良い気がします。

メモリやPHPの処理よりも、Postgre側やCPU、iowaitの方が厳しくなりそうな気がしますし、問題が発生したら考えてみてはいかがでしょうか。

PHP上ではout of memoryかset time limitくらいでしか止まらない気がします。
マシンスペック次第ではCPUが100%行きそうですね。

なんか取り止めが無かったのですが、そんなところでいかがでしょうか。。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報