【ISUCON14】1件ずつ処理するMatcherを複数件対応にするとスコアは伸びるのか
前回は、高頻度APIの裏で実行されていたSQLへ複合インデックスを追加した。MySQLの総検査行数は1.5685億行から989万行へ減り、総実行時間も250秒から111秒へ短縮した。 しかし、単発のベンチマークスコアは2,225点から1,685点へ低下した。DBが軽くなっても、椅子とユーザーがマッチし、ライドが完了しなければスコアにはつながらない。 今回は次のボトルネック候補であるMatcherに […]
前回は、高頻度APIの裏で実行されていたSQLへ複合インデックスを追加した。MySQLの総検査行数は1.5685億行から989万行へ減り、総実行時間も250秒から111秒へ短縮した。 しかし、単発のベンチマークスコアは2,225点から1,685点へ低下した。DBが軽くなっても、椅子とユーザーがマッチし、ライドが完了しなければスコアにはつながらない。 今回は次のボトルネック候補であるMatcherに […]
前回のプロファイリング(alp × pt-query-digest)により、Nginxで観測したAPI合計処理時間の約97%が「通知系API(chair/notification, app/notification)」と「位置情報更新(chair/coordinate)」に集中していることが判明した。 これらのAPI内部では、インデックスのないSQLが高頻度に実行されていた。そこで今回は複合インデ […]
ISUCON14の題材である「ISURIDE(イスライド)」は、Uber や GO のようなリアルタイム配車サービス(自律運転チェア版)。 「DBクエリを高速化したのに、なぜかスコアが思うように伸びない…」という現象に直面したとき、システム全体の構造と採点ルールを把握していないと原因を見失いやすい。 個別のチューニングに入る前に理解しておくべき 「ISURIDE全体の処理フロー」「API高速化だけ […]
ISUCONなどのWebアプリケーション性能改善において、最初につまずきやすいのが「ボトルネックをどう見つけるか」という課題。 推測でコードを直してもスコアは伸びない。Webサーバー(Nginx)のアクセスログをLTSV形式で出力し、ログ解析ツール alp で集計することで、システム全体で最も時間を消費しているエンドポイントをデータに基づいて特定する。 TL;DR:この記事のまとめ 要するに、Ng […]
ISUCON14のチューニングにおいて、MySQLスロークエリログ(pt-query-digest)で最も重かったクエリを、共通テーブル式(CTE: WITH 句)による事前絞り込みと複合インデックス追加によって改善。 対象SQLの実行時間を 512ms から 15.4ms(約33倍高速化) に短縮し、ベンチマークスコアを 1,323点から1,995点 へ引き上げた技術的な仕組みと手順。 TL;D […]
AWSを学びたいものの、料金やリソースの消し忘れが怖く、なかなか手を動かせずにいた。そこで今回はTerraformを使い、空のS3バケットを作成して削除するまでを試した。 TL;DR:この記事でやること 要するに、Terraformを使って東京リージョンに空のS3バケットを1つ作る。AWS上に作成できたことを確認したら、terraform destroyで削除する。 今回はTerraformを体系 […]
はじめに:2025年を振り返って 2025年12月31日、エンジニアとして丸1年を迎えました。 7年間の電気主任技術者生活を経てエンジニアへ転身し、必死に走り抜けた1年でした。Laravel、Next.js、Railsなど多くの技術に触れ、自分の手でサービスを形にする面白さを実感しています。 しかし同時に痛感しているのが「圧倒的なアウトプットの必要性」です。2年目は、ただコードを書くだけでなく「価 […]
概要 目的:RDS の JST 化をすることで、個人開発の迷いを断つ 本日の学び:RDS は UTC ベースです。設定変更時に再起動します。 本文 RDS のタイムゾーンを JST に変更する手順 RDS のパラメータグループを作成し、time_zone を Asia/Tokyo に設定します パラメータグループを RDS インスタンスに適用し、インスタンスを再起動します RDS インスタンスのタ […]
はじめに Laravel の hasMany や belongsTo などのリレーションの記述のうち、中間テーブルを使うときのことをまとめます。 本文 モデルのリレーションオブジェクトについて 中間テーブルの仕様 おわりに この記事では、Laravel のリレーションを活用して効率的なデータベース操作を実現する方法について解説しました。 参考 Laravel Documentation ̵ […]
ローカル環境でLaravelアプリの起動まで行いました。 Breezeのユーザー認証が手軽に導入できましたので、Laravel導入時に毎回使おうと思います。 今回は個人開発アプリを作る準備です。 インストール MySQLのユーザー作成 .envの設定 上のMySQLユーザー作成時に設定を合わせる 以下ユーザー認証の導入後にmigrateを行う ユーザー認証の導入 Breezeインストール npm […]