2022-07-23 に開催された ISUCON12 の予選に参加してきたときのメモ。
チーム構成
チーム名
Oops!
メンバー
- 2matzzz
- nyaa
- kjm
いつものメンバー。
選択言語
Go言語
スコア
- Best/Latest 93,716
UTC | Score |
---|---|
2022-07-23 10:12 | 2,759 |
2022-07-23 10:27 | 3,030 |
2022-07-23 13:23 | 727 |
2022-07-23 13:28 | 2,649 |
2022-07-23 13:34 | 2,929 |
2022-07-23 13:42 | 630 |
2022-07-23 13:49 | 3,571 |
2022-07-23 13:57 | 644 |
2022-07-23 13:58 | 999 |
2022-07-23 14:00 | 2,731 |
2022-07-23 14:03 | 2,800 |
2022-07-23 14:08 | 3,365 |
2022-07-23 14:10 | 611 |
2022-07-23 14:11 | 2,847 |
2022-07-23 14:19 | 686 |
2022-07-23 14:24 | 3,508 |
2022-07-23 14:28 | 665 |
2022-07-23 14:33 | 3,545 |
2022-07-23 14:34 | 587 |
2022-07-23 14:38 | 30 |
2022-07-23 14:40 | 2,651 |
2022-07-23 14:45 | 3,196 |
2022-07-23 15:11 | 3,757 |
2022-07-23 15:18 | 4,285 |
2022-07-23 15:19 | 8,179 |
2022-07-23 15:22 | 5,678 |
2022-07-23 15:24 | 8,336 |
2022-07-23 15:31 | 11,057 |
2022-07-23 15:37 | 14,902 |
2022-07-23 15:46 | 9,085 |
2022-07-23 15:48 | 15,602 |
2022-07-23 15:59 | 10,706 |
2022-07-23 16:01 | 1,660 |
2022-07-23 16:10 | 8,996 |
2022-07-23 16:25 | 14,346 |
2022-07-23 17:17 | 14,093 |
2022-07-23 17:19 | 15,292 |
2022-07-23 17:23 | 16,000 |
2022-07-23 17:31 | 17,528 |
2022-07-23 17:34 | 16,395 |
2022-07-23 17:41 | 16,892 |
2022-07-23 17:42 | 16,845 |
2022-07-23 17:44 | 16,547 |
2022-07-23 17:46 | 14,995 |
2022-07-23 17:51 | 17,342 |
結果
17,342 Oops! (36位)
方針
午前中に諸々準備やソースコードの読んだりした上で、話し合いを行い SQLite は辞めて MySQL に移行することにした。
最終的にチームでやったこと
10:00 - スコア 3,030
- 初期実装のまま
13:00 - スコア 3,571
- SQLite を MySQL へ移行
- SQLite のデータをダンプするときに最新のスコアのみ取るようなクエリを書いた
select distinct first_value(id) over win as id, tenant_id,player_id, competition_id, first_value(score) over win as score from player_score window win as (PARTITION BY tenant_id, competition_id,player_id ORDER BY row_num DESC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING);
- player, player_score にインデックスを追加
14:00 - スコア 3,545
- Makefile にログのローテーションを自動化するタスクを追加
- Playerのスコアを最新のものだけINSERTする形に変更
15:00 - スコア 15,706
- N+1 改善
- 参加者向け大会ごとのランキングAPI
- 参加者向け参加者詳細情報取得API
- 排他ロックをトランザクション使うように変更
- 複数のINSERT Queryを一つにまとめる
- テナント管理者向けテナントに参加者を追加API
- CSV入稿
16:00 - スコア 14,346
- ユニークID生成のところをRedis化
17:00 - スコア 17,342
- データベースを専用インスタンスにする
- MySQLをReplicationしSlaveノードを使うようにする