2014-11-15 4 views
2

Я использую Mongo GridFS, и у меня есть довольно большая база данных Mongo, в настоящее время dataSize находится на уровне 89 ГБ, когда я использую команду db.stats().Непоследовательность базы данных Mongo

Когда я создаю дамп mongo, размер каталога составляет 86 ГБ в файловой системе, а когда я восстанавливаю базу данных на другой машине и запускаю db.stats(), теперь я получаю 122 ГБ.

Кто-нибудь знает, в чем причина этого роста в 33 ГБ в dataSize после сброса/восстановления?

Редактировать Вот статистику из исходной базы данных

MongoDB shell version: 2.4.5 
connecting to: imgdb 
rs0:PRIMARY> db.stats(); 
{ 
     "db" : "imgdb", 
     "collections" : 4, 
     "objects" : 2549884, 
     "avgObjSize" : 37802.88397276111, 
     "dataSize" : 96392968996, 
     "storageSize" : 363433842080, 
     "numExtents" : 207, 
     "indexes" : 4, 
     "indexSize" : 307245904, 
     "fileSize" : 366974337024, 
     "nsSizeMB" : 16, 
     "dataFileVersion" : { 
       "major" : 4, 
       "minor" : 5 
     }, 
     "ok" : 1 
} 

А вот статистика из восстановленной базы данных

MongoDB shell version: 2.6.4 
connecting to: imgdb 
dbdb.stats(); 
{ 
     "db" : "imgdb", 
     "collections" : 4, 
     "objects" : 2549924, 
     "avgObjSize" : 51781.40103312883, 
     "dataSize" : 132038637248, 
     "storageSize" : 132281756768, 
     "numExtents" : 98, 
     "indexes" : 4, 
     "indexSize" : 199976784, 
     "fileSize" : 135159349248, 
     "nsSizeMB" : 16, 
     "dataFileVersion" : { 
       "major" : 4, 
       "minor" : 5 
     }, 
     "extentFreeList" : { 
       "num" : 0, 
       "totalSize" : 0 
     }, 
     "ok" : 1 
} 

Вот некоторые мысли о возможных причинах:

  1. Почему-то у меня еще 40 bjects в восстановленной версии!
  2. Различные версии mongo, может ли это быть причиной изменения алгоритмов индексирования?
  3. Начальная база данных находилась в репликации
  4. Первоначальная база данных была на 320 ГБ, но я вошел и сжал все изображения и уменьшил ее до 75 ГБ в то время назад. Вот почему размер хранилища в исходной базе данных существенно выше
+1

А что произойдет, если вы сваливать эту базу данных 122GB? Дает ли вам еще один свалку на 86 ГБ? Включение других чисел из 'db.stats()', вероятно, поможет людям объяснить числа. Некоторые чтения на ['dbStats'] (http://docs.mongodb.org/manual/reference/command/dbStats/#dbcmd.dbStats) и [дополняющий фактор] (http://docs.mongodb.org/manual/reference/glossary/# term-padding-factor). Размер базы данных никогда не будет размером с данными, содержащимися в нем из-за индексов, бухгалтерии, пустого пространства для роста, ... –

+0

Я сбрасываю 122 ГБ дБ, когда мы говорим, я скоро получу эту информацию –

+0

это займет всего пару секунд, верно? Я помню, когда у ГБ было много, теперь мой телефон носит несколько из них в моем кармане. Посмотрите на другие числа из 'db.stats()' тоже и коэффициент заполнения; мои навыки DBA MongoDB не так уж велики, но я подозреваю, что эти две вещи прояснят много путаницы. –

ответ

3

MongoDB 2.6 по умолчанию использует Powers of Two Record Allocation.

Перед загрузкой данных, вы можете попробовать либо изменить свой mongod newCollectionsUsePowerOf2Sizes или collMod коллекции:

db.runCommand({ collMod: "myCollection", usePowerOf2Sizes: false }) 
+1

Это относится и к GridFS? Плюс, мне больше 1/3 кажется мне немного. –

+1

Да, применяется к каждой коллекции. – helmy

+0

Хорошая точка зрения – Disposer

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