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

Automaticky komprimovat odstraněný prostor v mongodb?

Obecně platí, že pokud nepotřebujete zmenšovat své datové soubory, neměli byste je zmenšovat vůbec. Je to proto, že „pěstování“ vašich datových souborů na disku je poměrně nákladná operace a čím více místa může MongoDB alokovat v datových souborech, tím menší fragmentaci budete mít.

Měli byste se tedy pokusit poskytnout databázi co nejvíce místa na disku.

Nicméně pokud musíte databázi zmenšit, měli byste mít na paměti dvě věci.

  1. MongoDB zvětšuje své datové soubory zdvojnásobením, takže datové soubory mohou mít 64 MB, pak 128 MB atd. až na 2 GB (v tomto okamžiku přestane zdvojnásobovat soubory tokeep až na 2 GB.)

  2. Jako u většiny databází... operace úkolů, jako je zmenšování, budete muset naplánovat samostatnou úlohu, abyste tak učinili, v MongoDB neexistuje žádné "automatické smrštění". Ve skutečnosti z hlavních noSQL databází (nesnáším to jméno) pouze Riak se automaticky zmenšuje. Ke spuštění zmenšení tedy budete muset vytvořit úlohu pomocí plánovače vašeho OS. Můžete použít bash skript nebo nechat spustit php skript atd.

Javascript na straně serveru

Můžete použít Javascript na straně serveru k provedení zmenšení a spuštění tohoto JS přes mongo's shell na běžných základech prostřednictvím úlohy (jako je cron nebo služba plánování systému Windows) ...

Předpokládejme sbírku s názvem foo níže uvedený javascript byste uložili do souboru s názvem bar.js a spusťte ...

$ mongo foo bar.js

Soubor javascriptu by vypadal asi takto ...

// Get a the current collection size.
var storage = db.foo.storageSize();
var total = db.foo.totalSize();

print('Storage Size: ' + tojson(storage));

print('TotalSize: ' + tojson(total));

print('-----------------------');
print('Running db.repairDatabase()');
print('-----------------------');

// Run repair
db.repairDatabase()

// Get new collection sizes.
var storage_a = db.foo.storageSize();
var total_a = db.foo.totalSize();

print('Storage Size: ' + tojson(storage_a));
print('TotalSize: ' + tojson(total_a));

Toto se spustí a vrátí něco jako ...

MongoDB shell version: 1.6.4
connecting to: foo
Storage Size: 51351
TotalSize: 79152
-----------------------
Running db.repairDatabase()
-----------------------
Storage Size: 40960
TotalSize: 65153

Spusťte to podle plánu (bez špičky) a můžete vyrazit.

Omezené sbírky

Existuje však ještě jedna možnost, omezené sbírky .

V zásadě můžete omezit velikost (nebo počet dokumentů v ) sbírce na řekněme .. 20 GB a jakmile je tohoto limitu dosaženo, MongoDB začne vyhazovat nejstarší záznamy a nahrazovat je novějšími záznamy, jakmile přijdou.

Je to skvělý způsob, jak uchovat velké množství dat, starší data časem vyřadit a zachovat stejné množství využitého místa na disku.



  1. Přidání podřízeného dokumentu do existujícího mongodb dokumentu

  2. C# Mongodb kartézský součin více dokumentů pole objektů

  3. Vytvořte sbírku v MongoDB

  4. Nainstalujte mongodb na hostitele Azure devops pro testrun