2011-01-28 13 views
5

Azure Table Storage(ATS)のRowKeyまたはPartitionKey以外のクエリに対しては、テーブルスキャンを強制されないように警告します。しばらくの間、これはまさに正しいPKとRKを思いついて、他のテーブルに疑似二次インデックスを作成しようとすることに私を麻痺させました。Azureテーブルストレージ - テーブルスキャンはどのくらい高速にできますか?

しかし、私が適切と思ったときにSQL Serverで一般的にテーブルスキャンを実行することがあります。

質問になると、どのくらい高速にテーブルをスキャンできますか?これは実体/秒で一定ですか?それともレコードサイズなどに依存しますか?レスポンシブなアプリケーションが必要な場合、テーブルスキャンにはどれくらい多くのレコードが多すぎますかという経験則がありますか?

答えて

7

テーブルスキャンの問題は、パーティションの境界を越えることと関係しています。保証されるパフォーマンスのレベルは、パーティションレベルで明示的に設定されます。したがって、フル・テーブル・スキャンを実行すると、その効率はあまり良くなく、b)パフォーマンスの保証はありません。これは、パーティション自体が別個のストレージノードに設定されているためで、クロスパーティションスキャンを実行すると、潜在的に膨大な量のリソースが消費されています(同時に複数のノードを結ぶ)。

これらの境界を越える効果は、結果を取得するためにストレージへの追加のラウンドトリップを必要とする継続的なトークンをもたらすと考えています。その結果、パフォーマンスが低下するだけでなく、トランザクション数(およびその後のコスト)が増加します。

横断しているパーティション/ノードの数がかなり少ない場合は、問題に気付かない可能性があります。

しかし、私にはこれを引用しないでください。私はAzure Storageの専門家ではありません。 Azureの実際の領域は、私が知り得ない知識です。 :P

+0

「あなたが保証するパフォーマンスのレベルは、パーティションレベルで明示的に設定されています」と述べました。このセットはどこですか/これについての情報はどこにありますか? –

+0

以下は、この情報やその他の情報を詳しく記載した、製品チームのメンバーによるブログ記事へのリンクです。ほとんどの方法でスキャンすると、1つのパーティションにつき500トランザクションが表示されるシングルテーブルパーティションスケールターゲットが見つかります。 http://blogs.msdn.com/b/windowsazurestorage/archive/2010/05/10/windows-azure-storage-abstractions-and-their-scalability-targets.aspx – BrentDaCodeMonkey

0

私はブレントがお金の100%だと思うが、それでもあなたがそれを試したいと思えば、私はあなた自身を見つけるためにいくつかのテストを実行するよう提案することができます。あなたのクエリにpartitionKeyを含めてみてください。これは、パフォーマンスのキラーである終わりにパーティションが渡るのを防ぐためです。

0

Azureテーブルは、テーブルスキャン用に最適化されていません。長期的なバックグラウンドジョブではテーブルをスキャンするのが受け入れられるかもしれませんが、すばやい応答が必要な場合は実行しません。合理的なサイズのテーブルを使用すると、クエリがパーティションの境界に達するか、1kの結果が得られたときに継続トークンを処理する必要があります。

Azureストレージチームはgreat post which explains the scalability targetsです。 1つのテーブルパーティションのスループット目標は500エンティティ/秒です。ストレージアカウントの全体的な目標は5,000トランザクション/秒です。

0

答えはページネーションです。 top_size - 結果の最大数の結果またはレコード - next_partition_keyおよび継続トークンのnext_row_keyと組み合わせて使用​​します。これにより、パフォーマンスにも大きな差があります。 1つの場合、結果は単一のパーティションから統計的に得られる可能性が高くなります。プレーン結果は、セットが行継続キーではなくパーティション継続キーによってグループ化されていることを示しています。

つまり、UIまたはシステム出力についても考慮する必要があります。 10から20までの結果を最大50回返すことを迷惑しないでください。ユーザは、おそらくこれ以上利用したり、調べたりしません。

愚かな音。 Googleが「犬」を検索し、検索で10個の商品しか返されないことに気づく。もういや。 「続行」を押すのが気になる場合は、次のレコードが利用できます。研究は、その最初のページを超えてユーザーのベンチャーがほとんどないことを証明しました。

select(キー値のサブセットを返す)が異なる場合があります。たとえば、必要最小限のものをselect = "PartitionKey,RowKey"または'Name'としてください。

「私はこれらの境界を横断する効果も結果を取得するために ストレージに追加のラウンドトリップを必要とする継続トークン、中 結果。これは パフォーマンスを減らすことで、結果だけでなく、ことを、信じていますトランザクション数の増加(およびその後の )。

...多少間違っています。継続トークンは交差境界のためではなく、紺碧の表が1000を超える結果を許容しないために使用されます。したがって、2つの継続トークンが次のセットに使用されます。デフォルトのtop_sizeは本質的に1000です。

あなたの喜びのために、ここではazure python apiのクエリエンティティについて説明します。他のものはほとんど同じです。

''' 
    Get entities in a table; includes the $filter and $select options. 

    table_name: Table to query. 
    filter: 
    Optional. Filter as described at 
    http://msdn.microsoft.com/en-us/library/windowsazure/dd894031.aspx 
    select: Optional. Property names to select from the entities. 
    top: Optional. Maximum number of entities to return. 
    next_partition_key: 
    Optional. When top is used, the next partition key is stored in 
    result.x_ms_continuation['NextPartitionKey'] 
    next_row_key: 
    Optional. When top is used, the next partition key is stored in 
    result.x_ms_continuation['NextRowKey'] 
    ''' 
関連する問題