isucon9は 最終スコア 8,860 で予選敗退でした
ISUCON9 に さばかんちゃーはんかれー として参加してきて、予選敗退してきたので記憶が薄れないうちにブログにまとめてみます。
日程など 二日目の 9 / 8 に予選を行いました。一緒に参加したメンバーは、 @matsukaz , @peto_tn です。
去年受けた時は結構何回か集まって予習を入念に行いましたが、今回は事前に集まる機会がなく当日集合して色々作戦を練ったりしながら進めました。
やったことなど 9:30 ~ 現地について、コンビニでリポD とレッドブルーとご飯を購入してお借りしたオフィスに向かいます。到着したらウィダーを飲みつつレギュレーションに再度目を通したり、開始後の初動をどうするかなどを話したりしました。
10:00 ~ こちらのissueのやり方がすごく良さそうだなーと思ったので、アプリを触って全体像を把握したりしました。
https://github.com/catatsuy/isucon7-qualifier/issues/1
具体的にやったこととしては以下のような感じです。
アプリを触ってサービスの理解 API, ページのパスを一覧で書き出す DBのスキーマ一覧をissue仁書く ソースコードリーディング みていく中で気になった点としては、以下のような感じです。
カテゴリデータがマスタデータである(キャッシュできそう) 商品のDescriptionがやたら長い QRCodeのpng のバイナリがDBに保存されている 重そうなクエリ /users/transactions.json の N+1 静的ファイルを http.FileServer で配信してる ( nginx で配信すれば良さそう ) 他の二人には、インフラ周りのprofileの準備や、デプロイスクリプトなどの整備をおこなってもらいました。
11:00 ~ items の description が データが大きい割には使っているところが少ないのでできるだけ取得しないようにする作業をひたすら行いました。 細かくですが、ちょっとずつスコアが上がっていったように思います。 SELECT * FROM items として取得している箇所をひたすら撲滅していきました。
14:00 ~ /users/transactions.json の N+1 クエリを撲滅する作業を行いました。SQL力が足りずにここで結構時間を食ってしまったように思います。 このN+1 でもスコアが少しずつ上がっていきました。