1

Windows azure テーブル ストレージを使用しています。私の問題は、テーブルから特定のユーザーのエンティティへのアクセスに時間がかかることです。テーブルにアクセスするために使用しているコードは次のとおりです。

   public CloudTableQuery<T> GetEntites(string username)  
   {
        try
        {
            CloudTableQuery<T> entries =
                (from e in ServiceContext.CreateQuery<T>(TableName)
                 where e.PartitionKey == username
                 select e).AsTableServiceQuery();

            return entries;
        }
        catch (Exception)
        { return null; }
    }

テーブル内のエンティティの総数は、現在わずか 100 程度です。例: クエリは、特定のユーザーに対して 25 のエンティティを返すのに 40 秒もかかるようです。パフォーマンスを向上させるためにコードに改善の余地があるかどうかを提案してください。

4

2 に答える 2

1

ここでの本当の問題は、エンティティではなくクエリを返すことであり、返されたエンティティ(クエリ)ごとにクエリを再度実行する可能性があります。次のようなものでエンティティを定義します。

public class UserEntity
{
    public string UserName { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
}

次に、次のようなものでテーブルストレージエンティティを定義します。

public class StoredUserEntity : TableServiceEntity
{
    public StoredUserEntity (string username)
    {
        this.PartitionKey = username;
        this.RowKey = Guid.NewGuid().ToString();
        this.Timestamp = DateTime.Now;
    }

    public string Email { get; set; }
    public string Name { get; set; }
}

次に、クエリは実際にUserEntitiesのリストを返す必要があります。

    public List<UserEntity> GetUserData(string username)
    {
        var q = _tableContext.CreateQuery<StoredUserEntity>(_tableName);
        return
            q.ToList().Select(x => new UserEntity {UserName = x.PartitionKey, Email = x.Email, Name = x.Name}).Where(x => x.UserName == username).ToList();
    }
于 2013-01-09T01:53:23.653 に答える
0

Fiddler を使用して、何が起こっているかを確認してください。処理が遅くなる可能性のある再試行が数回発生している可能性があります。API はそれを教えてくれませんが、Fiddler を使用すると、作成された要求、応答 (エラーを含む)、および作成された応答の数を正確に確認できます。

于 2013-01-09T01:33:04.320 に答える