見出し画像

ISUCON初参加記録

ISUCON初参加から、もう1週間以上経ってしまった。何をやったか鮮明に覚えているうちに書きたかったのだが、漫画とか子育てとか漫画とか漫画に気を取られてしまった。しかし!覚えている限りを書く!!

10時のスタートと同時に、問題の画面が見られるようになった。今回はISUCONDITIONという、椅子の状態を管理したりするアプリの改良だ。このネーミングもロゴも問題も、とても良くできていて感動した。さすが…!(何が)

私達のチームのawsアカウント代表者(?)がAMIを利用してAmazon EC2上にインスタンスを起動したりしてくれる中、私はメンバーに画面を共有し、マニュアルを読み上げた。大体読み終えた後、実際にインスタンスに入って皆で作業を始めた。今回は3つのインスタンスが起動していて、移動するのに最初手間取った(私だけ)。

勉強会と同様に、言語はPythonにした。ベンチマークを走らせながら、以前ブログに書いたように遅い処理を探した。椅子のIDとユーザーIDに関するSQLが遅かったので、INDEXを貼った。さらに、椅子のIDとユーザーのIDを同時に探索するSELECT文も多かったので、椅子IDとユーザーIDを合わせたIDを作った。この2つのIDがCHAR型とVARCHAR型で異なっていたので、合わせて作ったIDはVARCHAR型にした。この後のエラーが最も困ったのだが、覚えている範囲では、今まで(椅子ID, ユーザーID)というタプルで検索していたのが(椅子ID+ユーザーID, )という1種類のタプルになった時に、最後のコンマを忘れるとタプルとして認識されず、エラーになっていたようだ(多分)。Python力の無さが悲しかった。

次に、mysqlサーバーを2つ目のインスタンスに移動し、1つ目のサーバーの負荷を下げた。チームメイトがあっさりと設定してくれた気がする。すごい。私は2つ目に設定されたサーバーに対して、botからのアクセスを無視するための設定をnginx.conf辺りに書いた(参考記事)。画像を圧縮したりする設定もしてみたけど、これは逆にスコアが下がったのでやめた。そういうこともあるんだなぁ。

その他、N+1問題を探したり、バルクインサートを試してみようと思ったけど、時間が微妙だったので諦めた。バルクインサートについて検索すると、executemany関数で速くなるとかならないとか、execute_values関数の方が速くなるとか出てきたけど、execute_values関数に必要なpsycopg2をインストールできなかった。皆どうやってインストールしてるん…?

結果、4000点強でした。詳細はこちら(チームメイトのブログ)。

今読んでみると、やはり私の記憶はあやふやだな…

頑張ったし楽しかったけど、悔しいな!Pythonが不利だったという情報を得たので、次は違う言語も試してみるべきか。

あと昼休憩では夫が買ってきてくれたお寿司をモリモリ食べてたのだけど、昼寝するのが正解だったっぽい…?

この記事が気に入ったらサポートをしてみませんか?