処理速度2500倍の実現方法【スキルモンスター】
私が仕事で主にやる処理はデータ処理。
ひたすらバッチ処理とデータベース。
画面入出力系は個人の好き嫌いで評価がばらつくので、作れるけど避ける。
データ処理にこだわる理由は、単純。
はっきり言って、出来の悪いものが多い。
読み方も書き方もよく分かってない初級者レベル以下の処理が、当然のように一晩中ノロノロ動いている。気持ちが悪い。
そもそも「なぜ夜間にバッチ処理?」というと、「遅いから」が普通。
最近リメイクしたものでは8時間かかっていた処理を6秒にできた。環境が良ければたぶん1秒台もいける気がした。
時間の短縮は分かりやすい要素なので、「約2500倍のパフォーマンス向上を実現しました」とか書いて成果を盛るのも簡単。(嘘ではない)
具体的には?
ある意味企業秘密なので教えにくいけど、超有料級のヒント(というか答え)としては、
COBOLや初期BASICにありがちなループ処理
=1レコード読んで、演算や加工して、1レコード書きだす
このアルゴリズムは負け。いわゆる下手なバッチ。昔の古い読み方ならISAMのほうがいい。
それと、データは塊で考える。塊で読んで塊で加工して塊で書く。
この考えが出来ないとビッグデータは無理。
どうしても1レコード単位の処理が必要で件数がそこそこなら、可能な限りメモリ展開して加工する。(それだけで100倍)
SSDにするだけで10倍から100倍。
とか、色々あるので試してみるとバッチも面白いですよ。