#isucon #isucon10 予選参加記: 決勝行けましたの巻

最終スコア 2335 で本戦出場です。スコアそのものは不完全燃焼感が否めないけどクッソ嬉しい。

isucon.net

github.com

レポジトリはこれ。チーム名は「ヌルポインターマリアユニバース」*1、メンバーは漏れと id:wtatsuru id:Pasta-K。やったことはこの repo みてくれ (master ブランチの内容がスコアのあれです)

チームメンバーのエントリはこれら:

wtatsuru.hatenadiary.com


ビール2L飲んだけど記憶が生きてるうちの個人的反省箇条書き:

  • なぞって検索のN+1を完全に2クエリ (O(1)) にできたのはよかった
  • 17時くらいに疲れてすこしダレてしまった
    • 疲れたのはしゃあない
  • 全体的にログや fixture のデータ数を眺めた上での優先度判断ができた (俺が) のはよかった
    • LIKE 検索してるやつそんなないっすねという話
    • 初期データ 30000 件もないっすねという話
  • MySQL の設定素朴すぎるのに気づけたのは良かった
    • クエリキャッシュ有効化できた
      • id:wtatsuru さんにスレーブ立てたりしてもらったけど、スレーブでクエリキャッシュ有効化や InnoDB buffer pool 拡大してなくないすか?? っていうのに終了 30 分前くらいに気づけたのもよかった
        • この気づきで 100 点以上稼いでいる
  • 反省点
    • 椅子・物件の CSV インポートのバルクインサート結局できなかった
      • sqlx 仕事でも使ってるはずなのにエラーメッセージから真意を読み解けなくて時間切れだった、異常な悲しさがある
      • 異常な悲しさはあるんだけど、最終的にこれのスコアへの影響はしょぼかったのではという雰囲気もあって結果オーライ感はある……
        • 5 秒のタイムアウトをぶっちぎってしまうとスコアゼロ、確率的に? ぶっちぎってしまいますね、というところで、結局ぶっちぎらなかったっぽい
  • 作業タイムの 15 分スプリント、そこそこ機能した気がするけど途中でダレてしまった
    • 自分が根詰まると根詰まってしまう (はい)
  • id:wtatsuru さんに下回り的なタスクはだいたい丸投げできることは最初から自明だった *2 と思うけど、まあ実際そこに乗っかることでワークした面はあったと思う
    • お前が MySQL のレプリ組めや!! ってなっていたとしたら MySQL レプリケーション やり方 でググるところからスタートだったと思う……
    • 継続的に会話できたことで、やればどう考えてもスコアが上がる (けどその実装をシュッとやるには手慣れが必要) 担当 (id:wtatsuru) + 飛び道具で優勝狙い担当 (漏れ + id:Pasta-K)、をちゃんと配分しつつやっていけたのはよかった
  • ログをぼーっと眺めて傾向をエスパーするテクニックは役に立った
    • features で LIKE が発生してるのは気になるけど、そんなにリクエストされてないので後回しでよくないですか、みたいな

いろいろ話題はあるけどパッと思い出せるのはこれくらいです、随時追記はしそう

*1:サークル名ジェネレータ http://www.doujinbu.com/cng/ を適当に回していて、ヌルポインター、しかもマリア (→ MariaDB への連想) というポイントで即決

*2:なぜならプロだから