【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画面作成、運用監視などすべて行っている」という。
當仲氏らが手がける情報システムは、UNIXのパイプ処理をベースにしているという當仲氏らが改修に取り組む以前、無印良品の情報システムは、いくつか問題を抱えていた。商品検索、在庫確認、発注システム、社内電話帳など、個別システムがバラバラに存在したために、「顧客の商品の問い合わせに回答するために複数のシステムにまたがった作業が必要で、手間と時間がかかる」という状態で、店頭で顧客を待たせる結果になることが多かったという。
當仲氏は、このシステムを、Linuxの標準コマンドと自作コマンド群、bashスクリプトで劇的に改善したという。
まず、RDBに入っていたデータを「全部生データで吐き出せと、プレーンテキストに変えてしまった」(當仲氏)という。データベースは一切使わず、いわゆるマスターデータも含めてデータはすべてテキストファイル。「データベースと違って更新という概念がない。発生したデータはすべて残していく、大福帳方式」(當仲氏)。テキストファイルであるため、圧縮やバックアップにも特別な仕組みは不要だ。
コマンドを自作、パイプ処理でアプリ作成
テキストとして記録したデータのカラムを足し合わせたり、最新のものを切り出したりといったテキスト処理だけで複雑な業務処理を行う。さまざまなテキストデータを加工、統合して、HTMLファイルまで作ってしまうという。それまでバラバラだったシステムも、「1画面で、すべての情報が見れたり、連携ができるようになった」(當仲氏)。
作成するbashスクリプトは、コマンドを組み合わせた多段パイプ処理テキストの処理には標準コマンドのほか、「Linuxのコマンドでは足りないので、C、Java、Pythonで自作コマンドも作っている」(當仲氏)。例えば、フィールドのセレクト(self)、サムアップ(sm)、縦横変換(map)、桁揃え(keta)など自作コマンドやsed、awkを組み合わせ、「コマンドをパイプでつないで加工して、つなぐだけで最終的な形を作っている。長い場合にはパイプを30本ぐらい一気につなげて書くようなアプリもある」(當仲氏)という。bashのシェルスクリプトとして書かれたアプリのソースは、短く、読みやすい。データベースのようにスキーマがないため、項目の追加や変更も容易で、システムの改変や新規アプリの開発が機敏にできるのが特徴だという。「ユーザーのニーズを低コストであっという間に作れる」(當仲氏)。
テキストファイルとはいえ膨大な商品点数を扱うため、1つのファイルに数十万行が含まれるケースもある。「(テキストファイルを検索したり書き換えたりすると)遅いんじゃないかと思われるかもしれませんが、最近のPCは非常に速いので、ファイルサイズが1GBぐらいあっても全件なめるのに10秒を切る」(當仲氏)。ソートも十分に高速で実用的という。
當仲氏はデモンストレーションとして、26万レコードを含む商品データをgrepで検索しても、たかだか0.5秒で全文検索が終了することを示してみせた。さらに、商品名を1文字ずつ切り出して、それらの文字をファイル名に含むようにしてマスターファイルを分割。この分割したファイルを検索対象とすることによって100万点の商品検索であっても所要時間を1000分の1秒オーダーに縮めることが可能ということを実演してみせた。
26万行のマスターファイルをgrepしても0.5秒。26万行というと、そこそこのサイズに思えるが、実は68MBしかないし、今どきのPCは非常にパワフルなので検索やソート処理も楽々というわけだ
商品名の先頭文字別にマスターファイルを分割すれば、さらに検索は高速にサイロ化する業務システムの連携強化や統合といえば、「SOAやWebサービスによる疎結合」という話がITベンダの提案のお決まりコース。数十万点を超える商品データベースとなれば、もちろんRDBMSの出番だ。しかし、すべての企業の情報システムで、本当にそのような大げさな仕組みが必要なのだろうか? 當仲氏らの成功事例は、21世紀になった現在も、標準入出力とパイプ、小回りの利くコマンド群の組み合わせというUNIX設計哲学を踏襲したアプローチが通用する領域が、思いのほか広いことを示しているのかもしれない。
関連記事
情報をお寄せください:
- [ニッチ]E4Xで攻撃できる? できない? (2010/2/8)
ECMAScriptでXMLを扱う「E4X」。ニッチかもしれませんが、攻撃の可能性があることだけは知っておきましょう - GAE上でLL+RDBアプリを作ろう (2010/2/3)
開発者にとって魅力的な環境に映るGoogle App Engine。これまでの開発手法を変えずに使えないだろうか - 豆まきユースケースの包含 (2010/2/1)
デバッグが上手くいかず、気分転換にもらった豆をポリポリ。節分のユースケースを考え始めます - Apacheで仮想ホストを動かそう (2010/1/29)
1台のApacheサーバで、複数の公開サイトを提供するには? 仮想ホストの設定の意味を知ろう
|
|
スポンサーからのお知らせ
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | 企業の仮想化に足りない“発想”とは? 仮想化運用管理のキモは意外なところに! New! |
| ◆ | 操作もマニュアルも分かりやすい! ユーザー視点で開発されたPC管理ツール New! |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |

| ◆ | セキュリティを知り尽くす上野氏が登壇! @ITメールソリューションLive! in Tokyo |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
| ◆ | 世界に通用するストレージの作り方とは? 製品に込めた思いを富士通の開発者に聞く |

| ◆ | OSSで手間も時間も、障害も減った―― 「マピオンの事例」オープンソース活用法 |
| ◆ | 「ノートPCの持ち出し禁止」で大丈夫? 情報漏えいを防ぐ管理手法とインフラは? |
| ◆ | 1日の処理を1秒に――MySQLの達人が語る 「コスト削減」できるチューニング |

| ◆ | ドキュメント作成を自動化して、SEの作業 効率を大幅アップ! Visio 2007の魅力 |
| ◆ | 急速に広がるHyper-Vでのサーバ仮想化 そのベストプラクティスをデルが解説 |
| ◆ | @IT主催セミナーで語られた、「担当者に 求められるセキュリティ対策」をレポート |

| ◆ | @IT「Windows 7」 特設サイトオープン! 最新情報・移行ノウハウを公開しています |






