АКТУАЛИЗИРАНЕ: с compact
команда и WiredTiger изглежда, че допълнителното дисково пространство всъщност ще бъде освободено на операционната система.
АКТУАЛИЗИРАНЕ: от v1.9+ има compact
команда.
Тази команда ще извърши уплътняване "в линия". Все пак ще има нужда от допълнително място, но не толкова.
MongoDB компресира файловете чрез:
- копиране на файловете на ново място
- преглеждане на документите и повторното им подреждане/пренареждане
- замяна на оригиналните файлове с новите
Можете да направите това "компресиране", като изпълните mongod --repair
или като се свържете директно и стартирате db.repairDatabase()
.
И в двата случая имате нужда от място някъде, за да копирате файловете. Сега не знам защо нямате достатъчно място за извършване на компресиране, но имате някои опции, ако имате друг компютър с повече място.
- Експортирайте базата данни на друг компютър с инсталиран Mongo (с помощта на
mongoexport
) и след това можете да импортирате същата база данни (използвайкиmongoimport
). Това ще доведе до нова база данни, която е по-компресирана. Сега можете да спрете оригиналнияmongod
заменете с новите файлове на базата данни и сте готови. - Спрете текущия mongod и копирайте файловете на базата данни на по-голям компютър и стартирайте ремонта на този компютър. След това можете да преместите новите файлове на базата данни обратно на оригиналния компютър.
Понастоящем няма добър начин за „уплътняване на място“ с помощта на Mongo. А Mongo определено може да заеме много място.
Най-добрата стратегия в момента за уплътняване е да стартирате настройка Master-Slave. След това можете да уплътните Slave, да го оставите да навакса и да ги превключите. Знам, че все още е малко космат. Може би екипът на Mongo ще излезе с по-добро уплътняване на място, но не мисля, че е високо в списъка им. Понастоящем се предполага, че дисковото пространство е евтино (и обикновено е така).