ルルーシュA
ISUCON12の本選に出たい。インフラが得意。
ルルーシュB
ISUCON12の本選に出たい。何でもできる。
ルルーシュC
ISUCON12の本選に出たい。コードが書ける。モットーは 「Don't think, feel.」
※ この記事は99%のユーモアと1%の技術でできています。
deploy.sh
が 生まれた 日
前日、夜 10:00。
その 名 は SQLite
「来たか、この日が。コードネームansible
を実行する。」
グオオオン(ansible
が走る音)
「まずはドキュメントとコードを読むか。」
var (
// 正しいテナント名の正規表現
tenantNameRegexp = regexp.MustCompile(`^[a-z][a-z0-9-]{0,61}[a-z0-9]$`)
adminDB *sqlx.DB
sqliteDriverName = "sqlite3"
)
「sqlite3
...?何だこれは。」
「噂には聞いているが、我らがMySQLには敵わんだろう。移行作業を予定しておけ。」
奪われた deploy.sh
シュゥゥゥン(ansible
の実行が終わった音)
「後は、細かな設定と設定ファイルの収集だけだ。すぐに終わる。」
...
「後は、細かな設定と設定ファイルの収集だけだ。すぐに終わる。」
...
「後は、細かな設定と設定ファイルの収集だけだ。すぐに終わる。」
「最初のベンチマークは無事成功しているようだ。そろそろ、計測の時間だな。首尾はどうだ?」
「後は、細かな設定と設定ファイルの収集だけだ。すぐに終わる。」
「どうした?さっきから同じことを言っているぞ。」
「...deploy.sh
が動かないんだ。大丈夫だ。すぐ行く。先にできることをやっておいてくれ。」
(WebUIポチポチ。このページ、重すぎぃ!!!)「俺の直感が/api/player/player/:playerID
を改善しろと告げている。」
PR#4
「それなら俺はSQLiteからMySQLへの移行を進めるとしよう。」
deploy.sh
&DB移行作業 攻防戦
「「ぐぬぬ...」」
「さっきのN+1は改善したが、DBを移行中か。動くかわからんがとりあえず次の作戦に進もう。」
「indexはあるだけ困らんからな。適当に貼っておくか。」
ALTER TABLE `visit_history` ADD INDEX `tenant_id_competition_id_idx` (`tenant_id`, `competition_id`);
「6sのクエリが0.1s未満になったぞ。我が軍の勝利だ。」
「「ぐぬぬ...」」
「まだ計測も実行もできなさそうだな。適当にいくつかN+1を直しておくか。」
「competitionScoreHandler
をbulk insertにしたぞ。一瞬で終わってしまった...。」
PR#6
「competitionRankingHandler
は、もう少し噛みごたえがありそうだな。」
PR#9
「ぐぬぬ...。これを見てくれないか、ルルーシュB。」
「...ファイルの一覧をfind
してforで回す部分、ダブルクオートだと改行が無視されるみたいだな。バッククオートにしておいたぞ。」
(そっか...。)「よし、メトリクスが取れるようになったぞ。」
「...よし。俺もそろそろ今までの変更を試してみたい。」
「そうだな。ルルーシュBが移行作業に時間を使っているのも非効率だ。移行途中の1台目は私が引き継ぐから、2台目で計測と改善を進めてくれ。」
崩落 の mysql.service
[ERROR] Error in accept: Bad file descriptor
「何もしていないのに、 MySQLが応答しなくなったぞ。」
(なんもわからん)
..................................どうしよ。 15:30。 ほぼ初期スコア。 何も動かず。「Cloudformationの実行からやり直したほうが良いのかもしれない。」
「「..そう...だな。」」
シーズン1終了
スコア が 目覚める 日
「お、全部マージして動かしたら点数が伸びたぞ。」
「15,000点。悪くない。悪くないな。」
「ぐぬぬ...。」
百万 の キセキ
「SQLiteにindexがつけられるみたいだな。」
CREATE INDEX player_score_player_id_idx on player_score(player_id);
CREATE INDEX player_score_competition_id_idx on player_score(competition_id);
CREATE INDEX competition_tenant_id_created_at_idx on competition(tenant_id, created_at);
「tenantsBillingHandler
にはLimitをつけても良さそうだな。」
PR#14
「これも100件の取得で事足りそうだ。」
PR#15
PR#18
「ぐぬぬ...。移行は諦めよう。」
「プレイヤーの作成はbulk insertに出来そうだな。」
PR#17
ラブ アタック !
「適当にキャッシュを書いたぞ。」
「動いてないぞ。」
「修正しておいたぞ。」
「修正されてないぞ。」
「...そろそろ18時だ!撤収の準備をしろ!!」
土 の 味
「...」
「...」
「...」
「「「...」」」
「おやすみ。」
「「おつ。」」
Re;
~fin~