• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:CGIを作動させてサーバにかかる負担の問題)

CGIを使ってCSVデータをソートする方法について

このQ&Aのポイント
  • CGIを使用してCSVデータをソートする方法について相談があります。ソートプロセスを経て、別のCSVファイルに出力する必要がありますが、サーバの負荷を考慮する必要があるようです。さくらインターネットのレンタルサーバのスタンダードプランでこの処理を実行する際に問題が発生する可能性があるかどうか、また対策がある場合は教えて欲しいです。
  • 質問者はCGIを使ってCSVデータをソートする必要がありますが、さくらインターネットのレンタルサーバのスタンダードプランでこの処理を行うことに問題があるかどうか知りたいと思っています。また、もし問題が発生する場合はどのような対策が取れるかも教えていただきたいです。
  • CGIを使用してCSVデータをソートする必要がありますが、さくらインターネットのレンタルサーバのスタンダードプランで実行することに問題があるかどうか教えてください。行数が多いデータの場合は特に注意が必要であるとのことですが、どのような対策があるかも教えてほしいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • asciiz
  • ベストアンサー率70% (6849/9743)
回答No.1

そうですね、20,000行であれば、ザックリ扱うデータの5倍のメモリ量を使うと考えればいいでしょうか。 扱うデータは100文字×20,000行=2,000,000バイト=2Mバイト、5倍で1回の処理に付き10MBぐらいメモリを使うのではないかと。 さてそうすると、スタンダードプランですらメモリ割り当ては数十GBあるので、処理1回こなすのに何の問題もありません。 ただ、Webアプリケーションというのは、複数人からアクセスされます。 同時に10人が処理を行えば、そのスクリプトが動いている間10×10=100MBを食うし、同時100アクセスがあれば一時的にメモリ1GBを使う、というようなわけです。処理に時間のかかるスクリプトであれば、同時稼働する確率も上がります。 ですから逆に言えば、多少重いアプリケーションであったとしても、同時に数名・数十名程度からしか使われないのであれば(メモリ量的には)全然問題ありません。 ただし、「同時に複数プロセスで起動される可能性がある」という点には考慮しておかなければなりません。 自分だけで使うプログラムのように、ファイルを読んで、ソートして、書いて、とやってしまうと、最後の『書いて』を実行前(あるいは実行中)に別プロセスの『読んで』を実行してしまう可能性があります。 そうすると、別プロセスでは更新前のデータを読んで、そこに挿入し、出力する→前の処理が反映されなかった、なんてことが発生する可能性があるわけです。 ロックファイルを用意して、1秒ごとにチェックし、それがある間は処理を開始しない、なんてことをすればいいかもしれません。 (チェック間隔を空けないと、ロックファイルがなくなった瞬間に待たされていた複数プロセスが同時に動き出し、新ロックファイルの作成も間に合わない、なんてことがあります) あるいは、更新データをキューに追加するデータ受付のプログラムと、キューからデータを取り出して実CSVデータを更新する、と言うプログラムに分けて、非同期で動かすのも良いかもしれません。 …まあそれを自動的にやってくれるのがデータベースというものですが。 データベースを使ったプログラムの場合、他のアプリを気にせず、自分の希望するSQL文をデータベースに投げれば良いです。 データベースエンジンの方では、いろんなアプリから投げられたSQL文を順次処理して、データベースファイルを更新します。 ファイルを更新するのがデータベースエンジンだけであるので、整合性が保たれます。 ---- なんだか話が大きくなってしまいましたが、ソート済みのデータに、もう一つデータを挿入する、というだけであれば、sort関数(クイックソート)を使わず、自分で挿入プログラムを書いた方が省メモリかつ高速かもしれません。 ・挿入位置となる所までファイルを読み、書き出す ・追加データを出力 ・残りの部分を読み、書き出す これをこのまま実装した場合、消費メモリは現在読んでいるデータ1行分しか必要ないでしょう。 あるいは高速化のためにファイル全体を一気に読み書きするとしても、メモリ使用量はファイルサイズの約2倍。といった感じになるでしょう。 同時アクセスの件は考えなきゃいけないんですけど…。

R4-D4
質問者

お礼

ありがとうございます。 メモリ使用量って、そういうふうに計算するのですね。 とても参考になりました。 CGIは特定の上司しか使えないようにパスワード制限しますので、アクセス数は全く問題無さそうです。 ご教示ありがとうございました。

関連するQ&A