MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB използва ли повторно изтрито пространство?

Актуализация (март 2015 г.): От изданието 3.0 има множество механизми за съхранение, налични в MongoDB. Този отговор се отнася за механизма за съхранение на MMAP (все още по подразбиране в MongoDB 3.0), отговорът за други машини (например WiredTiger) е доста различен и може да бъде регулируем и регулируем. Следователно, ако използвате друг механизъм, моля, прочетете съответните документи за този механизъм за съхранение, за да определите какви са настройките и опциите по подразбиране за повторно използване на вашето пространство.

С механизма за съхранение MMAP, когато документите бъдат изтрити, оставеното място се поставя в списък със свободни места. Въпреки това, за да се използва пространството, ще трябва да има документи с подобен размер, вмъкнати по-късно и MongoDB ще трябва да намери подходящо място за този документ в рамките на определен период от време (след като изтече, гледайки списъка, той просто ще се добави) в противен случай повторното използване на пространството няма да се случва много често. Това изтриване се извършва във файловете с данни, така че тук не се извършва възстановяване на дисково пространство - всичко това се извършва вътрешно в рамките на съществуващите файлове с данни.

Ако впоследствие извършите поправка или повторно синхронизирате вторичен от нулата, файловете с данни се презаписват и пространството на диска ще бъде възстановено (всякакво подпълване на документи също се премахва). Тук ще видите действителното възстановяване на пространството на диска. За всякакви други действия (включени компактни) използването на диска няма да се промени и дори може да се увеличи.

С 2.2+ вече можете да използвате командата collMod и опцията usePowersOf2Sizes, за да направите повторното използване на изтрито пространство по-вероятно (имайте предвид, че това е по подразбиране в 2.6+). Това означава, че първоначалното разпределение на пространство за документ е малко по-малко ефективно (512 байта за 400 байтов документ например), но означава, че когато се вмъкне нов документ, е по-вероятно да може да се използва повторно това пространство. Ако изтривате (или увеличавате и следователно премествате) документи много, тогава това ще бъде по-ефективно в дългосрочен план.

За всеки, който се интересува, един от хората, които написаха много от кода за съхранение (Матиас Стърн) има страхотна презентация за вътрешните елементи за съхранение, която може да се намери тук




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB група по стойности в поле на масив

  2. Запитване в Mongodb за месец, ден, година... на дата и час

  3. $skip и $limit в рамката за агрегиране

  4. Интегриране на ClusterControl със SNMP - Доказателство за концепция:Част първа

  5. Преглед на MongoDB Atlas:Част първа