2012-05-16 2 views
3

У меня есть 57M документов в моей коллекции mongodb, которая составляет 19G данных. Мои индексы занимают 10G. Это звучит нормально, или я могу делать что-то очень неправильно! Мой первичный ключ - 2G.Почему мои индексы mongodb настолько велики

{ 
     "ns" : "myDatabase.logs", 
     "count" : 56795183, 
     "size" : 19995518140, 
     "avgObjSize" : 352.0636272974065, 
     "storageSize" : 21217578928, 
     "numExtents" : 39, 
     "nindexes" : 4, 
     "lastExtentSize" : 2146426864, 
     "paddingFactor" : 1, 
     "flags" : 1, 
     "totalIndexSize" : 10753999088, 
     "indexSizes" : { 
      "_id_" : 2330814080, 
      "type_1_playerId_1" : 2999537296, 
      "type_1_time_-1" : 2344582464, 
      "type_1_tableId_1" : 3079065248 
     }, 
     "ok" : 1 
    } 
+0

Какая версия вы используете? Если старый, вы можете обновить его, чтобы использовать новый индекс, они меньше. BTW, если индекс на _id равен 2G, в зависимости от данных внутри ваших полей, но для индекса двух полей это выглядит нормально. – AlphaB

+0

@AurelienB, версия 2.0.3 – jdh

+0

Это недавняя. Кроме того, если база исходит из старой, она должна быть в порядке. – AlphaB

ответ

4

Размер индекса определяется количеством документов индексируется, а также размер ключа (составные ключи хранить больше информации и будет больше). В этом случае индекс _id, деленный на количество документов, составляет 40 байтов, что представляется относительно разумным.

Если вы запустите db.collection.getIndexes(), вы можете найти индексную версию. Если {v: 0}, индекс был создан до mongo 2.0, и в этом случае вы должны перейти на {v: 1}. Этот процесс документирован здесь: http://www.mongodb.org/display/DOCS/Index+Versions

Смежные вопросы