2013-09-18 6 views
0

У нас есть кластер MongoDB с использованием GridFS. Таблица fs.chunks gridfs окутана двумя репликасами. Использование дискового пространства очень велико. Для 90 ГБ данных требуется более 130 ГБ дискового пространства.Накладные расходы на хранение GridFS

Кажется, что таблице fs.chunks требуется пространство. Я обобщил поле «длина» fs.files, показывающее 90 ГБ пространства. Сумма поля «размер» обоих осколков составляет 130 ГБ. Это реальный размер данных полезной нагрузки, содержащихся в коллекции, не так ли?

Это значит, что накладные расходы 40ГБ? Это верно? Откуда он? это BSON-кодирование? Есть ли способ уменьшить накладные расходы?

mongos> db.fs.chunks.stats() 
{ 
    "sharded" : true, 
    "ns" : "ub_datastore_preview.fs.chunks", 
    "count" : 1012180, 
    "numExtents" : 106, 
    "size" : 140515231376, 
    "storageSize" : 144448592944, 
    "totalIndexSize" : 99869840, 
    "indexSizes" : { 
      "_id_" : 43103872, 
      "files_id_1_n_1" : 56765968 
    }, 
    "avgObjSize" : 138824.35078345748, 
    "nindexes" : 2, 
    "nchunks" : 2400, 
    "shards" : { 
      "ub_datastore_qa_group1" : { 
        "ns" : "ub_datastore_preview.fs.chunks", 
        "count" : 554087, 
        "size" : 69448405120, 
        "avgObjSize" : 125338.44887174758, 
        "storageSize" : 71364832800, 
        "numExtents" : 52, 
        "nindexes" : 2, 
        "lastExtentSize" : 2146426864, 
        "paddingFactor" : 1, 
        "systemFlags" : 1, 
        "userFlags" : 0, 
        "totalIndexSize" : 55269760, 
        "indexSizes" : { 
          "_id_" : 23808512, 
          "files_id_1_n_1" : 31461248 
        }, 
        "ok" : 1 
      }, 
      "ub_datastore_qa_group2" : { 
        "ns" : "ub_datastore_preview.fs.chunks", 
        "count" : 458093, 
        "size" : 71066826256, 
        "avgObjSize" : 155136.2414531547, 
        "storageSize" : 73083760144, 
        "numExtents" : 54, 
        "nindexes" : 2, 
        "lastExtentSize" : 2146426864, 
        "paddingFactor" : 1, 
        "systemFlags" : 1, 
        "userFlags" : 0, 
        "totalIndexSize" : 44600080, 
        "indexSizes" : { 
          "_id_" : 19295360, 
          "files_id_1_n_1" : 25304720 
        }, 
        "ok" : 1 
      } 
    }, 
    "ok" : 1 
} 

ответ

0

Проблема была «осиротевшими кусками» от GridFS. GridFS сначала записывает куски, а затем метаданные, если что-то пойдет не так, уже написанные куски остаются «потерянными сиротами» и их необходимо очистить вручную.

2

Это реальный размер данных полезной нагрузки, содержащихся в коллекции, не так ли?

Да.

Это значит, что накладные расходы 40ГБ? Это верно?

Kinda. Но это кажется необычайно большим.

Откуда он? это BSON-кодирование?

Нет, BSON-кодирование данных не имеет такой большой части служебной информации. Но иногда добавление метаданных.

В mongo основным источником для накладных расходов обычно являются метаданные, но если вы используете спецификацию ссылочных сеток - она ​​не должна быть такой большой.

Например, в нашей памяти мы имеем:

db.fs.files.aggregate([{$group: {_id: null, total: { $sum: "$length"}}}]) 
{ 
    "result" : [ 
     { 
      "_id" : null, 
      "total" : NumberLong("4631125908060") 
     } 
    ], 
    "ok" : 1 
} 

И

db.fs.chunks.stats() 
{ 
    "ns" : "grid_fs.fs.chunks", 
    "count" : 26538434, 
    "size" : NumberLong("4980751887148"), 
    "avgObjSize" : 187680.70064526037, 
    "storageSize" : NumberLong("4981961457440"), 
    "numExtents" : 2342, 
    "nindexes" : 2, 
    "lastExtentSize" : 2146426864, 
    "paddingFactor" : 1, 
    "systemFlags" : 1, 
    "userFlags" : 0, 
    "totalIndexSize" : 2405207504, 
    "indexSizes" : { 
     "_id_" : 1024109408, 
     "files_id_1_n_1" : 1381098096 
    }, 
    "ok" : 1 
} 

Так, около 300 гб накладных расходов на 4,8 Тб данных.

0

Вы сохранили 90 ГБ данных, но потребляли 130 ГБ дискового пространства.

Это означает, что накладные расходы составляют около 44%.

Как указано в этом blog post, накладные расходы на хранение в GridFS составляют примерно 45%, что в вашем случае практически одинаково.

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