シャーディングは、データベースの「水平分割」の別名です。より明確にするために、その用語を検索することをお勧めします。
ウィキペディアから:
水平分割は、データベーステーブルの行が(正規化のように)列で分割されるのではなく、個別に保持される設計原則です。各パーティションはシャードの一部を形成し、シャードは個別のデータベースサーバーまたは物理的な場所に配置される場合があります。利点は、各テーブルの行数が減少することです(これにより、インデックスサイズが減少し、検索パフォーマンスが向上します)。シャーディングがデータの実際の側面に基づいている場合(ヨーロッパの顧客とアメリカの顧客など)、適切なシャードメンバーシップを簡単かつ自動的に推測し、関連するシャードのみにクエリを実行できる場合があります。
シャーディングの詳細:
まず、各データベースサーバーは同一であり、同じテーブル構造を持っています。次に、データレコードは分割されたデータベースに論理的に分割されます。パーティション化されたデータベースとは異なり、各完全なデータレコードは1つのシャードにのみ存在し(バックアップ/冗長性のミラーリングがない限り)、そのデータベースですべてのCRUD操作が実行されます。使用されている用語は気に入らないかもしれませんが、これは論理データベースを小さな部分に編成する別の方法を表しています。
更新: MVCを壊すことはありません。データを格納する正しいシャードを決定する作業は、データアクセスレイヤーによって透過的に行われます。そこで、データベースのシャーディングに使用した基準に基づいて正しいシャードを決定する必要があります。(アプリケーションの具体的な側面に基づいて手動でデータベースをいくつかの異なるシャードに分割する必要があるため)。正しいシャードを使用するには、データベースにデータをロードしたりデータベースにデータを格納したりするときに注意する必要があります。
たぶん、Javaコードを使用したこの例は、これが実際のシナリオでどのように機能するかをいくぶん明確にします(Hibernate Shardsプロジェクトに関するものです)。
「why sharding
」に対処するには、主に大量のデータを含む非常に大規模なアプリケーションのみを対象としています。まず、データベースクエリの応答時間を最小限に抑えることができます。2つ目は、1つの大きなサーバーではなく、より安価な「ローエンド」マシンを使用してデータをホストできるため、もう十分ではない可能性があります。