2

いくつかの外部Webサービスから情報を取得し、それをいくつかの異なるエンティティタイプに解析し、これらのエンティティをAzureテーブルストレージに格納するようにAzureワーカーロールを設定しています。重要なのは、これらのエンティティのすべてではないにしても、ほとんどがそれぞれテーブル内の独自のパーティションに挿入されることです。

AddObject(EntityToBeInserted)を呼び出すTableServiceContext拡張クラスを使用して、作成時に新しいエンティティをtableservicecontextにアタッチしています。現在、TableServiceContext.SaveChangesWithRetries(SaveChangesOptions.None)を呼び出して、これらのエンティティをそれぞれのパーティションのテーブルに保存しています。これはすべて正常に機能します。

私の質問は、それがうまく機能しない場合はどうなるのかということです。行キーとパーティションキーを一意でないものにすることで、1つ以上のエンティティを保存しないようにすることができますが、その動作の周りでキャッチしたエラーメッセージは、どのエンティティが失敗したかを示しておらず、エラーが発生しただけです。それらの中の一つ。

各エンティティが独自のパーティションに移動するワーカーロールからテーブルストレージにエンティティを保存するにはどうすればよいですか(これらの保存呼び出しの1つに2〜30のエンティティが挿入されていると仮定します)。これにより、これらの挿入の1つ以上が失敗した場合に少なくともそれがどれであったかを知ることができますか?これらの操作は非常に時間に敏感であるため、残念ながら、関連するストレージノードが再び使用可能になるのを待つために長時間実行される再試行オプションに依存することはできません。

ありがとう、アレックス

4

1 に答える 1

0

答えは、テーブルストレージパーティション間で一括挿入を実行できないため、挿入するエンティティのID(partitionkeyとrowkey)を追跡し、非同期テーブルストレージ挿入呼び出しのコールバックでそれらが成功することを確認する必要があるということです。

于 2011-09-15T20:12:25.910 に答える