Ogólnie rzecz biorąc, jeśli nie musisz zmniejszać plików danych, nie powinieneś ich w ogóle zmniejszać. Dzieje się tak, ponieważ "rozwijanie" plików danych na dysku jest dość kosztowną operacją, a im więcej miejsca, które MongoDB może przydzielić w plikach danych, tym mniej fragmentacji będziesz mieć.
Dlatego powinieneś spróbować zapewnić jak najwięcej miejsca na dysku dla bazy danych.
Jednak jeśli musisz zmniejszyć bazę danych, powinieneś pamiętać o dwóch rzeczach.
-
MongoDB powiększa swoje pliki danych przez podwojenie, więc pliki danych mogą mieć 64 MB, potem 128 MB itd. do 2 GB (wtedy przestaje podwajać pliki do 2 GB).
-
Podobnie jak w przypadku większości baz danych ... operacje todo, takie jak zmniejszanie, musisz zaplanować osobne zadanie, aby to zrobić, w MongoDB nie ma „automatycznego zmniejszania”. W rzeczywistości z głównych baz danych noSQL (nie znoszę tej nazwy) tylko Riak automatycznie się skurczy. Musisz więc utworzyć zadanie za pomocą harmonogramu systemu operacyjnego, aby uruchomić kurczenie. Możesz użyć skryptu bash lub zlecić uruchomienie skryptu php itp.
Serverside JavaScript
Możesz użyć JavaScript po stronie serwera, aby zmniejszyć i uruchomić ten JS przez powłokę mongo w regularnych odstępach czasu za pomocą zadania (takiego jak cron lub usługa planowania Windows) ...
Zakładając kolekcję o nazwie foo zapisałbyś poniższy javascript w pliku o nazwie bar.js i uruchom ...
$ mongo foo bar.js
Plik javascript wyglądałby mniej więcej tak...
// 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));
To uruchomi i zwróci coś takiego jak ...
MongoDB shell version: 1.6.4
connecting to: foo
Storage Size: 51351
TotalSize: 79152
-----------------------
Running db.repairDatabase()
-----------------------
Storage Size: 40960
TotalSize: 65153
Uruchom to zgodnie z harmonogramem (w godzinach szczytu) i możesz już iść.
Ograniczone kolekcje
Istnieje jednak jeszcze jedna opcja, kolekcje ograniczone .
Zasadniczo możesz ograniczyć rozmiar (lub liczbę dokumentów w ) kolekcji, powiedzmy .. 20 GB, a gdy ten limit zostanie osiągnięty, MongoDB zacznie wyrzucać najstarsze rekordy i zastępować je nowszymi wpisami, gdy się pojawią.
To świetny sposób na przechowywanie dużej ilości danych, odrzucanie starszych danych w miarę upływu czasu i utrzymywanie takiej samej ilości używanego miejsca na dysku.