Webサイト制作Web開発2019.10.31多量の情報を扱うシステムを作成する際に一番の問題になるのがDataBaseの負荷です。容易に行える点が利点ですが考えなしに、1箇所にデータを集めてしまうと一定のラインを超えた瞬間から顕著にレスポンスの低下が見られます。その対策としてよく用いられるのがシャーディングです。今回はこのシャーディングについて、活用方法とその効果に関して紹介していきます。まとめシャーディングとはシャーディングとはDataBaseの負荷分散方法の1種です。水平分割とも呼ばれます。同じテーブルを複数のDataBaseに用意し、1つのテーブルに保存していたレコードを分散する事で各DataBase内に保持されるレコードの量をへらす負荷分散の方法です。1つのテーブル内のレコード数が大きくなる事で、低下していく処理速度を複数のDataBaseに分ける事で1テーブル内のデータ量を減らし、1DataBase内のデータ量も減らすことができます。DataBaseのサーバーを分けることでCPUやメモリにかかる負荷も分散されます。保存しているディスクを分ける事ができ保存する事が出来るデータの最大量を増やすことが可能となります。一つのテーブルを3つに分ける際は、ID等の数値の場合分割する数で割った場合の余りの値を基準にデータを格納するDataBaseを決める手法がよく使用されます。0:3余り1:1、4余り2:2、5となりそれぞれの対応したDataBaseにデータを格納します数値以外の場合は、事前に割り振りをどうするのかを決めて配列等で分配する手法を取る事もあるようです。水平分割で気をつけること水平分割はDataBaseが別れてしまう為以下の点に注意しなくては運用できなくなってしまいます。他テーブルとのJOINが難しい点シャーディングの分割対象にした値以外での検索が難しくなる点どうしてもこれらの問題を解決できない場合は水平分割は避けたほうが良いのかもしれないです。正規化を細かく行っていた場合等は特にテーブル同士のJOINが必要となる為、この問題の発生率も高いのではないかと思われます。テーブルシャーディングとはシャーディングというと基本的に複数のDataBaseに同じカラム構成のテーブルを作成する形が主流です。テーブルとのJOINがどうしても必要な場合にも、シャーディングが必要になることがあります。その場合はテーブルシャーディングが有効かもしれません。テーブルシャーディングとは、同じDataBase内で同じカラム構成のテーブルを複数用意し分散の対象の値をテーブル名に入れる事で1テーブル内のデータ量を分散します。この方法は、他テーブルとのJOIN等が出来る点が特徴です。DataBase内の容量を分散する事はできなくなる為通常のシャーディング(データベースシャーディング)とテーブルシャーディングのどちらを使うかはしっかりと設計をしないといけません。1つのDataBase内でのテーブルの水平分割をテーブルシャーディングと呼びます。複数のDataBaseでの水平分割をデーターベースシャーディングと呼ぶこともあります。まとめシャーディング(水平分割)はDataBaseを利用するシステムを作成する際にとても重要な要素になります。1つのテーブルに多量のデータ(1億レコード等)がある場合、様々な動作に負荷がかかるようになります。INDEX等でのSQLのチューニングも必要ですが、シャーディングの様に実際にデータの量を調整してみると大幅にシステムの速度を高速化できるでしょう。その際はしっかりとした設計で、どうシャーディングをすると問題が無いかを決めていく事が重要です。2016年9月ご質問やご相談などお気軽にお問い合わせください。