エンジニアレポート

データパーティションを使ってデータベースをチューニングする

2019年03月20日

データスタジアムのエンジニアの植草です。
主に野球・サッカーを中心とした配信サービスのシステム運用を担当しております。

当社では様々なスポーツの速報コンテンツを展開しており、また一つの競技だけを見ても年々データが増加しています。そのため、速報性の維持・向上を目的としたシステムのチューニングに日々取り組んでいます。

ただし、チューニングと言っても、サーバ、ネットワーク、データベースなどボトルネックの要因によりアプローチの方法は様々ですが、今回はデータベースに焦点を当てデータパーティションという概念を使ったチューニングの例をご紹介します。

データパーティションによるチューニング

基本的にデータベースにはデータが格納されているデータファイルという物理ファイルが存在していて、ユーザからクエリが実行されるとデータベースは、それらのデータファイルへアクセスしてデータを抽出しています。データパーティションは特定のテーブルだけ、別のファイルに分割し、データファイルへのアクセスを分散させることで、データベースのアクセスやレスポンスのスピード向上を実現します。

例を挙げて説明します。

パーティション分割前の状態
・データベース内にはA、B、Cの3つのテーブルが存在
・このデータベースは、1つのデータファイルから構成
・Aテーブルには日程データを含むテーブルで、レコード件数は数千万件

パーティションを分割する
Aテーブルは件数も多く、ここにアクセスをすると、他のテーブル、B、Cテーブルのアクセスにも大きな影響を与えているため、Aテーブルを別のデータファイルに分けます。さらに年度をまたいだクエリの実行も稀なため、年度ごとにもファイルを分割します。

example1

(各テーブルと分割後のデータファイル)
B、Cテーブル:元のデータファイルのまま
Aテーブル:2019年用ファイル、2018年用ファイル、2017年以前の過去ファイルの3つに分割

今までは1つのデータファイルへのアクセスが集中していましたが、特定のテーブルを切りはなすことでファイルへのアクセスが分散され、並列でのアクセスが可能となり、パフォーマンスの向上を図ることができます。
また、アクセスを分散することができたということは更新処理についても同様なので更新時のロックを抑制することも可能です。

データパーティションを利用するときの注意点

ただし、闇雲にファイルを分割すればいいという訳ではありません。
システムによってテーブルの数やデータ件数、アクセスの頻度などが様々であり、今回のように、データ件数が他のテーブルより大幅に多いとかアクセスが集中しているなどのテーブルに対し分割することをオススメします。

またファイルを分割すればするほど、メンテナンスが複雑になり、システム運用の負荷をかける可能性もありますので、その辺りの見極めには注意が必要です。

当社でのデータパーティションの利用

このパーティションの仕組みを当社のサッカー速報サービスでも利用しています。当日の試合に関連するデータをパーティションを使って分割し、各テーブルへの負荷の分散を実現しています。

下記の図を参照すると分かりやすいと思いますが、速報に関するテーブルを、当日の試合(速報パーティション)、今年度の試合、過去年度の試合という形でパーティションに分割しています。そして、当日分はさらに試合単位で管理していて、当日行われる試合分だけパーティションを分割し、速報サービスを提供している時に最もアクセスを受けるテーブルへの負荷、そしてデータベース全体への負荷を分散しています。

example2

なお、速報サービスが終わった翌日には、この日の速報パーティションを今年度のパーティションにマージして速報パーティションを再構成し、パーティションの入れ替えを行っています。

まとめ

今回はデータベースのデータパーティションという機能を使ったチューニング方法をご紹介しましたが、当社ではシステムパフォーマンスの維持・向上に向け、日々取り組んでいます。アプローチの方法に正解はなく、日々変化していくシステムに合わせ、最適なチューニングを行う必要があります。

情報収集と仮説、検証を繰り返し行いながら、正解を導き出す。バックグラウンドの世界でなかなか地道な作業ではありますが、技術者として非常にやりがいがある分野だと思います。

一緒にあーだこーだ言いながらやってくれる方、ぜひお待ちしております!

エンジニア募集中!

データスタジアムでは一緒に働いていただけるエンジニアを募集しています。野球、サッカー、バスケなどスポーツが好きな方であれば、とても面白い仕事ができる会社です。興味を持たれた方はぜひこちらをご覧ください。

エンジニアトップ エンジニアインタビュー エンジニアレポート

  • 採用情報
  • おしらせ
  • 掲載事例

ページトップヘ