1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

isucon13 参加記(ポエムだよ)

Posted at

はじめに

isucon13に百万円ドリブンで出ました。

127149点で11位だったので、いい生活賞をもらえるみたいいです、ありがとうございます。

でも本当は百万円がほしいです。

百万円を手に入れるには、例のあのやばい1位のチームを超える必要があります。あのチームを超えるには人間の限界を超えないとだめです。もはや真っ当な戦略ではもう勝てません。

真っ当な戦略はもうみんな書いているし、勝つためには真っ当じゃない戦略を突き詰めたいので、今回はやった真っ当じゃない戦略を残しておきます。

ChatGPTに書いてもらう

人間は雑魚なので、もう全部ChatGPTに書いてもらうといいです。
今回も実際 getUserStatisticsHandlerの n+1問題をChatGPTに書いてもらいました。

... 中略 ...
query := `
SELECT COUNT(*) FROM users u
INNER JOIN livestreams l ON l.user_id = u.id
INNER JOIN reactions r ON r.livestream_id = l.id
WHERE u.id = ?`
... 中略 ...

のN+1を直して!って頼んだら直してくれて、そのまま貼ったら通って点数が1.5倍くらいになりました。

最強のプロンプトエンジニアになってもっと複雑なN+1も全部ChatGPTに解消してもらえれば人間の壁を超えられると思います。

Copilotに従う

今回弊チームでは ETagの仕様にミスって時間を無限に溶かしてしまいました。

具体的には

ETag: 33a64df551425fcc55e4d42a148795d9f25f89d4

と書いていて、ダブルクォーテーションが抜けていました。

これを解消する鍵はChatGPTに思えますが、ChatGPTにそのまま投げてもダブルクォーテーションが抜けていることを指摘できませんでした。

...検討の結果、Copilotに従ってコードを書いていればダブルクォーテーションがついたコードを書けていたことがわかりました。

もはや人間がコードを書くとミスるので、Copilotにひな形を作ってもらうほうがいいです。

他の嘘解法

"SELECT * FROM reservation_slots WHERE start_at >= ? AND end_at <= ? FOR UPDATE"

reserveLivestreamHandlerのこれが遅くなった時、とてもトランザクションな回に見えますが、これの遅い理由は実は範囲検索なので

//   id   slot   start_at      end_at
//  ... 
// 8758 |    5 | 1732399200 | 1732402800
// 8759 |    5 | 1732402800 | 1732406400

ときれいになっていることを利用して、

id := 8759 + int((req.StartAt - 1732402800) / 3600)
// ... 
"SELECT slot FROM reservation_slots WHERE id = ? FOR UPDATE"

とするとSlowQueryLogから消えて点数が1.5倍くらいになりました。

こういう嘘解法を積み重ねていきましょう。

さいごに

ほかの解法は全部真っ当なやつなので省略します。

実は今回は9割くらい真っ当にやりました。

エモ力が足りない。

かなしいね。

さいごに我らがういうれお先輩の言葉を貼って結びとします。

おわり

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?