当日
チーム MONOS で参加
開始前
朝早すぎる、9:40 なんか間に合わなかったが、開始時刻には間に合った
11時まで
ベンチがうまく回らない。計測結果が出なかった。とりあえず規則熟読、サイトを触ってみて、コードを読み始めていた。
午前中
NG word
計測が出ていなかったので、NG word 職人をしていた。NG word の判定をアプリ側で行うようにしたり、必要のない実装を消したりした。
ランキング
N+1 (select 関数 where hoge) を group by で解消
中盤戦
計測結果が出た。できるだけ上位のものに取り掛かる
予約機能
いらない Select を削除
fillUser の修正
これがやばかった。fill~という関数の依存関係がかなり密で、fillUser を呼んでいるところも多かった。全体の高速化は煩雑になるためあきらめ、特にボトルネックとなっていた、GET /api/livestream/:livestream_id/livecomment と GET /api/livestream/:livestream_id/reaction から、fillUser までの部分が早くなるように修正を行った。 この呼び出され方では livestream_id は一意であることをドメイン知識として入れ込むイメージでの実装。 ここで点数が倍の 3 万くらいまで伸び、瞬間 2 位になった。
終盤戦
search の修正
fill 関数のループ削除をしようとした。しかし、逆に点数が落ちた。noe くんの助言を受け、一部のみを適用したところ点数が少し上がった。
結果
最終結果としては 11 万点ほど、700 人中 13 位。これまで 3 回ほど出てきたが、ようやくまともに戦えるようになったなと思う一方、キャッシュ化、nginx、インフラ周りといった知識のない部分が多すぎるため、これから学んでいきたい。
その他
saza くんは、ansible 含むインフラ周り、分散+今回一番難しい DNS 改善に挑んでいた。私にはよくわからない部分をやってくれていたので、感謝。 noe くんは、icon 含むデータのキャッシュ化、SQL, アプリ改善に挑んでいた。割と近めな部分+私が怪しい部分をやってくれており、ISUCONらしいワイワイ感を感じていた。感謝。