링크

2014-01-13 10 views

답변

4

문서 지향 데이터베이스의 목표는 런타임시 메모리에있는 실제 개체의 일종의 데이터베이스 스키마와 일치하도록 데이터가 분할되는 정도 인 "임피던스 불일치"를 줄이는 것입니다. 문서를 사용하면 여러 개체를 여러 테이블로 분할하지 않고 전체 개체를 디스크에 직렬화하고 검색 할 때 다시 결합 할 수 있습니다.

링크 된 문서는 참조 된 문서와 동일합니다. 그것들은 단순히 같은 것을 말하는 두 가지 방법 일뿐입니다. 쿼리시 이러한 링크가 어떻게 처리되는지는 데이터베이스 구현마다 다릅니다.

말하자면, 임베디드 문서는 단순히 부모 내부의 부모 유형과 관련된 객체 유형을 저장하는 행위입니다.

Achievement는 임의의 클래스입니다
class User 
{ 
    string Name 
    List<Achievement> Achievements 
} 

(그 내용이 예를 들어 문제가되지 않습니다) : 예를 들어, 다음과 같이 I 클래스가 있습니다. 나는이 사용하여 링크 된 문서를 저장한다면

, 나는 성과 모음의 Achievement 객체에 대한 링크가있는 사용자에 대한 성과의 목록이있는 성과 모음의 사용자 컬렉션에서 UserAchievement을 저장합니다. 데이터베이스 엔진 자체에서 일종의 결합 절차가 필요합니다. 그러나 포함 된 문서를 사용하는 경우 User 문서 내에 Achievements가있는 사용자 컬렉션에 User을 저장하면됩니다. 포함 된 문서에 대한 데이터의

JSON 표현은 다음과 같이 (약) 보일 것이다

{ 
    "name":"John Q Taxpayer", 
    "achievements": 
     [ 
      { 
       "name":"High Score", 
       "point":10000 
      }, 
      { 
       "name":"Low Score", 
       "point":-10000 
      } 
     ] 
} 

을 링크 된 문서가 같은 것을 보일 수있는 반면 : { "이름": "존 Q 납세자를 " "성과 " [ "somelink1 ","somelink2 " ] }

성과 컬렉션 {내부

"somelink1" { "이름": "높은 점수", "포인트": 10000 } "somelink2" { "이름": "높은 점수", "포인트": 10000 } }

다음은 대략적인 표현입니다.

요약하면 링크 된 문서는 RDBMS PK/FK 관계와 매우 유사합니다. 이를 통해 하나의 콜렉션에있는 여러 문서가 다른 콜렉션의 단일 문서를 참조 할 수 있으므로 저장된 데이터의 중복 제거에 도움이됩니다.그러나 데이터베이스 엔진이 여러 개의 디스크 I/O 호출을 수행하여 최종 문서를 구성하여 사용자 코드에 반환해야하는 복잡성이 추가됩니다. 임베디드 문서가 메모리의 객체와 더 가깝게 일치하므로 임피던스 불일치가 줄어들고 (이론적으로) 디스크 I/O 호출 수가 줄어 듭니다.

현재 임피던스 불일치에 읽을 수 있습니다 http://en.wikipedia.org/wiki/Object-relational_impedance_mismatch

UPDATE

나는 추가해야합니다, 당신의 요구에 구현 할 수있는 권리 데이터베이스를 선택하는 것이 처음부터 매우 중요하다. 각 데이터베이스에 대해 많은 질문이있는 경우 각 공급 업체에 문의하여 교육 자료를 얻는 것이 좋습니다. MongoDB는 MongoDB University에서 자신의 제품과 최상의 사용법에 대해 더 많은 것을 배우기 위해 취할 수있는 2 가지 무료 강좌를 제공합니다. OrientDB는 교육을 제공하지만 무료는 아닙니다. 직접 연락하여 사전 판매 교육을받는 것이 가장 좋을 수도 있습니다 (DB 라이센스를 얻으려는 경우) 일반적으로 사전 판매 컨설턴트와 연락하여 제품 평가에 도움을줍니다 .

2

MongoDB는 객체 ID가 외래 키와 같은 RDBMS와 유사합니다. 이는 런타임에 비용이 많이 드는 "JOIN"을 의미합니다. 대신 OrientDB에는 한 번만 생성되고 런타임 비용이 매우 낮은 직접 링크가 있습니다.