sql >> Databáze >  >> NoSQL >> MongoDB

Používá MongoDB znovu smazaný prostor?

Aktualizace (březen 2015): Od vydání 3.0 je v MongoDB k dispozici několik modulů úložiště. Tato odpověď platí pro úložiště MMAP (stále výchozí v MongoDB 3.0), odpověď pro ostatní motory (například WiredTiger) je zcela odlišná a může být laditelná a nastavitelná. Pokud tedy používáte jiný modul, přečtěte si prosím příslušné dokumenty pro daný modul úložiště a zjistěte, jaké jsou výchozí hodnoty a možnosti pro opětovné využití prostoru.

S úložným jádrem MMAP, když jsou dokumenty smazány, místo, které po nich zůstane, je umístěno do volného seznamu. Chcete-li však prostor využít, budete muset později vložit dokumenty podobné velikosti a MongoDB bude muset najít vhodné místo pro tento dokument v určitém časovém rámci (jakmile uplyne časový limit pro prohlížení seznamu, pouze se připojí) jinak k opětovnému využití prostoru nedojde příliš často. Toto mazání se provádí v rámci datových souborů, takže zde nedochází k žádné rekultivaci místa na disku – to vše se provádí interně v rámci existujících datových souborů.

Pokud následně provedete opravu nebo znovu synchronizujete sekundární od nuly, datové soubory budou přepsány a místo na disku bude uvolněno (odstraní se také veškeré výplně v dokumentech). Zde uvidíte skutečnou rekultivaci prostoru na disku. Pro žádné další akce (včetně kompaktu) se využití na disku nezmění a může se dokonce zvýšit.

Ve verzi 2.2+ můžete nyní použít příkaz collMod a možnost usePowersOf2Sizes, aby bylo opětovné použití smazaného prostoru pravděpodobnější (všimněte si, že toto je výchozí nastavení ve verzi 2.6+). To znamená, že počáteční přidělení prostoru pro dokument je o něco méně efektivní (512 bajtů pro 400 bajtový dokument například), ale znamená to, že když je vložen nový dokument, je pravděpodobnější, že bude možné tento prostor znovu použít. Pokud často odstraňujete (nebo zvětšujete a tedy přesouváte) dokumenty, bude to z dlouhodobého hlediska efektivnější.

Pro každého, koho to zajímá, jeden z lidí, kteří napsali velkou část kódu úložiště (Mathias Stearn), má skvělou prezentaci o vnitřních částech úložiště, kterou lze nalézt zde




  1. $strLenBytes vs $strLenCP v MongoDB:Jaký je rozdíl?

  2. Chyba duplicitního klíče MongoDB E11000

  3. MongoDB $toLower

  4. Jak nainstalovat rozšíření php-redis pomocí oficiálního přístupu k obrazu PHP Docker?