2016-12-19 8 views
0

Azureテーブルストレージのパフォーマンスに一貫した問題があります。私はユーザーアカウントを保持するテーブルを照会しています。テーブルにはPartitionKeyRowKeyの両方にuserIdが格納されているため、簡単にポイントクエリを作成できます。ポイントクエリを結合するときのAzureテーブルストレージでの信頼性の低いパフォーマンス

私の問題は、単一のクエリで複数のユーザーを取得する必要があることがあるためです。これを達成するために、私にはフィルタ文字列を作成するクラスがあります。この問題に関連しない動作方法は、しかしながら、これは出力の例である:

(PartitionKey eq '00540de6-dd2b-469f-8730-e7800e06ccc0' and RowKey eq '00540de6-dd2b-469f-8730-e7800e06ccc0') or 
(PartitionKey eq '02aa11b7-974a-4ee9-9a8e-5fc09970bb99' and RowKey eq '02aa11b7-974a-4ee9-9a8e-5fc09970bb99') or 
(PartitionKey eq '040aec50-ebcd-4e5d-8f58-82aea616bd82' and RowKey eq '040aec50-ebcd-4e5d-8f58-82aea616bd82') or 
// up to 22 more (25 total) 

それは2-5秒の間、実行に時間がかかり、クエリの最初の実行時に、そしてありますエラーが発生しているデータが欠落しています。 2回目の実行時には、クエリの完了に0.2〜0.5秒かかり、その中にすべてのデータが含まれます。

私はまたちょうどPartitionKeyを供給してみましたが、違いはありませんでした。私は、ポイントクエリがより良い実行すると仮定していた。

バグのこのプレゼンテーションからは、最初にリクエストされたときにデータが「寒い」ことが原因であると推測できます。その後、連続したリクエストで「ホット」キャッシュから取得されます。

この場合、パフォーマンスを向上させるためにフィルタ文字列を変更するにはどうすればよいですか?あるいは、テーブルストレージクエリのタイムアウトを変更して、完了までの時間を増やすにはどうすればよいですか?私のテーブルストレージのスケーリングを増やすことは可能ですか?

答えて

2

Azure Storage Tableは複数のポイントクエリとして扱うことができないため、 'または'で連結されたポイントクエリ文字列は使用しないでください。代わりに、Azure Tableはそれを完全なテーブルスキャンとして扱いますが、これはパフォーマンスにおいてひどいものです。パフォーマンスを向上させるには、それぞれ25ポイントのクエリを実行する必要があります。

+0

この問題を解決していただきありがとうございます。 –

+0

この動作はどこに文書化されていますか? – Endrju

+0

このドキュメントを参照できます:http://azure.microsoft.com/en-us/documentation/articles/storage-table-design-guide/ –