大規模システムの設計におけるデータベースのスケーリング技術

データベースレプリケーション

データベースレプリケーションの基本

データベースをコピーして、複数のサーバーに分けて保存することで、障害が起きてもデータを守ることができます。複数のデータベースがユーザーにデータを提供することで、たくさんの人が同時に読み込めるようになります。

レプリケーションの方法

リーダー・フォロワー方式では、1人のリーダー(マスター)が書き込みを受けて、フォロワー(スレーブ)に変更内容を伝えます。

  • リーダー・リーダー方式では、複数のリーダーが書き込みを受け付けますが、競合解決が必要になります。

競合を解決するための方法は、タイムスタンプベースと最後の書き込み勝ち方式(Last Write Wins)の二つがあります。

タイムスタンプベースでは、最新のタイムスタンプの情報を参考にして競合を解決します。

最後の書き込み勝ち方式では、最も最近に書き込まれたデータが古いデータを上書きします。

アプリケーションによっては、特定のルールを設定して競合を解決することもあります。

競合を解決する方法

シャーディング

シャーディングの基本

  • データベースが巨大化した場合、データを複数のサーバーに分散させることで水平スケーリングを実現。

  • 大きなテーブルを分割し、各シャードにデータを配置する。

シャードキーの決定

シャードキーは、データがどのシャードに割り当てられるかを決定します。

範囲ベースのシャーディングでは、特定の範囲に基づいてデータを分割します。

ハッシュベースのシャーディングでは、ハッシュ関数を使ってデータを均等に分配します。

範囲ベースのシャーディングは、特定のデータを素早く取得できますが、ハッシュベースは均等な分配が可能です。

ハッシュベースでは、範囲クエリが非効率になる可能性があります。

SQLとNoSQLにおけるシャーディング

SQLデータベースのシャーディング

  • 伝統的なSQLデータベースは、シャーディングを自動的にサポートしない。

  • シャーディングロジックを自分で実装する必要がある。

NoSQLデータベースのシャーディング

  • 多くのNoSQLデータベース(例:MongoDB)は、組み込みのシャーディングサポートを提供。

  • 自動的にシャーディングを行うため、カスタムロジックをほとんど必要としない。

レプリケーションとシャーディングの組み合わせ

両技術の利点

  • レプリケーションは高可用性を確保し、読み取り能力をスケールアップ。

  • シャーディングはデータを複数のサーバーに分散させ、処理能力を向上。

組み合わせの実装

  • レプリケーションされたスキーマ内で、リーダーまたはフォロワーのデータベースをシャーディングすることが可能。

  • システムの要件に応じて、両方の技術を組み合わせて使用することが一般的。





いいなと思ったら応援しよう!