2012-12-07 5 views
0

크기, 위치, 이름 등등과 같은 3 차원 객체의 데이터를 저장하는 2000 개의 행을 가진 MySQL 테이블 (Table1)이 있습니다.
두 번째 테이블 Table1에 나열된 3D 개체의 속성 목록을 포함합니다. 모든 객체는이 테이블에 여러 항목을 가질 수도 있고 없게 할 수도 있습니다. 이 특별한 경우에는 10.000 개의 항목이 있다고 가정 해 봅시다. 다음은 어려운 부분입니다. 거리를 제공하는 각 Table2 항목 사이에 조합이 있습니다. 엄청난 수의 조합에 대한 몽고 (mongodb) '레이아웃'

row1:   table2_entry1 table2_entry2 result 
row2:   table2_entry1 table2_entry3 result 
.... 
rowN:   table2_entry1 table2_entryN result 

rowN+1:  table2_entry2 table2_entry1 result 
rowN+2:  table2_entry2 table2_entry3 result 
.... 
rowN+N:  table2_entry2 table2_entryN result 
.... 
.... 
rowN+N+...+N: table2_entryN table2_entryN-1 result 

따라서 표 3은 10.000.000 항목이 있습니다 : 그래서 여기처럼 보이는 3 테이블 (표 3)가 있습니다. 나도 알다시피, 행렬을 사용하면 (entry1, entry2, same_result)와 (entry2, entry1, same_result) 쌍이 있으므로 반으로 잘라 버릴 것이다.

MongoDB의 문서 (예 ENTRY1 대해) 다음과 같을 것이다

{ 
"_id": ObjectID("..."), 
"location": "some_file_location", 
... 
"media_properties": { 
     {entry2: result,  
     entry3: result, 
     ... 
     entryN: result, 
} 
} 

따라서 "media_properties"는 표 2에 저장된 속성 10.000 각각 9.999 사전 쌍을 가질 것이다.
나는 이것이 내 엄청난 수의 조합을 저장하는 최선의 방법이라고 확신하지 못한다.

SQL 테이블과 같은 모든 조합을 저장하기 위해 별도의 모음을 사용해야합니까, 아니면 위의 예와 같이 미디어 문서에 사전을 포함해야합니까?

오버 헤드를 없애고 동일한 정보를 두 번 저장하지 않겠습니다.

entry1 - entry2 - result 
entry2 - entry3 - result 

대신 :

entry1 - entry2 - result 
entry2 - entry1 - result 
entry2 - entry3 - result 
entry3 - entry2 - result 

는 "지도"를 할 수있는 MongoDB를에 반 행렬이 경우에는 내가 좋아하는 뭔가를 할 수 문서?
저장하는 더 좋은 해결책이 있습니까?

어떤 아이디어라도 환영합니다!
미리 감사드립니다.

+0

어떤 종류의 쿼리를 실행해야합니까? entry1의 결과는 모두? entry1-entry2 결과를 찾으십니까? 특정 결과에 대한 항목 #s 찾기? – kristina

+0

어떤 항목이 주어지면 결과를 정렬해야합니다 (asc/desc). 실제로 결과는 두 개의 3d 객체 (entry1 - entry2) 사이의 거리입니다. 그리고 필요한 것은 주어진 3D 객체 (유사성 검색)의 최상의 일치를 얻는 것입니다. – CpS

답변

1

많은 문서를 하나의 문서에 보관하지 않는 것이 좋습니다. 정렬 할 수 없거나 거대한 jsons (필드로 구성되지 않은 경우)의 부분 정보를 가져올 수 없기 때문입니다. 또한 GridFS (16MB)를 사용하지 않고도 최대 문서 크기가 있습니다.
문서 당 하나의 "엔트리 - 엔트리 + 결과"를 유지하는 것은 공간 낭비처럼 보일 수 있지만 쿼리를 수행해야하는 경우에도 적절한 쿼리 성능을 얻을 수 있습니다. 요소가 아닌 결과 - 추가 색인은 그것을 손톱해야합니다. 또한 쓰기 성능 (문서 끝 부분에 결과를 추가하는 것보다 새로운 요소에 새 결과를 많이 추가하면 새 요소가 많이 생성됨)을 저 지르지 않아야합니다. 어떻게되었는지 들어 보겠습니다.

관련 문제