수백만 행의 데이터 행이있는 EF (구식 edmx, 코드 우선 제외) 위에 WCF 데이터 서비스가 있습니다. 결과를 500 행으로 제한하고 있습니다. 여태까지는 그런대로 잘됐다!WCF에서 DISTINCT 기능을 제공하는 방법
소비자에게 데이터를 "드릴"할 수있는 기능을 제공하고 싶습니다. 이상적으로 소비자 코드는 select distinct Province from
내 서비스를 실행하고 사용자는 주를 선택하고 코드는 select distinct Zip where Province == p
(내 비즈니스 도메인은 매우 다르지만 잘하면 사진을 얻습니다!)을 실행합니다.
당연히 모든 것을 얻을 수없고 클라이언트 측에서 고유하게 실행할 수는 없습니다. 이 서비스를 어떻게 제공합니까? EntitySet "Provinces"또는 "Zips"가 서비스에 노출되어 있지 않습니다. MyEntities 클래스를 확장하고 그 세트를 시뮬레이트하려고합니까? 아니면 Entity Framework에서 자동으로 노출되는 컬렉션 외에도 다른 컬렉션을 노출하는 더 간단한 방법이 있습니까? 나는이 질문이 의미가 희망
...
업데이트 : 난 내가 WCF 서비스를 사용하는 것을 언급 할 때 나는 혼란을 야기 생각합니다. 실제로 WCF를 사용하고 있습니다 데이터 서비스가 Entity Framework 4.1에서 OData 래퍼를 제공하려고합니다. 다행히도, 이것은 질문을 명확히합니다.
왜 DISCTINCT를 여기에서 불러야합니까? 진절머리 나는 databbase 디자인? 우리가 문제를 더 잘 이해할 수있게 해주지 만, Procinve와 같은 성질을 띠게됩니다. Zip은 별개로 많은 시간을 실행할 때 서버 성능을 현명하게 저하시킵니다. – TomTom
백 엔드에서는 관계형 데이터베이스가 아니라 통계 샘플링입니다. 따라서 서버 측에서 select distinct는 매우 빠릅니다 (SAS 내부를 올바르게 이해하면 "Province"에서 파티션되고 파티션에서 "Zip"으로 인덱싱 됨). 따라서 성능이 만족 스럽길 기대합니다. 그럼에도 불구하고 - 사용자는 주/우편 번호를 사용할 수 있는지 확인하고 우편 번호 내에서 결과를 얻어야합니다. 따라서 첫 번째 질문은 성능이 아니라 기능입니다. – Felix
퍼포먼스가 악취가 나기 시작하면 항상 캐시 할 수 있습니다.) – TomTom