質問: PHPを使って2つのCSV(参照用と更新用)ファイルを開き、内容を編集するアプリケーションを作ろうと考えています。(※イメージ的にはphpMyAdminみたいな感じです) 個人で使うツールなので複数のユーザーが同時に編集することは考慮していません。 Webアプリケーションはステートレスなのでページを更新するたびに新しくデータを作り直さないといけないと思います。 1. csvファイルの読み込み 2. 配列への格納 3. 処理 4. csvファイルの書き出し(更新がある場合) 私が今の知識で開発するとこれら一連の処理が毎回走ることになり、小さなファイルならいいのですがcsvファイルが大きくなるとサーバーの負荷も大きくなりそうで心配です。 ※参照用50M、更新用100Mあります こういうアプリケーションはPHPを使ったWebアプリケーションとしては不向きでしょうか? csvファイルを格納した配列をメモリ上に保持し続ける方法はないものかと調べましたがわかりませんでした。 * セッション変数に保存 * csvファイルの読み込みをキャッシュする * javascriptを使ってローカル(ブラウザ上?)で処理 上記の様なアプローチを考えてみましたが、素直に一時的なデータベースに保存する方法を採用するべきなのかなぁ...と思いつつも技術的にcsvファイルのまま処理するいい方法があれば知りたいです。 よろしくお願いします。 --- 12/28 追記 --- やはりcsvファイルのまま取り扱うのは無理がありそうです。 csvファイルを一時的にデータベースに取り込み、処理が完了してから書き出す方法を採用しました。
回答: 起こりうる問題 ======= CSVファイルでデータを永続化する際、起こりうる問題の一例を示します。 掲示板のようなWEBアプリケーションにおいては、複数のユーザーが同時刻にアクセスしていることは稀ではありません。 前提 AさんとBさんがアクセスしています。 記事が十件すでに書き込みされています。 経緯 (1) Aさんが新しく書き込みしようとしています。まだ書き込み(保存はしていません) (2) Bさんも新しく書き込みしようとしています。Aさんよりも早いタイミングで書き込み(保存)をしました。11番目に書き込みされました。 (3) 次にAさんが保存ボタンを押しました。 結果 Bさんの投稿がなぜか消えてしまいました。 こういった同時アクセスの処理について安全にデータを守る仕組みが取られていないCSVの書き込みサンプルが見受けられます。 データベースを利用する理由は、「楽だから」に尽きるのです。確かにSQLを覚えたり、DBを操作するためのプログラムを覚える必要はありますが、多くの開発者がデータベースを利用するのは、CSVで扱うなんてめんどくさいことしたくないからなんです。