- ベストアンサー
サーバに負担をかけずに複数のファイルを開きたいのですが
複数のファイルを順番に開いていきたいのですが(その際、FLOCKを利用したいのですが)、サーバにかなりの負担がかかってしまうようです。負担がかからない方法などがありましたら、教えていただけると大変助かります。何卒よろしくお願いいたします。 具体的には、以下のように記述しているのですが、(素人の根拠のない思いつきで申し訳ありませんが)例えば、1行目の「for($k=1;$k<=15;$k++){」のあとに、「sleep」を入れると、少しは負担が軽くなるものでしょうか? もしも効果があるならば、何秒ぐらいが適当でしょうか? for($k=1;$k<=15;$k++){ #以下の作業を15回繰り返します $file="$k".".dat"; #ファイル名(1.dat~15.dat)指定 open(FILE, "$file"); #ファイルを開く eval{flock(FILE, 2)}; #ファイルロック $/ = ''; $tmp = <FILE>; #ファイル内データを$tmp入れる $/ = "\n"; close(FILE); #ファイルを閉じる } ちなみに、ファイルからデータを読み出すだけでなく、データを書き込むことも頻繁にあるため、ロックしている時間はできるだけ短くしたいと考えております。 何か良い方法がありましたら、教えていただけるとありがたいです。よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
さして差は無いようにも思います。 結局、ファイル操作の回数は変わりません。 (むしろsleep分が増えてしまいますよね) ファイルの開け閉めよりも、 ファイル内のデータの容量の方が重要だと思います。 ($tmpにコピーする分の負荷) それがよほど大量で無ければ、 それほど気にされることも無いと思いますけれども。 #全体をflockしなくていいのかがふと気になります #(余計なことでしたらすみません)
その他の回答 (2)
- rara_sun
- ベストアンサー率50% (271/539)
> ファイルを連続して開閉し続けるのに比べれば負担が軽くなるでしょうか? 基本的には、軽くなります。
お礼
アドバイスいただきありがとうございました。大変助かりました。
- rara_sun
- ベストアンサー率50% (271/539)
気持ちSleepをしてあげると、CPU負荷時間およびHDDアクセス負荷が軽減されると思います。 どの程度の維持間が良いかは、試行錯誤だと思いますよ。 Sleepの目安の一般的なデータはないはずです。 (PCのスペックにより、システムの利用状況により、ETCで変わりますよね?)
お礼
アドバイスいただきありがとうございます。 sleep自体もサーバに負担をかけるのでは?とも思い、使用するかどうか迷っていたのですが、ファイルを連続して開閉し続けるのに比べれば負担が軽くなるでしょうか?
お礼
お礼が遅れて申し訳ありません。アドバイスいただきありがとうございました。大変感謝しております。データ容量を減らすように、工夫してみます。 ちなみに、個々のファイルをロックしている時間をできるだけ短くする目的で(できるだけ早く開放したかったので)全体をflockしなかったのですが、やはり何回もflockを繰り返すのは、サーバへの負担がかなり増えることになるでしょうか。