0

ASP.NET アプリケーションで Amazon RDS MySQL を使用することにしました。将来的に大容量のデータベースをサポートするために、シャーディングを使用することにしましたが、実装は簡単です。Id が 1,000,0000 を超えるインクリメント id に達したら、1 つのデータベースで作業し、2 番目のデータベースで作業します。

各データベースには同じ DB スキーマがあります。ここで、並行して作業している Amazon RDS サーバーの数を保持する変数を作成します。UNION ALL を使用してクエリを記述します。これらのクエリは動的に作成され、サーバーの数を考慮して、サーバー全体を利用してデータを結合する UNION ALL クエリを作成します。次に、そのデータを再度クエリします。

この手法は、大きくなることが予想されるテーブルに対してのみ使用します。アプリケーションは、サーバーごとに設定した最大 ID (つまり、サーバー 1、最大 1,000,000) に基づいて、どのサーバーに削除および更新 SQL クエリを送信するかを認識します。挿入ステートメントの場合、もちろん最後のサーバーにデータを挿入します。レプリケーション、復元、およびバックアップ機能について心配する必要はありません。Amazon RDS がそれを処理します。

あなたへの私の質問は次のとおりです。

  1. これは、より高価なソリューションを選択して実装するのに安価な独自のシャーディング アーキテクチャを構築する良い方法ですか?
  2. 結合クエリについてはどうですか? 異なるサーバーの接続文字列があれば、ビジュアル スタジオで作成できますか?
  3. このソリューションはパフォーマンスの点でどれほど優れているか、私が知る必要がある落とし穴はありますか?

一般的に、1 台のサーバーから始めて、必要に応じて簡単に拡張できる簡単なソリューションが必要でした。今日のソリューションのほとんどは非常に複雑で、そうでない場合でも非常に高価です。

ありがとう

4

0 に答える 0