質問: @fopen(“ファイルまでのパス/log.txt", "a") or die("Log Error"); flock($fp, LOCK_EX); fputs($fp, $log); fclose($fp); ?> ``` ログを撮りたいファイルにinclude_onceして使うイメージです。 ふと、このあたりちゃんと勉強せずに使っていたなぁと思い、webであちこち調べましたが、ファイルを開いてポインタを移動するだけなのでメモリの圧迫はないだの無視できるだのの記述はあるのですが、ポインタの移動時間について触れている記述が見つかりません。 Q1. ファイルを`fopen` `a` で開いて、1行書き込んで、クローズという簡単な作業なのですが、ファイルの中身の行数が増え数十万行とかになってきた場合、オープンの時間や、ポインタを最終行に移動する時間は増えるものなのでしょうか? Q2. 簡単な処理なので、データベースを使うまでもないという考えなのですが、データが増大した場合データ保存部分はDBに投げしてしまった方が、処理時間がかからないのでしょうか? (個人的にはDBの接続手続きの方が時間がかかりそうなイメージを持っています。) ### 試したこと 1万行ぐらいまで試してみましたが、ログ書き込みよりもページのHTML描画やjavascriptの処理の方が時間がかかっている感じでしたので、上記スクリプトをincludeするだけのページも作成してみましたが、一瞬で終わってしまいます。 ### ご存知の方がいらっしゃいましたら、アドバイスお願いします。
回答: Q1: ファイルポインタをファイルの特定位置に位置づける時間はその移動距離にはほぼ無関係です。 小さいファイルだと、先頭に位置づけるのと末尾に位置づけるのは同じ時間だし、大きなファイルでもディスクを1-3回くらい余分にアクセスするくらいです。実用上は同じと考えて良いでしょう。 Q2: 書き込む時間の話だけであれば、単なるファイルの方が速いです。