awk言語を便利に使いこなせ! #1

2014年11月4日

AWK

開発は、トラブルに対応すると技術もスキルもココロの中身も少し成長する。 数年前に、今の会社に入って、WEBサービスを運営している現場に初めて直面したが、当時一番多かった不具合が、SQLサーバーに関するサーバートラブル。 運用してても、バキューム作業やら、データ容量の圧迫やら、整合性やら・・・ とにかくトラブルの数が圧倒的にSQL。

NoSQLという程、賢いことはしていないが・・・

当時、LAMPを少しかじった程度だったスキルだが、奇抜なアイデアを採用するのが好きだったので、思い切ってSQLを使わないという暴挙に出てみた。 それから2年ぐらいして、紙面に「NOSQL」という文字が大学の研究とかなんだでみるようになって、MONGOなんかが出てきたのを覚えてる SQLを使わないって、どういう風に考えたかというと、1PVあたり1ファイルにして対応してみた。 LinuxのOSのファイルシステムは中々秀逸で、最初は軽快に動作していたが、とあるユーザーが1桁多いPV数を叩きだした時に(といっても月に日に数万程度)サーバーのinodeが吹っ切れて集計トラブルに・・・

コマンドラインは激っぱや

こりゃいかんということで、テキストファイルにログデータをレコードとして書き込み、grep、cut、uniq、sortなどのコマンドを駆使して1ファイルからPV、UU、UserAgentなどを分析してレポート数値を作ってみたところ、なかなか精度よく、数十万レコードぐらいであれば、問題なく動作できるようになった。 これで月間1千万PVぐらいは処理できるようになったが、やはり化け物サイトは存在していて、月間数千万とか1億超えとかのユーザーが来た時を考えると次の手を考えざるをえなくて、コマンドの基礎の基礎であるawkコマンドに辿り着いた。 awkはunix、linux系だとほぼ無条件で入っているので、互換性は抜群。 ※win端末の開発では厳しいが、macでも問題なく使えるので、環境面は問題なし。 言語としては、かなり古い言語なのだが、grepなどのコマンド組み合わせで1ラインで行う場合に色々とリスクもあるが、awkは、配列や関数もあり、awkプログラムファイルを呼び出して使えたりできて非常にオブジェクト思考にも使えることがわかり、PHPと組み合わせて使う方法を習得した。

意外と有名なawk言語

とりあえず、ドットインストールで超カンタンに説明していたので、まずはそれをみてもらって、次回にアンチョコレベルのコードを紹介したいと思います。 http://dotinstall.com/lessons/basic_awk

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。