シャーディングとは
シャーディング(水平分割)とは、データベースの規模が大きくなりすぎた際に、1つの巨大なテーブルに保存されているデータを、行単位(横方向)で細かく分割し、複数の異なるデータベースサーバーに分散して保存する技術です。
データ量が数億件に達すると、いくらサーバーの性能を上げても検索や書き込みに時間がかかるようになります。シャーディングでは、例えばユーザーIDの奇数・偶数や、住んでいる地域といった特定のルールに従って、データを「シャード」と呼ばれる小さなデータベースに切り分けます。これにより、それぞれのサーバーが扱うデータ量が軽くなり、アクセスも分散されるため、データベース全体の処理能力を大きく向上させることができます。
具体例
世界中で利用されるSNSアプリのユーザーデータベースを考えます。全ユーザーのデータを1台の巨大なサーバーに詰め込むのではなく、ユーザーIDの末尾が「0〜3」「4〜6」「7〜9」の3グループに分け、それぞれ別のサーバーA、B、Cに分けて保存します。ユーザーがログインする際は、自分のIDに応じたサーバーだけにアクセスするため、スムーズに通信が行われます。
もう少し詳しく
シャーディングは、データベースの「水平スケーリング(スケールアウト)」を実現するためのアプローチです。これに対し、データベースのスペックを上げることを「垂直スケーリング(スケールアップ)」と呼びます。シャーディングを設計する上で最も重要なのが「シャードキー(分散キー)」の決定です。データの偏り(ホットスポット)が生じないよう、均等にデータを分散できるキーを選ぶ必要があります。分散の手法には、シャードキーをハッシュ関数にかけて保存先を決める「ハッシュベース・シャーディング」や、IDの範囲(例:1〜100万、100万1〜200万)で分ける「レンジベース・シャーディング」などがあります。シャーディングの課題として、複数のシャードにまたがるデータ結合(JOIN)や、トランザクションの制御が極めて複雑になり処理パフォーマンスが低下する点が挙げられます。
試験でのポイント
試験においては、データベースのスケーラビリティを高めるアプローチとして、サーバーの台数を増やす「スケールアウト(水平分割/シャーディング)」と、サーバー自体の性能(CPUやメモリ)を高める「スケールアップ(垂直分割)」の概念と違いが問われます。また、シャーディングを行うことの技術的メリット(単一障害点の回避、コスト効率の向上)や、データベース設計における「シャードキー」の選定がシステムパフォーマンスに与える影響についても理解が必要です。さらに、シャーディング後のデータベースにおいて、ACID特性(特に整合性の一貫性)をどのように保つかという分散データベース特有の課題についても概念を整理しておきましょう。
関連する用語
シャーディングに関連する用語としては、分散の基準となる「シャードキー」や、サーバー台数を増やして拡張する「スケールアウト」、性能を強化する「スケールアップ」があります。また、列単位(縦方向)で分割する「垂直分割」や、分散システムにおいて一貫性・可用性・分断耐性の3つを同時に満たすことはできないとする「CAP定理」も、高度なデータベース設計における重要な関連用語です。