Windows Azure SQL データベースでフェデレーションを使用することは、1 つのオプションです。しかし、Table Storage、Blob、または Queue などの別のデータ ストアに重い作業をオフロードすることを好みます。それらは重い負荷を処理するように構築されており、パーティション分割がはるかに簡単だからです。これを適切なキャッシングと組み合わせると、この制限を簡単に克服できます。
サイトのホームページにトップ 10 の製品リストがあり、1 日あたり 100,000 人の訪問者がいるとします。1 つのオプションは、毎回 SQL Azure にクエリを実行することですが、これは SQL Azure に大きな負荷がかかる可能性があります。ただし、たとえば 24 時間ごとにワーカー プロセスを実行し、その時点で上位 10 個の製品を計算し、それらを Table Storage に保存することができます (国ごと、カテゴリごと、. ..)。これは、事前に生成されたビューとして見ることができます。上位 10 個の製品を表示するたびに、Table Storage (テーブル内の特定のパーティション) からアイテムをクエリすると、スケーリングが大幅に向上します。そこに ASP.NET キャッシュを追加すると、非常に信頼性の高いシステムが得られます。
データの読み取りは以上でした。しかし、ユーザーが注文を作成したり、メッセージを送信したりできるユーザー入力も期待していると思います...また、重い負荷が予想される場合、SQL Azure は直接対話するための最良のオプションではない可能性があります(制限を見た)。フロントエンドとバックエンドの間でキューを使用することは、より良い解決策かもしれません。
ユーザーが注文すると、キュー (ストレージ キューまたはサービス バス キュー) にメッセージを書き込むことができます。作業者はこのメッセージを受け取り、その注文のテーブルに、時間、製品数、さらにはユーザーの注文画面に表示されるステータス (処理中など) を含むレコードを作成します。これが完了したら、注文を完了するために必要なすべての時間があり、完了したら、最終結果を SQL Azure に保存します (さらに、テーブル ストレージの注文レコードを更新します)。最終結果を SQL Azure に保存しても、レポートなどを使用できるようになります...
これは、アプリケーションに大きな影響を与えます。別の解決策として、仮想マシンで SQL Server をホストすることもできますが、これはまだ CTP にあることに注意してください: Windows Azure での SQL Server 仮想マシンのプロビジョニング