データベースを分割したいのですが、このトピックの専門家ではありません。だからここに私の考慮事項があります。シャーディング キーは、要求を適切なノードに送信するための優れたインデックスですが、テーブルに定義される残りのインデックスはどうですか? これらのインデックスを参照するリクエストが適切なノードにも配信されるようにして、1 つのノードのみがリクエストを処理するようにします。この目的のために私が理解している限り、いくつかの集中型インデックス ノードが存在する必要があります。したがって、私の質問は、この機能が MYSQL のような RDBMS に既に存在するかどうか、または他の特別な製品を使用する必要があるかどうかです。
2 に答える
Andrey、あなたが説明しているのは、データとインデックスが自動的に分散され、クエリがノード間で分散される Clustrix データベースのしくみです。Clustrix は「クエリをデータにもたらし」、シェアード ナッシング アーキテクチャを備えています (したがって、集中型のインデックスは必要ありません)。MySQL には分散コンピューティング用の組み込み機能がありません。さまざまなボルトオン オプションがありますが、集中型リソースの制限に達すると、最終的にはスケーリングの制限に遭遇します。
免責事項: 私はScaleBaseで働いており、毎日シャーディングを行っています...
たとえば、列 A に従ってシャードする場合、columnA=xx の WHERE は単一のシュラッドに移動することをここでお勧めします。WHERE columnB=xx は、すべてのシャードに columnB=xx が存在する可能性があるため、すべてのシャードに移動する必要があります。columnA と columnB が関連している場合を除きます。そして、そのリレーションをマッピング テーブルに保存する必要があります。すべての DB で実行すると超高速になる可能性があると言えます。並行して実行し、結果をマージする必要があります。ScaleBase では、ORDER BY、GROUP BY などのマージをサポートしています。簡単ではありません...
私のブログで詳細をご覧ください: http://database-scalability.blogspot.com