大規模なシステムになるほど大量のデータを扱わなければならず、パフォーマンスの低下など問題が出てきやすくなります。
そんな時、バッドノウハウの代替手段となるのが「パーティション機能」です。
DB設計について勉強中に知ったパーティション機能の備忘録ブログ。
対象読者
・DB設計について勉強中
・大規模システムの設計に関わる
・大量のデータでパフォーマンスを向上させたい
目次
パーティション機能とは
パーティション機能の具体例
種類
-レンジパーティション
-リストパーティション
-ハッシュパーティション
パーティション機能とは
大規模なテーブルになるとレコード数が大量になり検索に時間がかかります。そんな時にレコード単位にテーブルを分割することを「水平分割」と言います。
水平分割すると、テーブルあたりのレコード数が少なくなるので検索時間も短縮できます。
しかし水平分割がパフォーマンス改善に効果を発揮するのはデータを総なめで検索することがないという条件が成立する場合のみであって、それが常に成立するかどうかは保証がありません。
また、テーブルが次々に増えていくのでアプリケーションも改修が必要となり拡張性に欠けます。
そんな時に代替手段となるのがパーティション機能です。大規模なテーブルを分割することなく、パーティションキーを軸としてデータベースの内部で分割して管理をする方法です。
パーティション機能の具体例
例えば、会社ごとの1年の売り上げデータを保持する「売り上げテーブル」があったとします。
「年度」「会社id」「売り上げ」のカラムを持っていて、「年度」をパーティションキーに指定することで、年度ごとにテーブルが内部で分割され、検索時にアクセスするレコードが限られるのでパフォーマンスの改善ができます。
種類
レンジパーティション
データを期間や範囲で分割する方法。最も一般的な方法。
先ほどの例は年度ごとに分割しているので、レンジパーティションに含まれる。
リストパーティション
任意の値リストを指定することでデータを分割する方法。
地域や都道府県などの不連続な値をリスト化し、任意のパーティションに格納する。
ハッシュパーティション
内部で生成されるハッシュ値を使ってデータを均一に分割する方法。
レンジパーティション、リストパーティションが使えないようなデータを均一に分割する時に有効。
パーティションキーはなるべく一意の列を含めるようにする。(会社番号、商品番号など)
メリット:均一に分割するので、パーティションサイズがほぼ均等になる。