- 締切済み
大量件数のINSERT or UPDATE を繰り返すバッチでの注意点
PHPで、Postgresに対して大量(3万件前後)のINSERT、 もしくはUPDATEを繰り返すバッチ処理を実装しております。 当方、PHP歴が浅く、PHPで大量件数を取り扱う際の注意点やTIPSなどの知識が 乏しく、処理速度の改善や、メモリ使用量の軽量化などを行いたいのですが、 どこから手を付けてよいのやら取っ掛かりすら掴めない状況です。 そこで、有識者の皆様にお伺いしたいのですが、 PHPで大量件数を処理するにあたって、 1.処理速度の改善に役立つTIPS 2.メモリ使用量の軽量化に役立つTIPS この2点をお伺いしたく、何卒宜しくお願い致します。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- みずの(@mizuno3)
- ベストアンサー率73% (192/263)
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%行きそうですね。 なんか取り止めが無かったのですが、そんなところでいかがでしょうか。。