2011-01-11 3 views
2

같은 스키마를 사용하여 여러 데이터베이스에 데이터를 삽입했습니다. 성능상의 이유로 여러 데이터베이스가 존재합니다.WCF 데이터 서비스를 사용하여 여러 데이터베이스를 쿼리 할 수 ​​있습니까?

클라이언트가 데이터베이스를 쿼리하는 데 사용할 수있는 WCF 서비스를 만들어야합니다. 그러나 클라이언트의 관점에서 볼 때 단 하나의 데이터베이스 만 있습니다. 이것은 클라이언트가 쿼리를 수행 할 때 모든 데이터베이스를 쿼리하고 결합 된 결과를 반환해야 함을 의미합니다.

또한 클라이언트가 자체 쿼리를 정의 할 수있는 유연성을 제공해야합니다. 따라서 WCF Data Services는 클라이언트가 지정한 쿼리에 매우 유용한 기능을 제공합니다.

지금까지 DataService는 단일 데이터베이스에 대해서만 쿼리를 생성 할 수 있다고합니다. 여러 데이터베이스에 쿼리를 보낼 수있는 재정의 없음을 발견했습니다.

동일한 스키마가있는 여러 데이터베이스에 대해 WCF 데이터 서비스가 쿼리 할 수 ​​있는지 알고있는 사람이 있습니까?

답변

1

I posted the question on the MSDN forums을하고 많이 필요합니다 것을 발견 노력의.

이것은 까다로 우며 많은 작업이 될 수 있습니다. creating your own data service provider이 포함됩니다. 그 중 병합 + 페이징 결과가 너무 복잡하고 내가 수행하고자하는 일에 위험한 작업이 될 것입니다. 예를 들어 이름 열로 정렬 된 1000 페이지의 여러 데이터베이스를 쿼리하려면 어떻게합니까? 기본적으로 모든 데이터베이스의 모든 데이터를 쿼리하고 이름순으로 정렬 한 다음 1000 번째 페이지를 선택해야합니다.

+0

4 년 후에도 여전히 그렇습니까? – TWilly

1

필자는 질의를 순차적으로 또는 병렬로 기본으로 보내는 파사드 서비스를 작성해야한다고 생각합니다. 일반적으로 WCF 데이터 서비스가 리플렉션 공급자를 사용하고 기본 데이터베이스에 대해 LINQ to SQL 또는 Entity Framework를 사용할 수있는 방식으로 Facade를 만듭니다.

방법 : 반사 공급자 (WCF 데이터 서비스)를 사용하여 데이터 서비스 만들기 : http://msdn.microsoft.com/en-us/library/dd728281.aspx

HTH,

--larsw

+0

그러나 훌륭한 아이디어 인 것처럼 들리지만 쿼리를 가로 챌 수있는 곳이 없습니다. 여러 데이터베이스에서 실행하십시오. 이것이 정확히 어떻게 수행 될 수 있는지에 대해 구체적으로 설명 할 수 있습니까? – Mas

+0

내가 생각할 수있는 유일한 방법은 내 ObjectContext의 facade를 만들고 여러 데이터베이스를 쿼리 할 수있는 내 자신의 IQueryable 구현을 롤업하는 것입니다. 그러나 이것은 매우 복잡해 보입니다. DataService가 쿼리를 수행 할 때 내 자신의 기능을 삽입 할 수 있으면 좋을 것입니다. – Mas

+0

이 작업을 수행하는 방법을 조사한 후 IDataServiceProvider를 자체적으로 구현해야한다는 결론을 얻었습니다. IDataServiceProvider는 필수적으로 내부 ObjectContextServiceProvider를 다시 구현해야합니다. 이것은 너무 많은 노력이므로 다른 솔루션을 찾아야 할 것입니다. – Mas

0

다른 접근 방식을 사용해야하는 것처럼 보입니다. Oracle Coherence 또는 NCache와 같은 분산 형 캐시에 대해 말하고 있습니다. 구조는 실제로 투명합니다. 하나 이상의 데이터베이스 인 "백업 맵"과 동기화 된 메모리 내 데이터베이스와 상호 작용합니다.

이러한 캐시에는 많은 흥미로운 기능이 있습니다. 예를 들어 저장소 전략을 변경하거나 다른 데이터베이스 (MS SQL, Oracle 등)를 사용하여 백업 맵을 만들 수 있습니다.

관련 문제