2009-10-13 3 views
1

이 약간 미친하지만 잠시 동안 NHibernate에 함께 장난되어 필자와 NHibernate에 함께 해결할 수없는 경우가 있습니다 시나리오 건너 온 것 같으면 ... 죄송합니다NHibernate에 - 1 개 클래스의 다중 데이터베이스 매핑

나는 정적 데이터의 부하를 포함하는 1 데이터베이스가 거대한 제품 조회 데이터베이스를 상상처럼 그냥 예제 시나리오입니다, 내 실제 하나는 이것에 조금 더 복잡하지만 비슷한 원칙입니다 ... 그것은 호스팅됩니다 완전히 다른 상자에 그래서 난 can not "database2.table1.somecolumn"2 개의 DB가 동일한 상자와 서버에있는 경우 문제를 가능한 방법으로 나타났습니다.

어쨌든 나는 또한 사용자와 관련된 데이터가 포함 된 다른 DB를 가지고 있기 때문에 사용자가 일반 웹 사이트 A에서 많은 물건을 구입했다고 상상해보십시오. 구입 한 제품과 관련된 ID 목록과 얼마나 많은 금액이 있는지 상상해보십시오. 그들은 다른 정보와 함께 구매했지만 제품과 관련된 실제 데이터는 다른 데이터베이스에 저장됩니다 ...

따라서이 데이터를이 데이터를 이전 구매 제품 모델과 결합하여 첫 번째 데이터베이스와 두 번째 데이터베이스의 추가 데이터가 있으면 다음과 비슷한 쿼리를 수행해야합니다. (모두 한 상자에있는 경우)

SELECT db1.products. , db2.purchases. FROM db2.purchases INNER JOIN db1.products ON db2.purchases.product_id = db1.products.id WHERE db2.purchases.user_id = XXX;

이제는 DB 호스트가 개별적이더라도 이러한 종류의 매핑을 수행하는 것이 가능합니다. 그렇다면 추측 할 수 없으며 하위 클래스를 통해 이러한 유연성을 얻을 수 있습니다. 따라서 순수하게 db1에서 작동하는 제품 클래스와 DB2에서만 작동하는 구매 정보를 사용하는 파생 클래스가 있습니다.

또한 INSERT/UPDATE/DELETE 문에서 데이터의 db1 부분을 제한하는 것이 가능합니다. 기본 매핑에서 할 수 있을지는 모르겠지만 클래스 별 범위를 벗어날 수 있으므로 어떤 유연성이 있는지 모르겠습니다. ... 내 와플을 읽기위한

감사합니다 : D

+0

죄송합니다, 나는이 별도의 DB 연결을 확인하고이 별도의 SQL 문 ... 현재 내가 다음 DB1과 DB2에 훅을 MSEnterprise 도서관 DB 커넥터를 사용하고 실행하는 것이 었습니다 둘레에 이미있는 유일한 방법을 암시했다고 생각 나는 먼저 다음 행을 따라 뭔가를 실행합니다. SELECT * FROM purchases WHERE user_id =?; 그런 다음 제품의 ID 목록을 작성하는 동안 부분적으로 해당 데이터를 반환하는 개체를 채 웁니다. SELECT * FROM 제품 어디에서 IN (?); 그런 다음 관련 객체에 데이터를 적용하여 반복적으로 루프를 실행합니다. 실제로는 훌륭하지만 너무 자주 실행되지는 않습니다. –

+0

DB 공급자가 추상화되어 있으므로 MSSQL 또는 MySQL을 추정하기에 안전 할 수 있습니다. 현재는 모두 스토어드 프로 시저를 사용하고 있지만 스토어드 프로 시저를 사용하지 않으려 고합니다. DB가 여러 호스트를 따라 분할되는 이유는 그 중 하나가 다른 것보다 많이 적중되고 구매 DB의 인스턴스가 여러 개있을 수 있기 때문입니다. 반면 제품 DB 인스턴스는 하나만 존재합니다. 각 인스턴스를 실행하는 서버 응용 프로그램에서 여러 인스턴스가 있으므로 자체 구매 DB가 있지만 초기 로그인시에만 모두 동일한 제품 DB를 공유합니다. –

답변

1

내가 먼저 NHibernate에없이이 문제를 해결하는 방법을 이해하는 것이 좋습니다. 일단 당신이 NHibernate없이 작동하는 하나 이상의 깨끗한 솔루션을 가지고 와서 "어떻게 NHibernate 에서이 SQL을 표현합니까?"와 같은 말을 귀하의 질문을 업데이 트하십시오.

데이터베이스 전체를 쿼리하면 데이터베이스 공급 업체의 특정 단점을 신속하게 가져올 수 있으며 다루는 데이터베이스 공급 업체는 언급하지 않습니다. 두 데이터베이스가 모두 동일한 공급 업체 인 경우 데이터베이스 공급 업체 고유의 기술을 사용하여 데이터베이스를 어떻게 든 연결할 수 있습니다 (그러나 링크가 반드시 좋은 해결책은 아니므로 대안을 찾으려고 할 것입니다).