2010-08-02 2 views
2

둘 이상의 데이터베이스에서 데이터를 가져 오는 도메인 엔터티가 많은 응용 프로그램을 유지 관리합니다. 이 방법이 일반적으로 작동하는 방식은 엔티티가 데이터베이스 A (대부분의 필드가 저장되어 있음)에서로드된다는 것입니다. 데이터베이스 B의 데이터에 해당하는 속성이 호출되면 엔터티는 SQL을 데이터베이스 B로 시작하여 모든 관련 데이터를 가져옵니다.여러 데이터베이스의 데이터가 포함 된 도메인 엔터티에 권장되는 패턴

나는 '롤 - 더 - 자신'의 ORM을 사용하고 있는데,보기 흉하지만 효과적이며 이해하기 쉽습니다. 최근에 데이터베이스 A에서 그린 엔티티에 대해 NHibernate를 사용하기 시작했으나, 데이터베이스 A와 B 모두에서 추출한 엔티티에 NHibernate를 어떻게 사용하는지 궁금합니다.

내가 생각할 수있는 최선의 방법은 다음과 같습니다. 다음과 같습니다. 나는 데이터베이스 A의 엔티티에 대해 Hibernate 기반의 클래스 라이브러리를 계속 사용한다. 데이터베이스 B의 데이터도 필요로하는 엔티티는 속성을 통해 액세스되는 단일 클래스에서 데이터베이스 B의 모든 데이터를 노출한다. 이 속성이 호출되면 적절한 저장소를 호출하고 개체가 반환됩니다. 따라서 데이터베이스 B에 액세스하기위한 클래스 라이브러리는 데이터베이스 A에 액세스하기 위해 클래스 라이브러리에서 참조해야합니다.

이 내용은 의미가 있으며이 상황에 대한 패턴이 상당히 일반적 일 수 있습니다.

감사

데이비드

+0

나는 데이터베이스 스키마를 변경하고 하나의 데이터베이스를 만들 것이다. – Paco

+0

내가 가진 사치가 아닙니다. 데이터베이스 중 하나는 외부에서 생성 된 매우 많이 사용되는 데스크톱 응용 프로그램 아래에 있습니다. – David

답변

0

내가이 상황에 매핑하는 방법을 잘 알고있는, 또는 어떻게이 시점에서의 NHibernate에 포팅 성숙,하지만 당신은 Shards로 볼 수도 없습니다.

효과가없는 경우 고려해야 할 흥미로운 패턴을 제공 할 수도 있습니다. (주석 기준)

편집 :

이 참 파편 데이터의 수평 분할에 관한 한, 상황에 매핑하지 않는 것 같습니다.

세로로 분할해야하는 경우에는 여러 개의 지속성 단위를 정의해야 할 수 있습니다. 두 데이터베이스를 포함하는 쿼리와 트랜잭션은 아마도 흥미로워 질 것입니다. 나는 이것으로 많은 것을 정말로 도울 수는 없다. 이 question은 분명히 관련되어 있습니다.

+0

팁 주셔서 감사합니다, 나는 그것을 확실히 고려할 것입니다. – David

+0

샤딩은 논리적으로 동등한 행을 다른 테이블에 저장하는 것과 같습니다. 예 : 성이 A-M을 시작하는 사람들은 하나의 테이블에 들어가고 다른 사람들은 두 번째 테이블에 들어갑니다. 필자는 완전히 다른 스키마를 사용하여 데이터베이스에서 정보를 그리지 만 사용자에게 단일 한 것으로 제시합니다. 내가 오해 해본 것이 아니라면, 샤드가이 문제를 도울 수 있다고 생각하지 않습니다. – David

관련 문제