2012-10-01 3 views
3

지금까지의 이야기 : 먼저 우리는 하나의 웹 애플리케이션과 하나의 데이터베이스를 가지고 있습니다. 그런 다음 제품 소유자는 첫 번째 애플리케이션을 스핀 오프하기로 결정했습니다. 첫 번째 애플리케이션은 옷을위한 사이트 였고 두 번째 사이트는 아기 옷 전용 사이트였습니다. 두 번째 앱에 대해 두 번째 데이터베이스를 만들었습니다. 그리고 세 번째, 네 번째, 네 번째. 데이터베이스의 정보가 교차하지 않았기 때문에 그 결정을 정당화 할 수 있습니다.MongoDB, 두 개 이상의 데이터베이스를 결합하는 방법

지금 : 제품 소유자는 수퍼 응용 프로그램을 만들기로 결정했습니다. 일반적인 이야기 : 사용자가 일부 제품에 대한 쿼리를 작성하고 그 결과에 여러 데이터베이스의 집계 된 데이터가 포함되어야합니다 (전부는 아니지만 k에서 n).

질문 : 우리 앞에 발생하게 될 공통적 인 문제를 해결할 수있는 공통 패턴이 있습니까?

첫 번째 방법 : (하나의 거대한 데이터베이스에 복사 된 모든 데이터베이스 데이터) 슈퍼 데이터베이스

  • 프로 : 하나의 쿼리가 필요하다; 정렬이나 다른 필터링을 적용하는 것이 더 쉽습니다.
  • cons : 항목의 원점 데이터베이스가 어떻게 다를 것입니까? ID의 충돌 일 수 있습니다. 정보의 시간 소모적이고 위험한 복사를 수행해야합니다. 같은 데이터베이스 (변화 없음)

    • 프로 :

    두 번째로 오래된 애플리케이션 접근 방식와 역 호환되지 않습니다 응용 프로그램이 호환 될 것입니다; 더 위험한 대처

  • 단점가 없을 것입니다 : 하나 개의 쿼리가 여러 개의 쿼리가됩니다 (느리게, 더 열심히는 집계하기) MongoDB를이 (물론)가 조인없이이 있기 때문에 모든 여러 데이터베이스에서이 괜찮
+0

이미 두 옵션을 모두 표시했습니다. 이제 하나 골라야합니다. –

답변

2

주택을 여기서 집계 문제가있는 실제 위협은 없습니다. 10gen이 집계 함수 내에서 subselect에 대한 능력을 해제하여 일종의 의사 결합을 허용한다면 나중에 문제가 발생할 수 있다고 생각합니다.

동일한 컬렉션으로 출력하는 MR을 여러 개 수행했지만 MR을 다른 DB로 지금 출력 할 수있는 경우 (지금 당분간 사용 가능) MR의 문제가있을 수 있습니다.

또한 다중 데이터베이스 (2.2)의 경우 2.2의 잠금 메커니즘이 DB 수준이므로 자물쇠가 옆에 있습니다.

ID를 복사하고 충돌하는 문제를 고려하여 나는 가지고있는 것을 고집하고 하나의 데이터베이스에서 오는 것처럼 보이는 추상화 레이어를 만들 것입니다.

물론 다른 데이터베이스에 저장하는 것이 실제 논리 문제 일 것 같으면 데이터를 쉽게 섞어서 선택의 여지가 없을 수도 있습니다.

관련 문제