이 약간 미친하지만 잠시 동안 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
죄송합니다, 나는이 별도의 DB 연결을 확인하고이 별도의 SQL 문 ... 현재 내가 다음 DB1과 DB2에 훅을 MSEnterprise 도서관 DB 커넥터를 사용하고 실행하는 것이 었습니다 둘레에 이미있는 유일한 방법을 암시했다고 생각 나는 먼저 다음 행을 따라 뭔가를 실행합니다. SELECT * FROM purchases WHERE user_id =?; 그런 다음 제품의 ID 목록을 작성하는 동안 부분적으로 해당 데이터를 반환하는 개체를 채 웁니다. SELECT * FROM 제품 어디에서 IN (?); 그런 다음 관련 객체에 데이터를 적용하여 반복적으로 루프를 실행합니다. 실제로는 훌륭하지만 너무 자주 실행되지는 않습니다. –
DB 공급자가 추상화되어 있으므로 MSSQL 또는 MySQL을 추정하기에 안전 할 수 있습니다. 현재는 모두 스토어드 프로 시저를 사용하고 있지만 스토어드 프로 시저를 사용하지 않으려 고합니다. DB가 여러 호스트를 따라 분할되는 이유는 그 중 하나가 다른 것보다 많이 적중되고 구매 DB의 인스턴스가 여러 개있을 수 있기 때문입니다. 반면 제품 DB 인스턴스는 하나만 존재합니다. 각 인스턴스를 실행하는 서버 응용 프로그램에서 여러 인스턴스가 있으므로 자체 구매 DB가 있지만 초기 로그인시에만 모두 동일한 제품 DB를 공유합니다. –