デスクトップツールとインメモリDB ~アプローチ編~
2015.07.30
こんにちは、久賀です。
以前は検証機のスローダウンについて解決アプローチを書きました。
今回も解決アプローチですが、デスクトップツール作成についてご紹介したいと思います。
また、実装など細かな技術にも触れたいので『アプローチ編』と『開発編』の2回に分けてお送りいたします。
【経緯】
とある業務で顧客単位にExcelにてデータ管理をしていました。
データが確定した段階で顧客に送付しています。
また顧客は特定のグループに属しており、グループ内に属する顧客データをいったん集約し、
グループ内で最適化した結果を再度顧客データとして振り分けて確定データとしています。
この処理をExcelの関数・数式を駆使して行っていましたが、
顧客数が増えるにつれ複雑度が増していきました。
また、手でメンテナンスするにも最適化対象のデータが一顧客あたり3000ほどある為、
人力ではほぼ不可能な状態に達していました。
先に記した通り、確定データは顧客に送付しますので当然期限があり、月初の5営業日内です。
作業期間、データ量、複雑度どれを取ってもExcelツールの限界を示していました。
【最適化ルールの把握】
顧客へのデータ提供ですので、最適化のルールに関しても全て約款や業務規約に記載されています。
これと現状のExcelツール(関数・数式)を元にルールを整理していきました。
【ユーザ要求】
- Excelのデータを集計したい。
- 全ての顧客に於いてファイルフォーマットは統一されている。
- 最適化ルールはグループ毎に異なる。
- 最適化した結果を元のファイルにフィードバックしたい。
- 台所事情と工期を考慮してデスクトップツールで!(サーバが不要になるので)
- でもツール実行中にほかの作業もしたい
- 何故なら、月初の5営業日以内に完了させないといけない業務の一部だから。
- あと、とにかく急いで!(Excelツールが限界に来ているので)
イメージが湧きにくいかと思いますのでここで少々補足しますと、 例えば各支店ごとにExcelでP/L(損益計算書)を管理していたとします。また支店は特定のエリアに属しています。 この同一エリア内のP/L全てを取り込んで集計し、営業利益率に応じてインセンティブ(報奨金など)を付与するようなものです。 ※実際はもっと複雑な観点や振り分けルールがあります。
【アプローチ】
- ExcelでデスクトップツールだとVBAだけど・・・
- 実行中ほかの作業がしたいとなるとクリップボードを利用する処理はNG!
- 自分Java屋だし、VBAより開発&処理パフォーマンスでるなぁ。
⇒以上により、Javaで開発にすることに。 - 残る問題は一番の目的であるデータ集計
集計処理が得意なのはJavaではなくSQL!
⇒デスクトップツールなのでインメモリDBを使おう!
インメモリDBを調査した結果、H2Databaseが最適だと分かりました。
≪調査内容≫
導入コスト:1.5MB程度のjarファイル(Java屋でよかった!)
ベンチマーク:他のDBエンジンに比べて高速
※http://www.h2database.com/html/performance.html
ということで、下記のような構成となりました。
【システム構成】
- 言語:Java7
- 画面:Swing
- DB:H2Database
- F/W:Seasar2 ※DB操作簡略化のため
続いて要件定義です。
【要件定義】
≪機能要件≫
と言っても、そんなにありません。
- ひとつのフォルダに入力ファイルを格納するので、フォルダ選択ができること。
- Excelの入力及び出力ができること。
- 対象グループの選択ができること。
- オペレーションが3ステップ以内であること。
すなわち、- フォルダ選択
- グループ選択
- 集計実行
≪非機能要件≫
- 集計実行時間は10秒程度
- 極力ロギングしない(処理性能重視の為)
- システムリソースを過度に消費しない。具体的にはCPU50%以下、メモリ1G以下。
- ツール内にデータを残さない
【導入結果】
すでに導入しておりますので先に結果だけ示しますと、首尾は上々でした。
ユーザからは感謝の声をいただいております。
元々人手ではできない量でしたので。
ツールを導入し、全てのグループを対象に実施しても数分で完了するので、
投資対効果や作業者の負荷低減に役に立った実感がありました。
【次回】
次回は開発編を予定しております。
CONTACT
お問い合わせ
あなたの「想い」に挑戦します。
どうぞお気軽にお問い合わせください。
受付時間:平日9:00〜18:00 日・祝日・弊社指定休業日は除く