ISUCON10予選を1位通過した
はじめに
ISUCON10予選で運良く1位通過ができてしまったので記事を書いてみました。
自己紹介
ponyopoppo: PNYOという会社のCTO+i社ソフトウェアエンジニア。 主にアプリ担当
hiro116s: i社ソフトウェアエンジニア。 主にMySQL担当
じゃがいも: i社ソフトウェアエンジニア。 主にnginx担当
チームについて
ISUCON7-9は予選敗退したので、今回が初の本選出場です。 「FCCPC_かみのやま温泉」というチームで参加しました。3人の住んでる家の地図上での重心をとってみたら、かみのやま温泉があったのでそれをチーム名にしました。
使用言語
ponyopoppoが普段から使っているNode.jsです。
やったこと
13:30 最初のベンチ
451点
13:44 とりあえずnazotte
のN+1問題をJavaScriptで多角形包含関係を計算するように改善
514点
13:52 MySQLにインデックスを貼っていく
619点
しばらくベンチマークが止まる
運営さんお疲れさまでした。
14:56 recommended_estate
のORを削る
687点
15:01 INSERTを一気にやるように変更
713点
15:25 インデックスを追加していく
726点
15:33 botをnginxで対策する
920点
15:45 estate/search
が同じクエリに対して結構呼ばれているのでキャッシュする
1162点
16:12 estate/low_priced
はINSERTが呼ばれない限り同じものを返すのでキャッシュする
1406点
16:18 nginxにclient_body_buffer_size 512k
を追加
1472点
16:22 chair/low_priced
はINSERTかUPDATEが呼ばれない限り同じものを返すのでキャッシュする
1687点
16:27 なんか忘れたけどなんかした
1851点
16:52 インデックスを追加していく
1948点
search
用にインデックスを大量に追加したりnazotteのLIMITをいじったりを試みるも点数上がらず
18:13 DBをchairとestateで2インスタンスに分ける
3171点
18:37 recommended_estate
内のchairをキャッシュする
3502点
19:41 インデックスを追加していく
4015点
door_min
, door_max
を追加しようとするもinitializeが終わらず断念。
hiro116s「YouTubeでも見るか」
20:30 ベンチガチャスタート
20:40 SSRを引き当てる。一足先にISUCON終了
4100点(最終結果)
反省点
- 家のネットがクソ遅い(夜になると1Mbpsとか)ので本選までにポケットwifiなり何かしら用意する