2013-08-27 1 views
0

MongoDB 스파 스 색인에 의심의 여지가 있습니다. "MongoDB 스파 스 색인 및 배열 : 색인이 너무 많은 문서

{ 
    "a": "a-val", 
    "b": "b-val", 
    "meta": { 
    "urls": [ "url1", "url2" ... ], 
    "field1": "value1", 
    ... 
    } 
} 

필드는"A "와"B "가 항상 제시하고 있지만 : 나는이 방법으로 하위 문서를 포함 할 수 약간의 문서와 모음 (게시물) (6K 가장 큰)가 meta.urls "는 존재하지 않을 수 있습니다!

지금, 나는 "meta.urls"값으로 하나의 문서를 삽입 한 후, 나는 나에게 "이상한"결과를 제공

db.post.ensureIndex({"a": 1, "b": 1, "meta.urls": 1}, {sparse: true}); 

후 통계를했다 : 인덱스가 97메가바이트에 관한 것입니다! 어떻게 가능합니까? "meta.urls"가 삽입 된 하나의 문서와 색인 크기는 97MB입니까?

그래서,이 방법 만 "meta.urls"인덱스를 만들려고 :

난 그냥 한 문서와 지금 "meta.urls_1"인덱스가
db.post.ensureIndex({"meta.urls": 1}, {sparse: true}); 

. 그러나 나는 또 다른 '이상한'결과가이

db.post.find({"meta.urls": {$exists: true}}).hint("meta.urls_1").explain({verbose: true}); 

같은 간단한 쿼리를 설명하는 경우 : 몽고 5 문서를 스캔 왜

"n" : 1, 
"nscannedObjects" : 5, 
"nscanned" : 5, 

, 인덱스에서뿐만 아니라 하나?

"meta.urls"에서 정확한 일치를 쿼리하면 단일 희소 색인이 올바르게 작동합니다. 당신이 사용할 수 있습니다

예 : db.post.find ({ "meta.urls": "URL1"}). 힌트 ("meta.old_slugs_1") // 1 문서 첫 번째 질문에 대한

답변

0

인덱스하는 키의 접두사를 검색하는 복합 인덱스 예를 들어, a 또는 ab 모두에서 검색 한 경우 첫 번째 색인이 사용됩니다. 따라서 sparsea이 null 인 문서에만 색인을 생성하지 못합니다.

두 번째 질문에 대한 답변이 없지만 MongoDB를 업데이트하고 다시 시도해야합니다. 이동 속도가 매우 빠르며 지난 몇 개월 동안 희소 색인이 개선되었습니다.