2011-12-02 6 views
5

첫 번째 CouchDB 프로젝트를 시작하고 ORM 백그라운드에서 시작하는 것에 대해 생각하고 있습니다. 유지하기 어려울 수있는 문서를 만드는 방법에 대해 우려하고 있습니다. 예를 들어noSQL 및 정규화 된 데이터

, I는 다음의 모델이있는 경우 :

을 * ---> (1) B

마다 한 개체 수단

A B 오브젝트가되고, 많은 인스턴스가 B 객체를 공유 할 수 있습니다. 이 경우 A에서 B까지의 포인터/외래 키가 있습니다.

모든 A 데이터와 B 데이터가 포함 된 문서를 만들 수 있습니다. 그러나 내가 가지고있는 문제는 이후 단계 (문서가 10000 개 작성된 후)에 일부 데이터를 변경해야하는 경우 모든 문서를 업데이트해야한다는 것입니다.

ORM/정규화 된 데이터베이스 세계에서 나는 간단히 업데이트 B를 사용하고 모든 참조는 데이터베이스에 달려 있습니다.

CouchDB에서 이것을 어떻게 처리합니까? 아니면 이러한 유형의 상황에 적합하지 않은 NoSQL 방식입니까?

JD

답변

5

이 질문에 대한 일반적인 대답 :이 질문에 대한 일반적인 대답이 없습니다.

요점은 NoSQL에서 데이터 구조가 데이터에 의해 지시되는 것이 아니라 데이터 구조가 지원해야하는 쿼리 때문입니다. 따라서 1 : N 또는 M : N 연관 문제의 각 인스턴스마다 동일한 패턴을 사용하는 대신 NoSQL 방식은 특정 요구에 따라 다른 패턴을 사용하는 것입니다. 이들은 예를 들어, 수 :

  • 쓰기/읽기 비율 쿼리를 쉽게 또는 어렵게
  • 유형을 내장 만든다
  • 특정 데이터베이스 기능 당신이 어떻게 데이터를
  • 성능 고려 사항을 지원해야 할 수 분할, 캐시 된 다른 방법으로도 처리 할 수 ​​있습니다.

일반적으로 내 초보자는 초보자가 '과도하게 포함'하는 경향이 있지만 MongoDB 만 말할 수 있습니다. 퍼가기는 강력한 기능이지만 임베디드 객체는 '일급 시민'이 아니므로 모든 1 : n 관계의 대체품으로 사용해서는 안됩니다. 일부 전용 :

+0

여기에 +1 우수한 정보. – Petrogad

+3

동의하십시오. 두 가지 주요 지표가 있습니다. a) 포함 된 개체를 몇 번이나 변경합니까? b) 부모가 표시 될 때마다 포함 된 개체를 표시해야합니까? 그렇다면 어떤 장치에서 작업하고 있습니까 (예 : 쿼리 가능 여부). 100000 문서마다 한 번만 변경하면 개체를 사용자에게 표시 할 때마다 묻는 것을 저장하고 한 번 변경하면됩니다. – rit

+0

정보를 보내 주셔서 감사합니다. 포함 된 객체는 예외적 인 상황에서만 변경됩니다. 그래서 내가 문서를 삽입해야한다고 말하고 있습니까? 즉, 문서에 A와 B가 들어 있습니다. 쿼리는 모든 요청에 ​​사용될 것이므로 중요합니다. 좀 더 명확히 해주세요. –