可能な限り、常にテーブルスキャンを回避する必要があります。彼らは非常に高価な操作です(特にパーティションがたくさんある場合)。テーブルストレスの観点からあまりそうではありませんが、非常に高い総レイテンシを持っています(後述)。それは、単にそれを避けることができないことが時々あります。
私たちはストレージアーキテクチャを更新し、ターゲット制限の束を増やしました。
http://blogs.msdn.com/b/windowsazure/archive/2012/11/02/windows-azure-s-flat-network-storage-and-2012-scalability-targets.aspx
各ストレージアカウントは現在、20K IOPS /秒です。 各パーティションは2k/secになりました
パーティションのやりとりは少し微妙で、使用方法(および時間の経過とともに)によって異なります。
Azureストレージには2つのステージがあります.1つのサーバーセットが範囲を処理し、もう1つが実際のストレージ(つまり3つのコピー)を設定します。テーブルが冷たい場合、すべてのパーティションは1台のサーバーによってサービスされる可能性があります。パーティションに持続的なストレスが加わると、システムはワークロード(すなわちシャード)を追加のサーバーに自動的に広げ始めます。破片はパーティションの境界に作られています。
ストレスが低い/中程度の場合は、スレッシュホールドに達しないか、最小限の回数しかヒットしないことがあります。また、アクセスパターンには何らかの影響があります(追加する場合はシャーディングは役に立ちません)。すべてのパターンをランダムにアクセスできるようになります。システムのリバランシングが始まると、数秒間503応答が得られ、その後正常に戻ります。
テーブルスキャンを実行する場合は、実際にテーブルに複数回ラウンドトリップします。クエリがパーティションの最後に到達すると、見つかったデータ(条件が満たされていない場合はデータがない)と継続トークンが返されます。クエリは、テーブルの一番下に達するまで、再度送信されます(トークンで戻されます)。これはSDKによって抽象化されていますが、直接REST呼び出しを行った場合はそれが表示されます。
テーブルのパフォーマンスの観点からは、スキャンは現在スキャン中のパーティションにのみ影響します。
複数のパーティションにヒットする広範なクエリを高速化するには、実際には複数の並列アクセス(パーティションごとに1つのスレッド)まで分割してから、クライアントで結合してください。本当にそれはあなたが戻っているデータの量、テーブルの大きさなどによって異なります。