MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Czy MongoDB ponownie wykorzystuje usunięte miejsce?

Aktualizacja (marzec 2015): W wersji 3.0 w MongoDB dostępnych jest wiele silników pamięci masowej. Ta odpowiedź dotyczy silnika przechowywania MMAP (nadal domyślnego w MongoDB 3.0), odpowiedź dla innych silników (na przykład WiredTiger) jest zupełnie inna i może być dostosowywana i regulowana. Dlatego jeśli używasz innego silnika, zapoznaj się z odpowiednią dokumentacją dla tego silnika pamięci masowej, aby określić, jakie są ustawienia domyślne i opcje ponownego wykorzystania przestrzeni.

Dzięki silnikowi przechowywania MMAP, gdy dokumenty są usuwane, pozostała przestrzeń jest umieszczana na bezpłatnej liście. Jednak, aby wykorzystać miejsce, trzeba później wstawić dokumenty o podobnym rozmiarze, a MongoDB będzie musiało znaleźć odpowiednią przestrzeń dla tego dokumentu w określonych ramach czasowych (po przekroczeniu limitu czasu, patrząc na listę, po prostu dołączy) w przeciwnym razie ponowne wykorzystanie przestrzeni nie będzie zdarzało się zbyt często. To usuwanie odbywa się w plikach danych, więc nie ma tu miejsca na odzyskiwanie miejsca na dysku - wszystko to odbywa się wewnętrznie w istniejących plikach danych.

Jeśli następnie wykonasz naprawę lub ponownie zsynchronizujesz plik pomocniczy od zera, pliki danych zostaną ponownie zapisane, a miejsce na dysku zostanie odzyskane (wszelkie dopełnienie w dokumentach również zostanie usunięte). Tutaj zobaczysz rzeczywiste odzyskiwanie przestrzeni na dysku. W przypadku jakichkolwiek innych działań (w tym kompaktowych) użycie na dysku nie ulegnie zmianie, a może nawet wzrosnąć.

W wersji 2.2+ możesz teraz użyć polecenia collMod i opcji usePowersOf2Sizes, aby zwiększyć prawdopodobieństwo ponownego wykorzystania usuniętej przestrzeni (pamiętaj, że jest to ustawienie domyślne w wersji 2.6+). Oznacza to, że początkowa alokacja miejsca dla dokumentu jest nieco mniej wydajna (na przykład 512 bajtów dla 400-bajtowego dokumentu), ale oznacza, że ​​po wstawieniu nowego dokumentu jest bardziej prawdopodobne, że będzie w stanie ponownie wykorzystać tę przestrzeń. Jeśli często usuwasz (lub powiększasz, a tym samym przenosisz) dokumenty, na dłuższą metę będzie to bardziej efektywne.

Dla każdego, kto jest zainteresowany, jedna z osób, które napisały dużo kodu pamięci masowej (Mathias Stearn) ma świetną prezentację na temat elementów wewnętrznych pamięci, którą można znaleźć tutaj




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Usuń osadzony dokument z zagnieżdżonej tablicy dokumentów

  2. Konwertuj ciąg na liczbę w projekcji MongoDB

  3. Wstaw Pandas Dataframe do mongodb za pomocą PyMongo

  4. Python i MongoDB:łączenie się z bazami danych NoSQL

  5. Dlaczego sterownik węzła MongoDB generujący pulę instancji powoduje zniszczenie błędów?