ISUCON12にチーム using namespace std; で参加して最終スコアが16000ぐらいで42位ぐらいでした。決勝進出ならず。 時系列の情報とかはチームメンバーが大体まとめてくれているので、ざっくり自分がやったことについてまとめて行きたいと思います。

やったこと

私は主にアプリケーション側の改修の担当でした。

  • sqliteにindexを張った
  • bulk insertを使ってinsertを高速化
    • playerとplayer_scoreどちらもbulk insert
  • /player エンドポイントのN+1を潰す
    • チームメンバーが書いてくれたクエリをもとにいい感じにした
  • /ranking エンドポイントのN+1を潰す
  • スコア入稿のエンドポイントのN+1を潰す(マージできなかった)

あとはsqliteのlogトレース用のスクリプトを作ったりしました。

(無理やりbulk insertとselect in に対応してる。。。)

反省点

色々反省点はあります。

  • 初動が遅い
    • アプリケーションの改修に手をつけられてるのが12時とか13時とかで、もう一時間か二時間前に手を出せた感がある
    • ここで慎重になってしまったのは理由があって、前にチームでやったisucon11の練習中にちょっと適当に手を出しすぎて全然点数を上げられなかったため
    • 多分もう一回練習をしていればもう少しバランスが取れてたと思うけど、その練習のときはコロナにかかっててチーム内の練習に参加できなかった……。
  • クエリを書くのが遅い
    • N+1の改善の為のクエリを思いつくのに時間がかかって、チームメンバーに書いてもらえるのを改造する形まで対応できなかった
    • SQL力(ぢから)が足りてない
  • broken pipeが解決できなかった
    • nginxの設定を思い出せなかった
  • 打ちたい手を全体に共有したりすればよかった
    • 色々やりたいことはあったんだけど、それをちゃんと言語化できなかったので開いている時間が発生してしまったのはもったいなかったと思う。

勝ち上がってるチームを見るともう少し施策を打ててるので、もう少し施策を打てる環境にしたほうが良さそう。色々悔しいですね。問題は楽しかったです。運営の皆さんありがとうございました。