私は、AzureでホストされるWebアプリケーションの計画段階にあります。ASP.NETはWebサイト用で、Silverlightはサイト内で豊富なユーザーエクスペリエンスを提供します。アプリケーションデータの保存にAzureTablesまたはSQLAzureを使用する必要がありますか?
11 に答える
Azure Table Storage は、SQL Azure よりも安価なようです。また、SQL Azure よりもスケーラビリティが高いです。
多くのリレーショナル データベースの作業を行っている場合は、SQL Azure を使用する方が簡単です。既に SQL データベースを使用しているアプリケーションを移植する場合、それを SQL Azure に移行することは当然の選択ですが、それをお勧めする唯一の状況です。
Azure テーブルの主な制限は、セカンダリ インデックスがないことです。これは PDC '09 で発表され、現在は近日公開予定となっていますが、時間枠の発表はありません。( http://windowsazure.uservoice.com/forums/34192-windows-azure-feature-voting/suggestions/396314-support-secondary-indexes?ref=titleを参照)
大量のデータにはテーブルと BLOB ストレージを使用し、インデックス、検索、およびフィルター処理には SQL Azure を使用するハイブリッド システムの提案された使用法を見てきました。しかし、私はまだその解決策を自分で試す機会がありませんでした。
セカンダリ インデックスがテーブル ストレージに追加されると、基本的にクラウド ベースのNoSQLシステムになり、現在よりもはるかに便利になります。
名前は似ていますが、SQL Azure テーブルとテーブル ストレージにはほとんど共通点がありません。
ここにあなたを助けるかもしれない2つのリンクがあります:
基本的に、最初に考えるべき質問は、アプリは本当にスケーリングする必要があるかということです。そうでない場合は、SQL Azure を選択してください。
2 つのオプションのどちらかを決定しようとしている人は、必ず報告要件を考慮に入れてください。 SQL Azure Reportingおよびその他のレポート製品は、そのまま SQL Azure をサポートしています。複雑または柔軟なレポートを生成する必要がある場合は、おそらく Table Storage を避けた方がよいでしょう。
もう1つの考慮事項は、遅延です。以前は、MicrosoftがテーブルストアとSQLAzureを使用してさまざまなオブジェクトサイズのスループットとレイテンシーに関するマイクロベンチマークを使用して実行していたサイトがありました。そのサイトはもう利用できないので、私が思い出したものから大まかな概算を示します。テーブルストアは、SQLAzureよりもはるかに高いスループットを持つ傾向があります。SQL Azureのレイテンシーは低くなる傾向があります(最大で1/5)。
テーブルストアは簡単に拡張できることはすでに述べました。ただし、SQLAzureはフェデレーションでも拡張できます。フェデレーション(効果的にシャーディング)は、アプリケーションに多くの複雑さを追加することに注意してください。また、フェデレーションがパフォーマンスにどの程度影響するかはわかりませんが、ある程度のオーバーヘッドがあると思います。
ビジネスの継続性を優先する場合は、 AzureStorageを使用するとデフォルトで安価なジオレプリケーションを利用できることを考慮してください。SQL Azureを使用すると、 SQL Data Syncを使用して同様のことを実行できますが、より多くの労力を費やすことができます。SQL Data Syncでは、データの変更を監視するためにすべてのテーブルでトリガーが必要になるため、パフォーマンスのオーバーヘッドも発生することに注意してください。
Azure Table と組み合わせて Azure Cache を検討することをお勧めします。テーブルだけでも 200 ~ 300 ミリ秒のレイテンシがあり、時折それ以上のスパイクが発生するため、応答時間や UI のインタラクティブ性が大幅に低下する可能性があります。私にとっては、キャッシュとテーブルが最適な組み合わせのようです。
あなたの質問に対して、論理的にどのように SQL テーブルを選択し、どれを Azure テーブルを使用する必要があるかを決定する方法について話したいと思います。
ご存じのように、SQL テーブルはリレーショナル データベース エンジンです。ただし、1 つのテーブルに大きなデータがある場合、SQL テーブルは適用できません。これは、SQL クエリが大きなデータを取得するのが遅いためです。
現時点では、Azure Table を選択できます。Azure Table クエリは非常に高速であり、ビッグ データ用の SQL Table よりも高速です。記事のタイトルと説明など、記事のテーブルには大量のデータがあるため、SQL テーブルを使用すると、各クエリの実行に 30 秒以上かかる場合があります。しかし、Azure Table では、PartitionKey と RowKey によるユーザーの記事フィードの取得が非常に高速です。
この例から、SQL テーブルと Azure テーブルのどちらを選択するかがわかります。
まず、アプリケーションの使用ファネルが何であるかを定義する必要があると思います。データ モデルは頻繁に変更されるか、それとも安定していますか? 超高速の挿入を実行できる必要があり、読み取りはそれほど複雑ではありませんか? 高度な Google のような検索が必要ですか? BLOB を保存していますか?
これらは、データの保存に NoSql アプローチと SQL アプローチのどちらを使用する可能性が高いかを判断するために、自問自答しなければならない (そしてそれだけではない) 質問です。
どちらのアプローチも簡単に共存でき、BLOB ストレージでも拡張できることを考慮してください。