2009-10-05 9 views
0

먼저 대답하기 전에 읽으십시오!클라이언트에서 RESTful 쿼리 최적화

나는 Entity Framework를 둘러싼 RESTful 서비스를 보유하고 있습니다. 기본적으로, 내가 한 것은 데이터베이스를 만들고, 테이블간에 관계를 추가하고,이 데이터베이스 주위에 엔터티 모델을 만들고, 마지막으로 전체를 RESTful * .svc 서비스로 노출하는 것입니다. 이 작업은 수행 할 수 없으며 변경할 수도 없습니다.

이제 클라이언트 응용 프로그램을 통해 데이터를 쿼리해야합니다. 내가 액세스 할 수있는 것은 서비스 자체뿐입니다. 원하는 경우에도 서버 측 코드를 추가 할 수 없습니다. 이제 서버가 잠겼습니다.

세 개의 다른 테이블에 연결된 "ProductVoorwaarden"(제품 조건) 테이블에서 데이터를 검색해야합니다. (Rubriek, Categorie 및 Datatype).이 데이터는 루트 노드가 "PRODUCTVOORWAARDEN"이고 XML의 모든 레코드가 "REC"라는 자체 XElement입니다. 이 REC에는 테이블의 모든 필드에 대한 속성과 관련 테이블에 대한 참조가 있습니다. 지금 당장 가지고있는 코드는 다음과 같습니다.

XElement PRODUCTVOORWAARDEN() 
{ 
    XElement Result = new XElement("PRODUCTVOORWAARDEN"); 
    var Brondata = COBA.Productvoorwaarden.OrderBy(O => O.Code); 
    foreach (var item in Brondata) 
    { 
     COBA.LoadProperty(item, "Rubriek"); 
     COBA.LoadProperty(item, "Categorie"); 
     COBA.LoadProperty(item, "Datatype"); 
     XElement REC = new XElement("REC", 
      Attribute("Rubriek", item.Rubriek.Code), 
      Attribute("Categorie", item.Categorie.Naam), 
      Attribute("Code", item.Code), 
      Attribute("Datatype", item.Datatype.Naam), 
      Attribute("Eenheid", item.Eenheid), 
      Attribute("Naam", item.Naam), 
      Attribute("Omschrijving", item.Omschrijving), 
      Attribute("UitgebreideTekstVeld", item.UitgebreideTekstVeld), 
      Attribute("Veld", item.Veld) 
     ); 
     Result.Add(REC); 
    } 
    return Result; 
} 

이 코드는 정상적으로 작동하지만 느립니다. 모든 ProductVoorwaarden 레코드를 읽은 다음 Rubriek.Code, Categorie.Naam 및 Datatype.Naam을 검색하기 위해 모든 레코드에 대해 서버를 다시 왕복해야합니다. (데이터베이스에서 이러한 관계는 자동 증분 ID 필드로 설정되지만 XML 코드는 Code 또는 Naam을 참조로 사용합니다.)

RESTful 서비스로 돌아 오는 모든 여행은 더 많은 시간을 소비합니다. 나는 피하려고 노력하고있어. 그렇다면 클라이언트 측에서이 모든 것을 좀 더 빠르게 할 수있는 방법이 있습니까?


서버가 아직 개발 중이며 다음 릴리스에는 몇 개월이 더 소요될 것입니다. 결과적으로 서버가 현재 제공하는 옵션을 처리해야합니다. 서버를 수정하지 않고 속도를 올릴 방법이 없다면 문제가 없습니다. 적어도 나는 노력했다. 며칠 내에 처리해야하는 테이블이 35 개 더있어 작동하면 작동합니다.

답변

1

각 COBA.LoadProperty 호출을 비동기로 만들고 순차적으로 실행하지 않고 병렬로 실행할 수 있습니다. 각 비동기 호출의 반환을 처리하고 모든 작업이 완료되고 XML을 빌드 할 준비가되었는지를 결정해야하므로 클라이언트 코드가 더 복잡해집니다. 4 회의 REST 호출이 모두 지연 시간을 절반으로 줄일 수있는 동일한 시간을 사용한다고 가정합니다.

아마 두 번 확인했는데 람다 식에서 열거자를 생성하는 것이 비용이 많이 드는 경우가 있습니다. 아직도 그것은 수백 밀리 초 안에 있었고 지연이 그보다 더 클 것 같은 인상을받습니다. 확인해 볼 가치가 있습니다.