ISUCON10 で予選敗退しました

はじめに

ISUCON の問題作成、サーバー準備および運営をして下さった ISUCON 運営の方々、本当ににありがとうございました & お疲れ様でした

おかげで、今年も濃密な 1 日を過ごすことが出来ました

本選も頑張って下さい (参加できないですが…😭)


ということで、やったことをつらつらと書いていこうと思います

今年も@Konboi, @tkuchiki, @hilotter とチーム「流れ弾」で参加しました

役割

例年どおり

アプリ: @Konboi, @hilotter インフラ周り: @tkuchiki

にやってもらいました

事前準備

インフラ担当の@tkuchiki が事前にインフラの設定ファイルの用意だったりデプロイ周りの整備をしてくれていました (いつも感謝です

自分は過去問を解きながら shogo82148/go-sql-proxymasibw/go_one の準備だったり使ってみたり、最近は仕事で Redis を使わなくなったので redis を go から使う方法を復習したりしました

また、今年はコロナ禍の影響もあってそれぞれ家からリモートで参加することになったので Google Meet で繋ぎながら必要あればホワイトボード代わりに miro を使い、事前に全員で 1 回使ってみました

当日

開始前 (~12:00)

お昼とか飲み物を買いにコンビニから帰ったら開始延長のアナウンスがあったので、

等をして休日のお父さん業をしてましたw

11:30 過ぎには PC の前で待機完了

競技開始

大きくやった事としては

MySQL 8 にする

序盤で tkuchiki が MySQL8 に

降順 index を使用

nazotte の loop クエリをコードで解決する (Konboi)

http://rosettacode.org/wiki/Ray-casting_algorithm#Go を見ながら緯度/軽度情報からマッチしているかをチェックするように変更

今思い返してみると最初の esate 取得時に Limit 制限書けてなかったので limit つけても良かったかもしれない

stock 0 の chair は削除する (hilotter)

追加がなさそうなので where stock > 0なクエリを消せるので削除するようにした

search の range のクエリ修正 (Konboi, @tkuchiki)

range 情報をもとに range id が 0,3 のときにも 0 < price なクエリが追加されるように修正

chair/estate の追加を bulk insert (Konboi)

購入や情報取得に繋がらないのは新規データの追加が遅いからでは?と邪推 & insert が loop クエリだったので bulk insert するように変更

ここまでで 700 前後

estate/chair の DB 分割

DB の CPU 使用率が依然としてたかく、join もなかったので chair と esate で DB を分割

これで 1300 前後

feature の正規化 (時間切れ)

hilotter が ruby で正規化に成功したが go に移植すところで時間切れ

スコア

反省点

と反省が多いですが次に繋がるノビシロがあるということで…

さいごに

ほぼ 1 日、ワンオペになってしまったが嫌味ひとつ言わず対応すてくれた嫁さんに本当に感謝です

本選にいけなにのは悔しい…来年に向けてまた精進しよう