ISUCON8本選は6位でした
本選で戦ってきました
結果は6位 13,281点
悔しい負け
今年こそは優勝したい!と思っていましたが結果は惨敗でした。マジで悔しいです。
予選の感じで3人がそれぞれの力を出せれば優勝はできそうだなという感触があったし、songmuさん、najeiraさんという超強力なメンバーで本選だったので今年こそは何としてもと思っていましたが、結果は力及ばずでした。
講評や懇親会で話を聞くとISULOGGER
の/send_bulk
に気付いていなかった為にどんなに改善しても頭打ちだったとのこと。RunTrade
やInfo
のローソク足チャートを表示するGetCandlestickData
の改善は対応していたのにログで頭打ちなのでスコアは伸びずで悔しい結果になってしまった。(懇親会で話した感じではおそらく/send_bulk
になっていれば3.5万は超えた気がする)
マニュアルをちゃんと読んでいれば/send_bulk
に気付けたはずなのに、なんかボリューム多そう、Dockerかーとか思ってしまったばっかりに早く手を動かなさなきゃという気持ちでいっぱいで私はマニュアルを流し読みしてしまった。この辺りは力不足ですぐに構成を把握することができればそんなにテンパらなかったと思う。あと、429: Too Many Requests
のログが出ていてもすぐにピンと来なかったのは単純に力不足。その時はん〜なんだろうとしか思えなかった。。。今マニュアルを見返すと制限とかもきっちり書かれてるしー。
今回の問題はボトルネックがわかっても私はいまいち改善策が思い浮かばず、結構な時間を悩んでいるだけで消費してしまった。
RunTrade
の改善方法に私は突破口が見いだせなかったのでsongmuさん、najeiraさんに完全にお任せし、私の得意なDB検索問題であるInfo
のローソク足チャートを表示するGetCandlestickData
の改善をした。結果的には私はこれくらいしか効果的な改善ができなかった。
GetCandlestickDataの改善
問題のSQLは下記
SELECT m.t, a.price, b.price, m.h, m.l FROM ( SELECT STR_TO_DATE(DATE_FORMAT(created_at, '%s'), '%s') AS t, MIN(id) AS min_id, MAX(id) AS max_id, MAX(price) AS h, MIN(price) AS l FROM trade WHERE created_at >= ? GROUP BY t ) m JOIN trade a ON a.id = m.min_id JOIN trade b ON b.id = m.max_id ORDER BY m.t
次のような結果のテーブルを作成し
CREATE TABLE IF NOT EXISTS trade_stat ( id INTEGER UNSIGNED PRIMARY KEY AUTO_INCREMENT, created_at DATETIME(6) NOT NULL, first_price INTEGER UNSIGNED , last_price INTEGER UNSIGNED , low_price INTEGER UNSIGNED NOT NULL, high_price INTEGER UNSIGNED NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
下記のSQLに変更した
SELECT STR_TO_DATE(DATE_FORMAT(created_at, '%s'), '%s') AS t, MIN(first_price), MAX(last_price), MAX(high_price) AS h, MIN(low_price) AS l FROM trade_stat WHERE created_at >= ? GROUP BY t ORDER BY t
これも最初仕様を勘違いしてしまっていて1時間くらい無駄にしてしまった。もっと早く入れれていればログに気付くきっかけがあったかも知れなかった。
ISUCON8の運営チームは最高でした
予選、本選ともにトラブルはなかったし、ベンチマークもサクサクで快適でした。問題はどちらも様々なボトルネックが作り込まれているのと負荷に耐えれるとアクセス数がどんどん増えるというのがスムーズで納得感のある動きでした。シェア機能はすごく面白いギミックでした。
準備が本当に大変だったと思うのですが、ありがとうございました。
メンバーに感謝
songmuさん、najeiraさんと一緒に戦えてよかった。二人ともめっちゃ強いので足引っ張るわけにはいかないなーと思っていた。本選では私は気付いていなかった点を二人は気付いてて懇親会ではあー実はそうだったんだーと言うような話も多くて力の差を感じた。go慣れしていないというのもあるけど、視野や発想が私よりだいぶ上だなと感じたので精進しないと。
楽しい良い経験をさせてもらいました。ありがとう。