はしろぐ

メモメモ

MVCのサーバー側の処理が重かった時の話

環境

Visual Studio 2013

MVC によるWEBシステムでの出来事り

 

やろうとしてること

クライアント側からCSVをアップロードして、サーバー側でデータの解析・DB登録の処理を行う。

 

困ったこと

サーバー側での処理に時間がかかると、クライアント側がタイムアウトして、ブラウザがタイムアウト画面になる。

 

考えた対応策

・サーバーで処理をする前に、クライアント側に処理を返してあげる

・サーバー側の処理速度を改善する

 

実際にやった対応策

・サーバー側の処理速度をあげる

 

当初やってたこと

① 受け取ったCSVファイルのデータを分割していく

② 分けたデータ数の回数だけループを回す

③ そのループの中でモデルをnewしてデDBに追加

④ 全データ追加後に最後にDB登録

 

改善したこと

ループの中でnewしない!

そりゃ重くもなる!

 

① 受け取ったCSVファイルのデータを分割していく

② モデルの配列を作る(1000個の配列)

③ 分けたデータ数の回数だけループを回す

④ DBにデータを追加する

⑤ 1000件毎にDBの登録処理を行い、ループのカウントをリセットする

⑥ ループを抜けたところでDBに追加したデータの残りを登録する

 

ネットワークの関係でどうにも通信がうまくいっていない感じがあるけど、ちょっと勉強になった。

ちなみに配列を1万件や500件とかにしてみたけど、1000件くらいがちょうど良い感じで処理が動いていることがわかった。

 

上の③のなかで、サーバー側にテキストを作成して、そこに進捗状況の件数を出力して、クライアント側で定期的にそのテキストを取得することで、ロード状況の表示ができたー

 

ソースコードのサンプルは余力あれば後日記載よてい