ISUCON8の予選突破できました の補足投稿です。
こちらの記事に大まかな流れは書いてあるので、自分のやった部分について補足します。
コード修正でやったこと
中陳:気になる処理の時間計測とループ処理の改善
最初、何か計測ツールでも入れようかと思いましたが、準備もしていなくて面倒だったのでやめました。
いったんget_event関数に改善ポイントを絞っていたので、その部分だけに処理時間をテキストに出力するようにしました。
どのAPIリクエストによるget_eventの呼び出しかを出力されるようにしました。
ベンチマークを流して、多く出力されているAPIリクエストについて改善をしていこうと決めました。
中陳:/api/users/{id}のget_event周りを改修
「石川:データの更新のない情報(sheets)をハードコード化」で作成していたメソッドを利用して、この部分も改善しました。
中陳:get_eventを改修
sheets分SQLが発行されていたのを予約されているsheetsを先に取得することでSQLの問い合わせを削減
ループ内でSQLが発行されていて、ここは重いと分かっていたので、ここを改善することにしました。
最初の修正後、failになるためいったんリバートしてSQLを見直すことにしました。
元のSQLのようにGROUP BYとHAVINGを使ったSQLにしていましたが、GROUP BYとHAVINGを使わないSQLにして、プログラム側で処理をするようにしました。
感想
中盤で初期スコアからそこまで上がっていない中、他のチームが数万点までいっていて、今回は正直だめかなとモチベーションが下がっていました。
後半徐々にスコアが上がっていき、予選突破できてほっとしました。思った以上の結果がでて良かったです。
やはり地道な改善が大切なんだなと考えさせられました。
本戦は初参加なので頑張りたいと思います。