2011-10-23 15 views
0

私はAzureテーブルストレージを使用しています。 私のテーブルに1万レコードのパーティションがあり、1000番から1999番までのレコードを取得したいとします。次にレコード番号4000から4999などを取得したいとします。 これを実行する最速の方法?次の1000レコードを取得する方法は最速の方法

これまでのところ2つのオプションがあります。私はそれほど好きではありません: 1.すべての10,000レコードを返すクエリを実行し、10,000レコードをすべて取得するときに必要なものを除外します。 2.クエリを実行すると、一度に1000レコードが返され、継続トークンを使用して次の1000レコードが取得されます。

対応するすべてのレコードをダウンロードせずに継続トークンを取得することはできますか? Continuationトークン2を取得し、CT2で2000〜2999のレコードを取得すると、Continuation Token 1を取得できることは素晴らしいことです。

答えて

0

理論上、最初の1000個のRecorの実際のデータをダウンロードすることなく継続トークンを使用できるはずです最初のリクエスト後に接続を閉じることによってそして私はそれをTCPレベルで閉じることを意味します。そして、あなたはすべてのデータを読む前に。その後、新しい接続を開き、そこに継続トークンを使用します。 HTTP実装ではキープアライブを使用する可能性が高いため、2つのWebRequestはそれを行いません。コードでコードを読み取らなくても、すべてのデータがバックグラウンドで読み取られることを意味します。実際には、キープアライブを使用しないようにHTTPリクエストを設定することができます。

しかし、あなたがRowKeyを知っていてそれを検索することができるのは当然ですが、どの1000個のエンティティバッチにどの行キーがあるかわからないと思います。

最後に、なぜこの問題が最初に発生しているのかと質問します。 あなたのアクセスパターンはです。インサートが共通していて、これらのレコードを取得するのはまれですが、それをより効率的にするのは苦労しません。これがページングの問題のようなものなら、私はおそらく最初のリクエストのすべてのデータを取得し、それを(クラウド内に)キャッシュします。挿入が稀ですがこのクエリを頻繁に実行する必要がある場合は、エンティティが挿入されるたびに、データの挿入に1,000個のエンティティごとに1つのパーティションがあり、必要に応じてソートが行われるため、

関連する問題