ISUCON6 に参加して負けてきた。

去年同様 gacharion と一緒に ISUCON6 に参加してきました(土曜日)。

担当的には、アプリ 自分で、インフラ gacharion って感じです。 結果は全然ダメで、 最高で約 7K しかでなかった。

最終的なコードはこんな感じ。

github.com

やったこと

  • html の base の継承とか element をやめて一枚のファイルにした。
  • keyword のリストとってくるところで、 filesort するし、コード見ても keyword のリストしか入らないじゃんと思い、 distinct(keyword) にした(最終的には最長マッチが先にするための order by だったのに気づいてやめた)
  • isutar の isuda への統合。
  • star はオンメモリのみ(永続化なし)で行けるなと思い(initialize で truncate しているので)、オンメモリでやった。
  • htmlify のキャッシュ(メモリもあまりすぎているしと思って、結構雑)
  • キーワードをオンメモリ
  • 正規表現をキーワードのリストで回して replace に置き換える

考えたこと

  • htmlify の結果を DB に保存して使えばいけると思ったが、キーワード追加した時にどうするかの案が思いつかずやめ
  • initialize で全てのエントリに対して htmlify をかけてキャッシュをきかせる(5 秒じゃ無理だと思い、 goroutine でやる。ずっと CPU 100 % で張り付いてしまうのでやめた)
  • 差分で置換をすれば早くなると思ったが、キーワード追加のことを考えると無理となってやめた

ほとんどの時間、 htmlify でどうすればいいかを考えていたりしたがいい案が思いつかずにタイムアップ。

自分もずっと htmlify のことだけで、他の案を考えなかったので、何も指示も出せず gacharion がすることがほとんど何もすることができなかった気がする(やっぱり何かまとめ役が必要な気がする)。

キーワード追加の対応を諦め、事前キャッシュとかしていれば 10K は行けたのかなと思ったりはした(それでも普通に敗退だけど)。

strings.Replacer について知っておけばもうちょっとマシな感じにはなったかもしれない。

予選通過の人のやっていたことを見ると、やっていることや考えていたことは間違ってはいない感じがしたので良かったかなと思ったりはしている。その対応の精度とか深さとかは全然相手になるレベルではないけど。

面白い問題で楽しめたので良かった。

また来年もあったら参加したい。

運営の皆様お疲れ様でした。