チーム :innocent: (学生枠)で出場し,最終得点は37000点ぐらい.あと3000点足りなかった……. もっと詳しい記事は @wass80 と @yu3mars が書いてくれると思うので取り急ぎ.
やったこと
- 問題を見て,複数台構成になっていて驚く.予選でここまでやるのか……
- アプリケーション2台+DB1台の構成のまま問題を解くことにした.
- 言語は前回同様Ruby.
- 遅そうなクエリに対して効くようにインデックスを張った.
- とりあえずN+1をぜんぶ解消した.
GET /fetch
も解消した.- 異常なSQLになった…….
- icons がDB上にあるのでとりあえず書き出した
- あらゆる静的ファイルをnginxにキャッシュさせた(つもりだった).
- 両サーバにファイルを分散させて,2台目のサーバのnginxにもキャッシュさせた(つもりだった).
- ここで気づいていれば~となるがもう遅い.
- あらゆる静的ファイルをgzip圧縮して配信するようにした.
- 何をやっても帯域が詰まるようになった.
- 再起動したりワーカープロセス数を調整したりして何度もベンチマークを走らせた.
- 終了30分前に最高得点の37000点ぐらいが出たので,ここで打ち切りとする.
感想
いつも通りやることを全部やった上でまったく点数が伸びなかったのでとても悔しい.
Cache-Control: public
ヘッダや sleep 1.0
の意味には最後まで気づけなかった…….
予選の問題でありながらそういうところまでちゃんと考えないと解けないのでなかなか奥が深い問題だったと思います.
しかしCDNを意識したファイル配信というところまでは頭が回らず難しかった…….
本戦出場したチームの人たちには是非ともがんばってほしいです.運営の皆様ありがとうございました.
追記
リポジトリを公開した.雑に管理してたのでcommitされてないファイルもある…….