新卒採用アルバイト採用インターンシップJPENエンジニアレポートデータパーティションを使ってデータベースをチューニングする2019年03月20日ツイートデータスタジアムのエンジニアの植草です。野球・サッカーを中心とした配信サービスのシステム運用を担当しております。当社では様々なスポーツの速報コンテンツを展開しており、また一つの競技だけを見ても年々データが増加しています。そのため、速報性の維持・向上を目的としたシステムのチューニングに日々取り組んでいます。チューニングと言っても、サーバ、ネットワーク、データベースなどボトルネックの要因によりアプローチの方法は様々ですが、今回はデータベースに焦点を当てデータパーティションという概念を使ったチューニングの例をご紹介します。データパーティションによるチューニング基本的にデータベースにはデータが格納されているデータファイルという物理ファイルが存在していて、ユーザからクエリが実行されるとデータベースは、それらのデータファイルへアクセスしてデータを抽出しています。データパーティションは特定のテーブルだけ、別のファイルに分割し、データファイルへのアクセスを分散させることで、データベースのアクセスやレスポンスのスピード向上を実現します。例を挙げて説明します。・Aテーブルには日程データを含むテーブルで、レコード件数は数千万件パーティションを分割するAテーブルは件数も多く、ここにアクセスをすると、他のテーブル、B、Cテーブルのアクセスにも大きな影響を与えているため、Aテーブルを別のデータファイルに分けます。年度をまたいだクエリの実行も稀なため、年度ごとにもファイルを分割します。今までは1つのデータファイルへのアクセスが集中していましたが、特定のテーブルを切りはなすことでファイルへのアクセスが分散され、並列でのアクセスが可能となり、パフォーマンスの向上を図ることができます。アクセスを分散することができたということは更新処理についても同様なので更新時のロックを抑制することも可能です。データパーティションを利用するときの注意点ただし、闇雲にファイルを分割すればいいという訳ではありません。システムによってテーブルの数やデータ件数、アクセスの頻度などが様々であり、今回のように、データ件数が他のテーブルより大幅に多いとかアクセスが集中しているなどのテーブルに対し分割することをオススメします。ファイルを分割すればするほど、メンテナンスが複雑になり、システム運用の負荷をかける可能性もありますので、その辺りの見極めには注意が必要です。当社でのデータパーティションの利用このパーティションの仕組みを当社のサッカー速報サービスでも利用しています。当日の試合に関連するデータをパーティションを使って分割し、各テーブルへの負荷の分散を実現しています。下記の図を参照すると分かりやすいと思いますが、速報に関するテーブルを、当日の試合(速報パーティション)、今年度の試合、過去年度の試合という形でパーティションに分割しています。当日分はさらに試合単位で管理していて、当日行われる試合分だけパーティションを分割し、速報サービスを提供している時に最もアクセスを受けるテーブルへの負荷、そしてデータベース全体への負荷を分散しています。速報サービスが終わった翌日には、この日の速報パーティションを今年度のパーティションにマージして速報パーティションを再構成し、パーティションの入れ替えを行っています。まとめ今回はデータベースのデータパーティションという機能を使ったチューニング方法をご紹介しましたが、当社ではシステムパフォーマンスの維持・向上に向け、日々取り組んでいます。アプローチの方法に正解はなく、日々変化していくシステムに合わせ、最適なチューニングを行う必要があります。情報収集と仮説、検証を繰り返し行いながら、正解を導き出す。バックグラウンドの世界でなかなか地道な作業ではありますが、技術者として非常にやりがいがある分野だと思います。一緒にあーだこーだ言いながらやってくれる方、ぜひお待ちしております!エンジニア募集中!データスタジアムでは一緒に働いていただけるエンジニアを募集しています。野球、サッカー、バスケなどスポーツが好きな方であれば、とても面白い仕事ができる会社です。興味を持たれた方はぜひこちらをご覧ください。