ISUCON 13 で1万点ぐらいでした #isucon
去年は出られませんでしたが、今年は ISUCON 13 参加しました。チームは moudameda です。いつもと名前もメンバーも違います。
最終ベンチマークでは1万点をちょっと超えたぐらいでした。おそらく。failed でなければ。最終スコア、公開されるかな?
16時までほぼ初期スコアだったので、現場のテンションとしては1万点でも十分満足な感じでした。
自分がやっていたことはというと、環境整備をして一息ついた12時頃から16時すぎまで、ほとんどの時間を GET /api/livestream/search
の高速化に費やしていた気がします。実装力が足りなくてハマるハマる。
- sqlx での JOIN が分からず、あれやこれや。カラム名を
"users.id"
とかにすればよかったんですね。 - JOIN するところで struct のフィールドには
db:"users"
などと書けばよかったんですね。 - IN 句を使うときは
sqlx.In
で準備するんですね。- そこに
[]int64
は渡せないから[]int
にする必要があるんですね。
- そこに
あとはこの API が LEFT JOIN livestream_tags
などして1クエリで書けるだろうと思いこんでしまったのも反省点。LIMIT 50 することを考えると、無理でしたね。
これが落ち着いてから、つまり16時過ぎにようやくインデックスを追加して、順番が逆だったなと思いました。
statistics
系や DNS 周りは他メンバーに頼んでました。あと終盤に moderate
をなんとかしようとしたけど、道筋が立てられなくて時間切れ。DELETE
文の呼び出し回数がベンチーマーク走行中4万回近くて相当な負荷になってそうに思えたので、なんとかしたかったです。一方で icon は影響小さそうだなと思ってほぼ放置。
ISUCON 10 の予選突破の成功体験から、終盤まで各自のサーバーで色々試行錯誤して、17時過ぎに負荷分散を始める。というのが身についてしまって、今回はそうじゃないほうが良かったんだろうなと思いました。DNS サーバー、MySQL サーバーを早めに別々にしていたらどうなっていたか。
などと考えていたんですが matsuu さんの「mysqlを2台目に」が17時10分なので、あんまり関係なさそう。
とても楽しかったので、また来年も参加したいです。