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

Czy usunięcie pliku dziennika mongodb jest bezpieczne?

TL; DR:Masz dwie opcje. Użyj --smallfiles opcja uruchamiania podczas uruchamiania MongoDB w celu ograniczenia rozmiaru plików dziennika do 128 MB lub wyłączenia dziennika za pomocą --nojournal opcja. Używanie --nojournal w produkcji jest zwykle złym pomysłem i często ma sens korzystanie z różnych zagadnień związanych z zapisem również w fazie rozwoju, aby nie mieć innego kodu w dev i prod.

Długa odpowiedź :Nie, usunięcie pliku dziennika nie jest bezpieczne. Idea dziennikarstwa jest następująca:

Nadchodzi zapis. Teraz, aby ten zapis był trwały (a baza danych trwała), zapis musi jakoś trafić na dysk.

Niestety, zapisy na dysku trwają eony w porównaniu z zapisami do pamięci RAM, więc baza danych stoi przed dylematem:nie zapisywanie na dysku jest ryzykowne, ponieważ nieoczekiwane zamknięcie mogłoby spowodować utratę danych. Jednak zapisywanie na dysku dla każdej pojedynczej operacji zapisu zmniejszy wydajność bazy danych tak bardzo, że stanie się ona bezużyteczna w celach praktycznych.

Teraz zamiast zapisywać do samych plików danych i zamiast robić to dla każdego żądania, baza danych po prostu dołączy do pliku dziennika, w którym przechowuje wszystkie operacje, które nie zostały jeszcze zatwierdzone w rzeczywistych plikach danych. Jest to o wiele szybsze, ponieważ plik jest już „gorący”, ponieważ jest odczytywany i zapisywany przez cały czas, i jest to tylko jeden plik, a nie kilka plików, i na koniec, ponieważ zapisuje wszystkie oczekujące operacje w partii co 100 ms domyślnie. Usunięcie tego pliku w środku czegoś sieje spustoszenie.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Samopodpisane połączenie SSL za pomocą PyMongo

  2. Jak zwiększyć wydajność operacji aktualizacji w Mongo?

  3. Jak wdrażać bazy danych typu open source

  4. Jaki jest właściwy wzorzec dla schematów zagnieżdżonych w Mongoose/MongoDB?

  5. NodeJS + MongoDB:Pobieranie danych z kolekcji za pomocą findOne ()