ピックアップコラム
-
Pickup!
プラグインなし!オリジナルSNSシェアボタンの作り方ガイド
-
Pickup!
カラー別にみてみる!WEBサイトにおける配色パターン
-
Pickup!
サイドバーとは?サイドバーを設置するメリットと書き方
-
Pickup!
ワードプレスのプラグインで画像の圧縮・最適化をしてみた
シャーディングとはDataBaseの負荷分散方法の1種です。
水平分割とも呼ばれます。
同じテーブルを複数のDataBaseに用意し、1つのテーブルに保存していたレコードを分散する事で
各DataBase内に保持されるレコードの量をへらす負荷分散の方法です。
1つのテーブル内のレコード数が大きくなる事で、低下していく処理速度を複数のDataBaseに分ける事で
1テーブル内のデータ量を減らし、1DataBase内のデータ量も減らすことができます。
また、DataBaseのサーバーを分けることでCPUやメモリにかかる負荷も分散されます。
更に、保存しているディスクを分ける事ができ保存する事が出来るデータの最大量を増やすことが可能となります。
一つのテーブルを3つに分ける際は、ID等の数値の場合分割する数で割った場合の余りの値を基準に
データを格納するDataBaseを決める手法がよく使用されます。
例えば、IDが1、2、3、4、5、とある場合に3つのDataBaseに分配する場合
となりそれぞれの対応したDataBaseにデータを格納します
数値以外の場合は、事前に割り振りをどうするのかを決めて配列等で分配する手法を取る事もあるようです。
水平分割はDataBaseが別れてしまう為以下の点に注意しなくては運用できなくなってしまいます。
どうしてもこれらの問題を解決できない場合は水平分割は避けたほうが良いのかもしれないです。
正規化を細かく行っていた場合等は特にテーブル同士のJOINが必要となる為、この問題の発生率も高いのではないかと思われます。
シャーディングというと基本的に複数のDataBaseに同じカラム構成のテーブルを作成する形が主流です。
しかし、テーブルとのJOINがどうしても必要な場合にも、シャーディングが必要になることがあります。
その場合はテーブルシャーディングが有効かもしれません。
テーブルシャーディングとは、同じDataBase内で同じカラム構成のテーブルを複数用意し
分散の対象の値をテーブル名に入れる事で1テーブル内のデータ量を分散します。
この方法は、他テーブルとのJOIN等が出来る点が特徴です。
しかし、DataBase内の容量を分散する事はできなくなる為通常のシャーディング(データベースシャーディング)とテーブルシャーディングのどちらを使うかはしっかりと設計をしないといけません。
1つのDataBase内でのテーブルの水平分割をテーブルシャーディングと呼びます。
複数のDataBaseでの水平分割をデーターベースシャーディングと呼ぶこともあります。
シャーディング(水平分割)はDataBaseを利用するシステムを作成する際にとても重要な要素になります。
1つのテーブルに多量のデータ(1億レコード等)がある場合、様々な動作に負荷がかかるようになります。
INDEX等でのSQLのチューニングも必要ですが、シャーディングの様に実際にデータの量を調整してみると
大幅にシステムの速度を高速化できるでしょう。
その際はしっかりとした設計で、どうシャーディングをすると問題が無いかを決めていく事が重要です。
受付時間:平日10:00~19:00(土・日・祝日を除く)