2012-02-20 3 views
3

MongoDB에 대한 문서 디자인, 특히 참조, 포함 및 링크와 관련하여 약간의 내용을 읽었습니다.MongoDB에 대한 올바른 문서 디자인

내가 저장하고 싶은 문서 종류에 가장 적합한 레이아웃이 무엇인지 확실하지 않습니다.

동적 양식 작성 응용 프로그램의 한 유형이라고 상상해보십시오. 각 양식은 정적 속성 집합 (이름, 설명 등), 동적으로 생성 된 필드 집합 (name = text, age = number 등) 및 제출 된 결과 집합을 갖습니다. 이 같은

뭔가 :

$obj = array(
    'name' => 'Test', 
    'description' => 'Hello', 
    'live' => false, 
    'meta' => array (
     'name' => 'text', 
     'age' => 'number', 
     'sex' => 'boolean', 
    ), 
    'records' => array(
     array('name' => 'Test', 'age' => 20, 'sex' => true), 
     ... 
     ... 
    ) 
); 

내 혼란이 주로 내가 컬렉션에서 레코드를 삽입할지 여부에서 오는, 또는 I는 각 양식에 대한 개별 컬렉션을 작성해야합니다. 나의 직관은 후자를하는 것이지만, 읽었던 MongoDB 서적에는 삽입 데이터가 괜찮다고 나와 있습니다.

양식에 대량으로 제출 된 데이터가있을 것으로 예상되는 경우 누군가를 도울 수 있습니까?

감사합니다.

편집 : 나는 또한 도움이 될 this question을 발견했다.

+0

이 질문은 프로그래머에 속합니다 .stackexchange.com –

+0

그건 대답은 "그것은 다릅니다"고 말했다. 특정 양식의 컨텍스트에서 레코드에 액세스하거나 쿼리해야하는 경우이를 포함시킵니다. 독립적으로 액세스/쿼리해야하는 경우 별도의 컬렉션을 만들 수 있습니다. –

+0

@BenLee : 특정 필드 유형에 대해 지형 공간 인덱싱이 필요한 경우 별도 컬렉션 방법이 더 유리합니까? 양식의 컨텍스트 외부에서 양식 제출이 요구되는 경우를 생각할 수는 없지만 단일 모음의 여러 양식에 대한 레코드를 혼합하면 디스크에 비 연속적인 데이터가 생성 될 것이라는 점에서 성능 측면에서 정확할 것입니다. 점점 더 많은 레코드가 제출 될 때 쿼리 성능이 저하됩니까? – Leigh

답변

3

모든 양식 정의를 하나의 컬렉션에 저장하고 양식을 다른 컬렉션에 저장합니다. 하나의 문서 (포함 된 문서 포함)는 현재 16MB 만 가능하다는 것을 알아야합니다.

별도의 컬렉션에 제출하는 것이 더 합리적입니다. 최대 각자의 양식 유형에 대해 다른 컬렉션을 원할지 여부 각 양식이 얼마나 비슷한 지, 그리고 얼마나 많은 유형을 얻을지에 따라 약간 다릅니다.

MongoDB가 각 문서를 별도로 저장하므로 MongoDB가 디스크에서 불연속적인 데이터를 생성하고 문서의 일부인 것에 신경 쓰지 않아도됩니다.

+0

사전 할당에 대해 뭔가 잘못 기억하고 db 수준이 아닌 수집 수준에 있다고 생각했습니다. 나는 지금 그것을 읽은 곳을 찾을 수 없다. 내 직감을 확인해 주셔서 감사합니다. 기록을 별도의 컬렉션으로 분리하는 것과 관련하여 올바른 길을 인도했습니다. 16MB 한도 **는 ** 내가 포함 할 경우 문제가 될 것입니다. 양식이 얼마나 유사하거나 다를 지에 대한 설명이 없으며, 동적이며 고객이 설계 할 때까지 각각 별도의 컬렉션이 필요합니다. 건배. – Leigh

0

또한 레코드를 양식 정의와 함께 저장하면 불필요한 수준의 계층이 만들어져 적절한 수준의 데이터를 읽는 동안 고통을 줄 수 있습니다.

관련 문제