2013-05-24 2 views
0

안에 난으로 관계형 데이타베이스에 있던 동적 데이터 저장을 만들고있어 form_data와 field_data를 MongoDB로 옮길 계획입니다. 이제는 모든 form_data에 대해 하나의 콜렉션을 사용하여 MongoDB 콜렉션을 설계하고 그 안에 map_data를 이동시키고 key는 field_id이고 value는이 field_data의 값입니다. 각 양식 레코드에 대한 컬렉션 및 form_data에 직접 데이터를 저장하지 않고이 경우 모든 데이터가 일치합니다.동적 데이터 MongoDB를

답변

1

MongoDB와 같은 문서 지향 데이터베이스에서는 여러 문서를 연결하기 위해 데이터베이스에서 JOIN 연산을 지원하지 않으므로 MongoDB와 같은 문서 지향 데이터베이스에서 참조에 대한 집계를 항상 선호해야합니다.

두 엔티티 사이에 "A가 많은 B"관계를 두 개의 테이블 A와 B로 모델링해서는 안되며, 각 A에 B 오브젝트의 임베디드 배열이있는 A 모음 하나를 모델링해야합니다.

그러나 MongoDB와 관련하여 MongoDB는 성장하는 개체를 좋아하지 않습니다. 개체가 수명 기간 동안 점점 더 많은 데이터를 축적하면 개체가 커집니다. 즉, MongoDB에 할당 된 하드 드라이브 공간이 계속해서 다시 실행되므로 공간 재 할당이 필요합니다. 이렇게하면 성능이 향상되고 데이터베이스가 조각납니다. 또한 MongoDB는 문서 작성시 인위적인 크기 제한이 있으며 주로 개발자가 개체를 디자인하지 못하도록 막습니다.

그 때문에은 :

데이터 생성시 존재 직접 삽입.

생성 후 점점 더 많은 데이터가 추가되면 다른 컬렉션에 넣으십시오.

양식에 X 필드가있는 경우 필드 수는 평생 동안 많이 변경되지 않을 가능성이 큽니다. 따라서 필드와 설명을 폼 객체에 직접 포함시켜야합니다.

그러나 이러한 양식에 입력 된 답변 수는 시간이 지남에 따라 커질 것이며 이는 별도의 컬렉션에서 개별 개체로 처리되어야 함을 의미합니다.

두 개의 콜렉션, formsform_data을 사용하는 것이 좋습니다.

forms의 각 문서에는 정적 필드 속성이있는 fields의 하위 개체가 포함되어 있습니다. form_data

각 문서는 대응하는 형태의 _id와 필드를 가지며 formsfields 서브 - 객체와 동일한 키를 사용하여 항목을 그 형태로 만든 사용자 저장 field_data의 부 객체를 포함합니다.

공용 웹 사이트에 최신 통계를 게시하려는 경우처럼 사용 사례에 집계 된 데이터에 자주 액세스해야하는 경우이 정보를 forms 필드에 저장하여 많은 form_data 문서에 대해 값 비싼 집계 쿼리. 일반적으로 MongoDB는 데이터의 의미보다는 성능 요구 사항에 따라 데이터베이스 스키마의 방향을 지정할 것을 권장합니다.

귀하의 말에 대해서는 "이 경우 모든 데이터는 일관성이 있습니다" : MongoDB는 참조 무결성을 시행하지 않습니다. 응용 프로그램이 문서를 삭제하거나 변경하면 응용 프로그램에서 다른 문서의 오래된 참조를 수정해야합니다.

+0

필자는 사실 모양과 필드에 JPA를 사용하여 캐싱의 이점을 얻으 려하고 자주 변경되지 않으므로 데이터에 대해서는 데이터가 커지면서 확장성에 MongoDB를 사용할 것입니다. 그리고 여기 내 질문입니다, 그것은 모든 form_data 하나 "컬렉션"을 만드는 것이 좋습니다 또는 각 양식 유형 "컬렉션"을 만드는 것이 좋습니다? –

+0

한 번에 둘 이상의 컬렉션을 쿼리 할 수 ​​없습니다. 따라서 각 양식이 완전히 분리 된 응용 프로그램이라는 것을 절대적으로 확신하지 못하면 교차 참조를 수행하지 않으므로 모든 양식을 하나의 모음으로 모아야합니다. – Philipp

+0

내 응용 프로그램은 REST 인터페이스를 사용하여 다른 양식을 동적으로 처리하므로 나머지 URL과의 관계를 처리하므로 양식 데이터 엔터티간에 MongoDB 수준의 관계가 필요하지 않지만 모든 양식 유형에 대한 액세스를 동시에 제공해야합니다. –