0

Windows Azure アプリでの Azure テーブルストレージ API 呼び出しの動作が遅くなります。特定の呼び出しの要求 ID (応答ヘッダーの x-ms-request-id) を取得する必要があります。storageclient API を使用して取得する方法はありますか? ストレージ クライアント API はこの ID を公開していますか? そうでない場合、この ID を取得する他の方法はありますか?

私は次の方法でAPIを使用しています:

        public UserDataModel GetUserData(String UserId)
    {
        UserDataModel osudm = null;
        try
        {
            var result = (from c in GetServiceContext().OrgUserIdTable
                          where (c.RowKey == UserId)
                          select c).FirstOrDefault();

            UserDataSource osuds = new UserDataSource(this.account);
            osudm = osuds.GetUserData(result.PartitionKey, result.UserName);
        }
        catch (Exception e)
        {
        }
        return osudm;
    }
4

1 に答える 1

4

ここで質問しているのは、Windows Azure よりも WCF Data Services に関連しています (ストレージ クライアント クライアント API がこれを使用しています)。応答ヘッダーにアクセスする方法のコード例を次に示します。

    var tableContext = new MyTableServiceContext(...);
    DataServiceQuery<Order> query = tableContext.Orders.Where(o => o.RowKey == "1382898382") as DataServiceQuery<Order>;
    IEnumerable<Order> result = query.Execute();
    QueryOperationResponse response = result as QueryOperationResponse;

    string requestId;
    response.Headers.TryGetValue("x-ms-request-id", out requestId);

したがって、最初に行うことは、単純にクエリを作成し、それをTType の DataServiceQuery にキャストすることです。次に、そのクエリでExecuteメソッドを呼び出して、それをQueryOperationResponseにキャストできます。このクラスを使用すると、 x-ms-request-idを含むすべてのヘッダーにアクセスできます。

この場合、FirstOrDefaultを使用できないことに注意してください。これはIQueryableを返さず、TTypeの DataServiceQuery にキャストできないためです(WCF Data Services を使用してそれを行う別の方法がない限り)。

注:呼び出しが非常に遅い理由は、クエリが原因である可能性があります。OrgUserIdTableテーブルをクエリする場合、 RowKeyに基づいてのみフィルター処理を行います。そのテーブルにあるデータまたはパーティションの量はわかりませんが、PartitionKey を使用しないと、パフォーマンスに大きな影響を与える可能性があります。PartitionKey を含めないことで、呼び出しが非常に遅くなる可能性があるすべてのパーティション (おそらく複数のサーバー) で検索が強制されることを知っておく必要があります。

パーティション分割が Windows Azure ストレージのパフォーマンスにどのように、またなぜ関連するのかについてより良い洞察を得るために、次の現実世界のガイダンスを参照することをお勧めします: Windows Azure テーブル ストレージのスケーラブルなパーティション分割戦略の設計

于 2012-07-29T07:25:42.337 に答える