賞金ゲットできずでした.次回は優勝したい.
畳
3人横並びで座れる場所を探して,畳スペースの窓際に席を獲得した.なぜかほかのチームは来なかったので異常に広々していた.
インデックスを張った
素朴に点数を上げてテンションを上げる施策として最初に張ってみて,ちょっと点数上がった.
SELECT FOR UPDATE NOWAIT
アップデートのロックを取ろうとして時間がかかっていたので,ロックが取られてたらあきらめさせるため,NOWAITをつける版のメソッドを作ってみた.取引を直列化するのが正しい選択だった.
ログの送信を非同期化したかった
`curl -X POST --silent ... &`
することでサブプロセスでPOSTし,結果を待たないという野蛮な試みをしたけどfailしたので不採用.今考えると並列に投げてしまったことでAPIリミットに引っかかったのだと思う.
ログの送信を後回しに
トランザクション内で通信してるのがもったいないので,送信内容をバッファリングして,トランザクション抜けてから送るようにしてみた.guardを使ってスコープを抜けるようにしたり,きれいに書けたけど,バルク送信の仕組みに気づいていなかったので点数はそんなに上がらなかった.
弁当
畳でお茶飲んで弁当食べてるとリラックス感が出てきた.
ロウソクチャートの計算をアプリケーション側に
DBのCPUが高かったので,SELECT *してひとまず転送してしまい,アプリケーション側で最大や最小の計算をすることにした.これでCPU使い切りは終わったものの,UPDATEのロック待ちは解消できず.
グミ
チームメンバーがグミをたくさん買ってきていたので食べ続けていた.
failするようになったのであれこれrevertした
ウォームアップできてないときにfailするようになってしまい,ロウソクチャートの変更や,ログ送信を後回しにする変更などを,どれが原因かわからないのでどんどんrevertして,点数が下がっていった.山みたいな形になって終了.revertしたら点数が下がったので,少しずつでも我々のやっていたことに意味はあったのだという変な達成感はあった.
良かったこと
- 本戦に出られたのは良かった.懇親会で上位チームの話を聞くと,作戦の立て方が正確で論理的で,こんな人もいるんだなって勉強になった
- failで終わらなかった
- 0点だと悲しい
- 慌てず,事前に考えてたスケジュールで動けた
- ペアプロ組と1人組くらいで動いて,困ったら助けを呼ぶというモデルで1日過ごせた
- が,慌てず点数も上がらないというイマイチな結果であった
悪かったこと
- バルク送信の仕組みに気づけなかった.ドキュメントをちゃんと読んで取り組むと良いことをやれなかった
- プロファイル結果を見て判断することはできたが,ドキュメントに書いてあることを軽視していた
- ふだんの問題の解き方の幅が小さい
- 「自分だったら1秒ごとにファイルに書き出して別プロセスからPOSTする仕組みを書く」みたいな話をいくつか聞いた.普段の仕事ではリクエストを受けてレスポンスを返す仕事が99%くらいで,それ以外のプロセスモデルを取り入れようという考えがあまりない
素敵な会場,素敵な弁当,素敵な問題,素敵な仲間たち,我々の解法以外はいずれもすばらしいナイス大会でした.主催者の皆様,参加者の皆様,ありがとうございました.