データベースシャーディングとは何ですか?
データベースシャーディングは、複数のマシンにまたがって大規模なデータベースを格納するプロセスです。1 台のマシン、またはデータベースサーバーは、限られた量のデータのみを格納および処理できます。データベースシャーディングは、シャードと呼ばれる小さなチャンクにデータを分割し、複数のデータベースサーバーに保存することで、この制限を克服します。通常、すべてのデータベースサーバーは同じ基盤テクノロジーを利用し、連携して大量のデータを格納および処理します。
データベースシャーディングが重要なのはなぜですか?
アプリケーションが大きくなるにつれて、アプリケーションのユーザー数とそこに格納されるデータの量は時間の経過に合わせて増加します。データ量が大きくなり過ぎたり、アプリケーションを使用して情報を同時に読み取ったり保存したりしようとするユーザーが多過ぎたりすると、データベースがボトルネックになります。アプリケーションの速度は低下し、カスタマーエクスペリエンスに影響が生じます。この問題を解決する方法の 1 つとしてデータベースシャーディングを挙げることができます。なぜなら、これはシャード全体でより小さなデータセットを並列処理することを可能にするからです。
データベースシャーディングにはどのようなメリットがありますか?
組織は、データベースシャーディングを使用して次のメリットを得ています。
応答時間を改善する
単一の大規模データベースでは、データ取得に時間がかかります。データベース管理システムは、正しいデータを取得するために多くの行を検索する必要があります。対照的に、データシャードの行数はデータベース全体よりも少ないです。したがって、シャーディングされたデータベースから特定の情報を取得したり、クエリを実行したりするのにかかる時間が短くなります。
完全なサービス停止を回避する
データベースをホストしているコンピュータに障害が発生すると、データベースに依存するアプリケーションにも障害が発生します。データベースシャーディングは、データベースの一部を異なるコンピュータに分散させることでこれを防ぎます。いずれかのコンピュータで障害が発生しても、他の機能シャードで動作できるため、アプリケーションはシャットダウンされません。 シャーディングは、多くの場合、シャード間のデータレプリケーションと組み合わせて実行されます。そのため、1 つのシャードが使用できなくなった場合、代替シャードからデータにアクセスして復元できます。
効率的にスケールする
増大するデータベースは、より多くのコンピューティングリソースを消費し、最終的にはストレージ容量の限界に達します。組織はデータベースシャーディングを使用して、データベースのスケーリングをサポートするためにコンピューティングリソースをさらに追加できます。メンテナンスのためにアプリケーションをシャットダウンすることなく、実行時に新しいシャードを追加できます。
データベースシャーディングはどのように機能しますか?
データベースは、列と行で構成される複数のデータセットに情報を格納します。データベースシャーディングは、単一のデータセットをパーティションまたはシャードに分割します。各シャードには、ノードと呼ばれる複数のコンピュータに個別に保存できる一意の情報行が含まれています。すべてのシャードは別々のノードで実行されますが、元のデータベースのスキーマまたは設計を共有します。
例えば、顧客レコードのデータセットを含むシャーディングされていないデータベースは、次のようになる場合があります。
お客様 ID |
名前 |
州/地域 |
1 |
John |
カリフォルニア |
2 |
Jane |
ワシントン |
3 |
パウロ |
アリゾナ |
4 |
Wang |
ジョージア |
シャーディングでは、次に示すように、テーブルからさまざまな情報行を分離し、それらを異なるマシンに保存します。
コンピュータ A
お客様 ID |
名前 |
州/地域 |
1 |
John |
カリフォルニア |
2 |
Jane |
ワシントン |
コンピュータ B
お客様 ID |
名前 |
州/地域 |
3 |
パウロ |
アリゾナ |
4 |
Wang |
ジョージア |
シャード
パーティション化されたデータチャンクは、論理シャードと呼ばれます。論理シャードを格納するマシンは、物理シャードまたはデータベースノードと呼ばれます。物理シャードには複数の論理シャードを含めることができます。
シャードキー
ソフトウェアデベロッパーは、シャードキーを使用してデータセットのパーティショニング方法を決定します。データセットの列によって、シャードを形成するためにどのデータ行がグループ化されるかが決まります。データベース設計者は、既存の列からシャードキーを選択するか、新しいシャードキーを作成します。
シェアードナッシングアーキテクチャ
データベースシャーディングは、シェアードナッシングアーキテクチャで動作します。各物理シャードは独立して動作し、他のシャードを認識しません。リクエストしたデータを含む物理シャードのみが、データを並行して処理します。
ソフトウェアレイヤーは、データストレージと、これらの複数のシャードからのアクセスを調整します。例えば、一部のデータベーステクノロジーには自動シャーディング機能が組み込まれています。ソフトウェアデベロッパーは、アプリケーションでシャーディングコードを記述して、1 つまたは複数の正しいシャードから情報を保存または取得することもできます。
データベースシャーディングにはどのような方法がありますか?
データベースシャーディングメソッドは、特定のデータ行について正しいノードを特定するために、シャードキーにさまざまなルールを適用します。一般的なシャーディングアーキテクチャを次に示します。
範囲ベースのシャーディング
範囲ベースのシャーディング、または動的シャーディングは、値の範囲に基づいてデータベース行を分割します。その後、データベース設計者は、それぞれの範囲にシャードキーを割り当てます。例えば、データベース設計者は、次のように顧客名の最初のアルファベットに従ってデータをパーティショニングします。
名前 |
シャードキー |
A から I で始まる |
A |
J から S で始まる |
B |
T から Z で始まる |
C |
顧客レコードをデータベースに書き込むとき、アプリケーションは顧客の名前を確認して正しいシャードキーを特定します。その後、アプリケーションはそのキーを物理ノードと照合し、そのマシンに行を保存します。同様に、アプリケーションは特定のレコードを検索するときに反対方向の照合を実行します。
メリットとデメリット
データの値によっては、範囲ベースのシャーディングによって、単一の物理ノードでデータの過負荷が発生する可能性があります。この例では、シャード A (A から I で始まる名前を含む) には、シャード C (T から Z で始まる名前を含む) よりもはるかに多くのデータ行が含まれる場合があります。ただし、より簡単に実装できます。
ハッシュシャーディング
ハッシュシャーディングは、ハッシュ関数と呼ばれる数式を使用して、データベースの各行にシャードキーを割り当てます。ハッシュ関数は、行から情報を取得し、ハッシュ値を生成します。アプリケーションは、ハッシュ値をシャードキーとして使用し、対応する物理シャードに情報を保存します。
ソフトウェアデベロッパーは、ハッシュシャーディングを使用して、データベース内の情報を複数のシャードに均等に分散させます。例えば、ソフトウェアは顧客レコードを 1 と 2 の代替ハッシュ値を持つ 2 つのシャードに分割します。
名前 |
ハッシュ値 |
John |
1 |
Jane |
2 |
パウロ |
1 |
Wang |
2 |
メリットとデメリット
ハッシュシャーディングは、物理シャード全体で均等にデータを分散させますが、情報の意味に基づいてデータベースを分離しません。そのため、ソフトウェアデベロッパーは、コンピューティング環境に物理シャードをさらに追加するときに、ハッシュ値を再割り当てするのが困難になる場合があります。
ディレクトリシャーディング
ディレクトリシャーディングは、ルックアップテーブルを使用して、データベース情報を対応する物理シャードと照合します。ルックアップテーブルは、データベース列をシャードキーにリンクするスプレッドシート上のテーブルのようなものです。例えば、次の図は、衣類の色のルックアップテーブルを示しています。
カラー |
シャードキー |
青 |
A |
赤 |
B |
黄 |
C |
黒 |
D |
アプリケーションが衣類の情報をデータベースに保存する場合、ルックアップテーブルを参照します。ドレスが青い場合、アプリケーションは対応するシャードに情報を保存します。
メリットとデメリット
ソフトウェアデベロッパーがディレクトリシャーディングを使用するのは、柔軟性があるためです。各シャードはデータベースの意味のある表現であり、範囲による制限はありません。ただし、ルックアップテーブルに誤った情報が含まれていると、ディレクトリのシャーディングは失敗します。
geo シャーディング
geo シャーディングは、地理的な場所に従ってデータベース情報を分割して保存します。例えば、デートサービスのウェブサイトは、次のようにデータベースを使用してさまざまな都市の顧客情報を保存します。
名前 |
シャードキー |
John |
カリフォルニア |
Jane |
ワシントン |
パウロ |
アリゾナ |
ソフトウェアデベロッパーは都市をシャードキーとして使用します。各顧客の情報は、各都市に地理的に所在する物理的なシャードに保存されます。
メリットとデメリット
geo シャーディングを使用すると、リクエストを実行する顧客とシャードの間の距離が短くなるため、アプリケーションは情報をより迅速に取得できます。データアクセスパターンが主に地理に基づいている場合、これはうまく機能します。ただし、geo シャーディングによってデータ分散が不均等になる可能性もあります。
均等なデータ分散のためにデータベースシャーディングを最適化する方法
特定の物理シャードでデータの過負荷が発生し、他の物理シャードが低負荷のままになると、データベースのホットスポットが発生します。ホットスポットはデータベースでの取得プロセスを遅くし、データシャーディングの目的に沿いません。
シャードキーを適切に選択すると、複数のシャードでデータを均等に分散できます。シャードキーを選択する際には、データベース設計者は次の要素を考慮する必要があります。
カーディナリティ
カーディナリティは、シャードキーの可能な値を説明するものです。これは、個別の列指向データベースで可能なシャードの最大数を決定します。例えば、データベース設計者が「はい」/「いいえ」のデータフィールドをシャードキーとして選択した場合、シャードの数は 2 個に制限されます。
頻度
頻度は、特定のシャードに特定の情報を格納する確率です。例えば、データベース設計者がフィットネスウェブサイト用にシャードキーとして年齢を選択したとします。レコードのほとんどは、30~45 歳の加入者のノードに格納され、データベースのホットスポットが発生する可能性があります。
単調変化
単調変化は、シャードキーの変化率です。シャードキーが単調に増加または減少すると、シャードのバランスが崩れます。例えば、フィードバックデータベースは次のように 3 つの異なる物理シャードに分割されます。
- シャード A は、0~10 回の購入を行った顧客からのフィードバックを保存します。
- シャード B は、11~20 回の購入を行った顧客からのフィードバックを保存します。
- シャード C は、21 回以上の購入を行った顧客からのフィードバックを保存します。
ビジネスが成長するにつれて、顧客は 21 回以上の購入を行うことになるでしょう。アプリケーションは、これらの顧客のフィードバックをシャード C に保存します。シャード C には他のシャードよりも多くのフィードバックレコードが含まれるようになるため、シャードのバランスが崩れることになります。
データベースシャーディングに代わる手法にはどのようなものがありますか?
データベースシャーディングは、アプリケーションのワークロードを共有するために追加のノードまたはコンピュータを割り当てる水平スケーリング戦略です。フォールトトレラントなアーキテクチャにより、組織は水平スケーリングのメリットを得ることができます。1 台のコンピュータに障害が発生しても、他のコンピュータは中断することなく動作を継続します。データベース設計者は、論理シャードを複数のサーバーに分散させることでダウンタイムを短縮します。
ただし、シャーディングの他にも、いくつかのデータベーススケーリング戦略があります。他のいくつかの手法も詳細に検討し、比較してみてください。
垂直スケーリング
垂直スケーリングは、1 台のマシンのコンピューティング性能を高めます。例えば、IT チームは、増加するトラフィックに対応するために、CPU、RAM、およびハードディスクをデータベースサーバーに追加します。
データベースシャーディングと垂直スケーリングの比較
垂直スケーリングのコストは比較的低いですが、垂直にスケールできるコンピューティングリソースには制限があります。一方、水平スケーリング戦略であるシャーディングは実装がより簡単です。例えば、IT チームは古いコンピュータハードウェアをアップグレードする代わりに複数のコンピュータをインストールします。
レプリケーション
レプリケーションは、データベースの正確なコピーを作成し、それらを異なるコンピュータに保存する手法です。データベース設計者は、レプリケーションを使用して、フォールトトレラントなリレーショナルデータベース管理システムを設計します。データベースをホストしているコンピュータのいずれかに障害が発生しても、他のレプリカは動作し続けます。レプリケーションは、分散コンピューティングシステムでは一般的な方法です。
データベースシャーディングとレプリケーションの比較
データベースシャーディングでは、同じ情報のコピーは作成されません。代わりに、1 つのデータベースを複数の部分に分割し、それらを異なるコンピュータに格納します。レプリケーションとは異なり、データベースシャーディングでは可用性は高くなりません。 シャーディングをレプリケーションと組み合わせて使用すると、スケールと高可用性の両方を実現できます。
場合によっては、データベースシャーディングは、特定のデータセットのレプリケーションで構成されることがあります。例えば、米国と欧州の両方の顧客に製品を販売する小売店は、両方のリージョンのために、サイズ変換テーブルのレプリカを異なるシャードに保存する場合があります。アプリケーションは、変換テーブルの複製コピーを使用して、他のデータベースサーバーにアクセスすることなく、測定サイズを変換できます。
パーティション
パーティショニングは、データベーステーブルを複数のグループに分割するプロセスです。パーティショニングは、次の 2 つのタイプに分類されます。
- 水平パーティショニングは、データベースを行で分割します。
- 垂直パーティショニングは、データベースの列の異なるパーティションを作成します。
データベースシャーディングとパーティショニングの比較
データベースシャーディングは、水平パーティショニングに似ています。どちらのプロセスも、データベースを一意の行の複数のグループに分割します。パーティショニングはすべてのデータグループを同じコンピュータに保存しますが、データベースシャーディングはそれらを異なるコンピュータに分散させます。
データベースシャーディングにはどのような課題がありますか?
組織は、データベースシャーディングを実装する際にこれらの課題に直面する可能性があります。
データのホットスポット
一部のシャードでは、データの不均等な分散により、バランスが崩れます。例えば、A で始まる顧客名を含む 1 つの物理シャードは、他のシャードよりも多くのデータを受け取ります。この物理シャードは、他のシャードよりも多くのコンピューティングリソースを使用します。
ソリューション
最適なシャードキーを使用することで、データを均等に分散できます。一部のデータセットは、他のデータセットよりもシャーディングに適しています。
運用の複雑さ
データベースシャーディングは運用を複雑にします。単一のデータベースを管理する代わりに、デベロッパーは複数のデータベースノードを管理する必要があります。情報を取得する際に、デベロッパーは複数のシャードをクエリし、各情報を組み合わせる必要があります。これらの取得オペレーションにより、分析が複雑になる可能性があります。
ソリューション
AWS データベースポートフォリオでは、データベースのセットアップとオペレーションが大幅に自動化されています。これにより、シャーディングされたデータベースアーキテクチャでの作業がより合理化されたタスクになります。
インフラストラクチャのコスト
組織は、物理的なシャードとしてコンピュータをさらに追加する際に、より多くのインフラストラクチャのコストを支払うことになります。オンプレミスデータセンターのマシンの数を増やすと、メンテナンスコストが増える可能性があります。
ソリューション
デベロッパーは Amazon Elastic Compute Cloud (Amazon EC2) を使用して、クラウドでシャードをホストおよびスケールします。AWS が完全に管理する仮想インフラストラクチャを使用することで、コストを削減できます。
アプリケーションの複雑さ
ほとんどのデータベース管理システムには、シャーディング機能が組み込まれていません。つまり、データベース設計者とソフトウェアデベロッパーは、データベースを手動で分割、ディストリビューション、および管理する必要があります。
ソリューション
水平スケーリングをサポートするいくつかの組み込み機能を備えた、適切な AWS 目的別データベースにデータを移行できます。
AWS はデータベースシャーディングをどのようにサポートできますか?
AWS は、最新のデータ戦略を構築するために使用できるグローバルなデータ管理プラットフォームです。AWS を使用すると、適切な目的別データベースを選択したり、大規模に高パフォーマンスを達成したり、フルマネージドデータベースを実行したり、高可用性やセキュリティから恩恵を受けたりすることができます。
今すぐ AWS アカウントを作成して、AWS でのデータ管理の使用を開始しましょう。