ISUCON5の予選に参加して惨敗してきました #isucon

ISUCON5の予選に参加して惨敗してきました。チーム名は「T・D・U!T・D・U!」。大学で同じ研究室だった友達を誘った&&「googleの大学名の検索結果がおかしくなった事件」の画像の作成者がチームメイトだったので、この名前にしてみました。

事前準備

僕以外の二人は初参加です。

事前に一回集まって前回のISUCON予選の課題を解いたり、bitbucketに今回用のリポジトリを作ってwikiに秘伝のタレをまとめたりしてました。

あと、食料の買い出しなども。

当日

Skypeボイスチャットでやりとりをしながらリモートで作業しました。

コミットログから当日のタイムラインを作ってみるとこんな感じです。(みんなの成果です。)

  • 〜12:00 秘伝のタレをアプリに適用、コードをgit化して提出用インスタンスを作成
    • nginxで静的ファイル返すとかunix domain socketとかmemcachedのsessionとか
  • 〜14:00 ログインのhtmlをキャッシュしてみたり、インデックスを貼ってみたり、アプリのSQLを修正してみたり
  • 〜16:00 '/'のN+1をやっつけたり、friend_mapを最初に取得してfriend_mapをつかってis_friendの代わりにしてみたり
    • この辺りでスコアは2000くらい
  • 〜18:00 いろいろ力尽きてインフラ周りのチューニング

言語はrubyで、最後に取ったスコアは5000点くらいでした。

良かった点

秘伝のタレで用意したタレはテンパった状態でもサクッと適用できた。事前準備大事。

反省点

いろいろあるのですが。

リモート辛い

skypeボイスチャットとslackではいろいろ情報のやりとりが大変なので対面でやったほうがいいです。 ちょっと画面みてよ、とかできないので。情報共有の難しさがあったなーと。

当日時間を気にしてテンパる

テンパりました。

  • プロファイルするためのgemを入れる。
  • アプリを把握して、更新のあるテーブル、ないテーブルを確認する。
  • dbのschemaとプロファイル結果を見比べてindexを貼る

みたいな必ずやるべきことがうまくできなかったです。ちゃんとプロファイルしてその内容から修正しよう。。

作業分担しておくべきだった

得意不得意あるので、事前に作業分担をしておくべきでした。 久しぶりに集まったので作業分担で遠慮しちゃう部分があったり二人で同じことやったりとか、効率悪かった部分が。

最後に

今年もTop20に載ることなく終わりました*1。来年は一瞬でも載って盛り上がれるよう精進したいです。

運営、出題のみなさん、すばらしい問題をありがとうございました!

*1:去年も参加しましたがブログを書いていません。すみません。。