読者です 読者をやめる 読者になる 読者になる

帳票に気をつける

webシステム

仕事の話です。

いま、LAMP環境のwebシステムを作っている。

このシステムにはExcel形式の帳票出力機能があり、設計段階では、PHPExcelを使えばできる!と軽く考えていたのだが、総合試験になって、大層な件数を処理しなくてはいけないことが分かった。

というか、これは、もともと要件定義書に書いてあったことなのだけれど。

 

処理時間が長くなるのは仕方がないとして、メモリを使いまくっている。

それが、何人ものユーザから同時に使われるということで、流石にこれはまずいなと思いはじめ、急遽、仕様を変更した。

 

・変更前

画面から帳票出力指示をして、サーバで帳票を作成し、ブラウザに直接ダウンロードする。

 

・変更後

画面から帳票出力予約をし、帳票作成はバッチから起動した常駐プロセスで行う。

帳票作成バッチは予約順位の早いものから同時処理可能件数を超過しないよう帳票を作成し続ける。

出力予約をした帳票作成状況の確認画面を作成し、作成済みの帳票はその画面からダウンロードする。

 

さらに云うと、Excelに改ページ数の制限があり、データが多くなると、ブックを分割せざるをえなかったことや、PHPExcelもかなりメモリを使うので、メモリを節約するテクニックが必要であったなど、帳票処理は全般的に綱渡り状態であった。

ヒヤリハット

 

いま思えば、昔、帳票作成用にサーバが分離されているシステムを見たことがあったが、同じく負荷分散を考慮しての構成であったわけだ。

オンラインでの大量処理は向いていない。

最初からこういう発想ができればよかった。

 

”要件定義書はよく読む”

”webシステムの帳票はあぶない”

教訓を忘れないために、反省の意を込めてブログを書きました。