2013-01-08 3 views
1

Windows Azure 테이블 스토리지를 사용 중입니다. 내 문제는 테이블에서 주어진 사용자에 대한 엔터티의 액세스 시간이 오래 걸리는 것입니다. 테이블에 액세스하는 데 사용하는 코드는 다음과 같습니다.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 초 정도 걸리는 것으로 보입니다. 성능 향상을위한 코드 개선 범위가 있다면 제안 해주십시오.

+0

위치 :

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 class UserEntity { public string UserName { get; set; } public string Name { get; set; } public string Email { get; set; } } 

다음과 같이 사용하여 테이블 저장 엔티티를 정의 전제에서 코드를 실행하고 있습니까? 인터넷 연결은 어때? 관계없이 모든 테이블 자체가 너무 작아 쿼리의 성능에 관계없이 성능에 문제가 없어야합니다. 이것은 저장소 나 연결에 문제가있는 것 같습니다. – Igorek

+0

Dev Storage를 사용하여 프로젝트를 로컬로 실행할 때 동일한 대기 시간이 발생합니까? –

답변

1

여기 실제 문제는 엔티티 대신 쿼리를 반환하고 반환 된 각 엔터티 (쿼리)에 대해 쿼리를 다시 실행하는 것입니다. 같은 것을 사용하여 엔티티를 정의 : 당신이

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(); 
    } 
0

무슨 일이 일어나는지 보려면 Fiddler를 사용해보십시오. 상황을 늦출 수있는 몇 가지 재 시도가 발생했을 수 있습니다. API는 그 사실을 알려주지 않지만, Fiddler를 통해 정확히 만들어진 요청, 모든 응답 (오류 포함) 및 그 중 몇 개가 만들어 졌는지 확인할 수 있습니다.

관련 문제