【LLTVレポート】劇的ビフォーアフター、匠の技(後編)
システム統合にSOA? RDBMS? bashで十分!
2009/09/07
毎年夏に開催される軽量プログラミング言語(LL:Lightweight Language)をテーマにした「LLイベント」。第7回目となる「LLTV」が、2009年8月29日に東京・中野で開催された。この記事ではプログラムの一部、「大改善!!劇的ビフォーアフター」をレポートする。前編では、Rubyによるfortuneコマンドの“増築”と、Firefox拡張によるslコマンドの実装というネタ系発表をレポートした。中編ではC言語にLisp風のマクロを取り入れ、lsコマンドのソースコードを約半分に削減する匠の技をレポートした。後編となる本記事では、売り場業務が滞りがちだった販売管理システムをbashコマンドで“建て直した”という劇的ビフォーアフターの発表をレポートする。
DBを捨ててテキストファイルに変換
「100万件ぐらいの検索なら、シェルだけでも1000分の数秒でできます」。こう豪語するのは「パイプの匠」として紹介されたUSP研究所の當仲寛哲氏だ。當仲氏らが改修した良品計画(無印良品)の情報システムは、一般的なPCにLinuxを搭載したシステムで、「シェルスクリプトだけで、バッチ処理、Web画面作成、運用監視などすべて行っている」という。
當仲氏らが改修に取り組む以前、無印良品の情報システムは、いくつか問題を抱えていた。商品検索、在庫確認、発注システム、社内電話帳など、個別システムがバラバラに存在したために、「顧客の商品の問い合わせに回答するために複数のシステムにまたがった作業が必要で、手間と時間がかかる」という状態で、店頭で顧客を待たせる結果になることが多かったという。
當仲氏は、このシステムを、Linuxの標準コマンドと自作コマンド群、bashスクリプトで劇的に改善したという。
まず、RDBに入っていたデータを「全部生データで吐き出せと、プレーンテキストに変えてしまった」(當仲氏)という。データベースは一切使わず、いわゆるマスターデータも含めてデータはすべてテキストファイル。「データベースと違って更新という概念がない。発生したデータはすべて残していく、大福帳方式」(當仲氏)。テキストファイルであるため、圧縮やバックアップにも特別な仕組みは不要だ。
コマンドを自作、パイプ処理でアプリ作成
テキストとして記録したデータのカラムを足し合わせたり、最新のものを切り出したりといったテキスト処理だけで複雑な業務処理を行う。さまざまなテキストデータを加工、統合して、HTMLファイルまで作ってしまうという。それまでバラバラだったシステムも、「1画面で、すべての情報が見れたり、連携ができるようになった」(當仲氏)。
テキストの処理には標準コマンドのほか、「Linuxのコマンドでは足りないので、C、Java、Pythonで自作コマンドも作っている」(當仲氏)。例えば、フィールドのセレクト(self)、サムアップ(sm)、縦横変換(map)、桁揃え(keta)など自作コマンドやsed、awkを組み合わせ、「コマンドをパイプでつないで加工して、つなぐだけで最終的な形を作っている。長い場合にはパイプを30本ぐらい一気につなげて書くようなアプリもある」(當仲氏)という。bashのシェルスクリプトとして書かれたアプリのソースは、短く、読みやすい。データベースのようにスキーマがないため、項目の追加や変更も容易で、システムの改変や新規アプリの開発が機敏にできるのが特徴だという。「ユーザーのニーズを低コストであっという間に作れる」(當仲氏)。
テキストファイルとはいえ膨大な商品点数を扱うため、1つのファイルに数十万行が含まれるケースもある。「(テキストファイルを検索したり書き換えたりすると)遅いんじゃないかと思われるかもしれませんが、最近のPCは非常に速いので、ファイルサイズが1GBぐらいあっても全件なめるのに10秒を切る」(當仲氏)。ソートも十分に高速で実用的という。
當仲氏はデモンストレーションとして、26万レコードを含む商品データをgrepで検索しても、たかだか0.5秒で全文検索が終了することを示してみせた。さらに、商品名を1文字ずつ切り出して、それらの文字をファイル名に含むようにしてマスターファイルを分割。この分割したファイルを検索対象とすることによって100万点の商品検索であっても所要時間を1000分の1秒オーダーに縮めることが可能ということを実演してみせた。
サイロ化する業務システムの連携強化や統合といえば、「SOAやWebサービスによる疎結合」という話がITベンダの提案のお決まりコース。数十万点を超える商品データベースとなれば、もちろんRDBMSの出番だ。しかし、すべての企業の情報システムで、本当にそのような大げさな仕組みが必要なのだろうか? 當仲氏らの成功事例は、21世紀になった現在も、標準入出力とパイプ、小回りの利くコマンド群の組み合わせというUNIX設計哲学を踏襲したアプローチが通用する領域が、思いのほか広いことを示しているのかもしれない。
関連記事
情報をお寄せください:
- GoのPrint文、forループ、if文 (2009/12/24)
Goをインストールして、ミニマムなコードを書いてみよう。forループは2つの書き方ができる - 並列処理プログラミングの基本用語 (2009/12/18)
「並列化されていないコードよりは速い」コードを書いてみよう。まずは、基本のキから! - Salesforceで開発するということ (2009/12/14)
クラウドプラットフォームを打ち出したSalesforce。Force.com上でのアプリケーション開発を学ぼう - 3rdRailでプロファイリングしよう (2009/12/11)
アプリケーション完成で終わりではない。よりよいものにするために性能評価をして、改善しよう
|
|
スポンサーからのお知らせ
- - PR -
@IT「Windows 7」 特設サイトオープン! 最新情報・移行ノウハウを公開しています |
Hyper-V 2.0の目玉機能「ライブ・マイグ レーション」他、関連情報を一挙紹介中 |
専用サーバじゃないのにCPUもHDDも専有! さくらの新サービスを使ってみた |
プラグインツールでPCの消費電力を削減!? コスト増・CO2削減義務の対策を始めよう |
“報復行為”の通報も? ソフト不正利用 リスクに対処するIT資産管理ツールとは |
“簡単にはじめられる”情報漏えい対策と クライアントPC管理のポイントを紹介 |
CADライクな機能とOfficeの操作性を兼備 工場設計現場で活用されているVisio事例 |
もう限界だった? 従来のセキュリティ 新時代の情報漏えい対策を3社に聞く |