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

Dlaczego MongoDB nie używa fsync()?

Powodem jest wydajność. Bez konieczności zapisywania na dysku przy każdej zmianie, MongoDB może szybciej obsługiwać aktualizacje.

MongoDB informuje, kiedy aktualizacje zostały dostarczone na serwer, a nie wtedy, gdy aktualizacje zostały napisane , jak można przeczytać w dokumentacji Weryfikacja propagacji zapisów z getLastError :

To jest sprzeczne z ACID , a dokładniej w stosunku do D, co oznacza trwałość :

Właściwości ACID dotyczą głównie tradycyjnych systemów RDBMS. Systemy NoSQL, w tym MongoDB, rezygnują z jednej lub więcej właściwości ACID w celu uzyskania lepszej skalowalności. W przypadku MongoDB poświęcono trwałość dla lepszej wydajności podczas obsługi dużej ilości aktualizacji.

MongoDB i ACID

Większość właściwości ACID to gwarancje na poziomie transakcji . Transakcja to zazwyczaj grupa zapytań, które należy traktować jako pojedynczą jednostkę. MongoDB nie ma pojęcia o transakcjach, ponownie z z przyczyn wydajności . Dlatego większość właściwości ACID nie dotyczy MongoDB.

A — Atomicity stwierdza, że ​​transakcja powinna się powieść lub zakończyć się niepowodzeniem. Nie wolno częściowo odnieść sukcesu; jeśli część transakcji nie powiedzie się, cała transakcja powinna zostać wycofana. MongoDB obsługuje operacje atomowe na poziomie dokumentu, ale nie na poziomie „transakcji”.

C — Spójność częściowo odnosi się do atomowości, ale obejmuje również integralność referencyjną . Relacyjna baza danych jest odpowiedzialna za upewnienie się, że wszystkie odwołania do kluczy obcych są prawidłowe. MongoDB nie ma pojęcia o kluczach obcych, więc ta właściwość ACID nie ma zastosowania.

Ja — Izolacja stanowi, że dwie równoczesne transakcje nie mogą kolidować ze sobą; jeśli dwie transakcje próbują zmodyfikować te same dane, druga transakcja musi poczekać na zakończenie pierwszej. Aby to osiągnąć, baza danych zablokuje dane. MongoDB nie ma koncepcji blokowania, więc nie obsługuje izolacji dla wielu operacje. Pojedyncze operacje są izolowane.

D — Trwałość opisano powyżej. MongoDB nie obsługuje (jeszcze) prawdziwej trwałości, jeśli chodzi o trwałość ACID-ic.

Teraz możesz pomyśleć, że MongoDB jest bezużyteczny w porównaniu z systemami RDBMS, ponieważ brakuje w nim transakcji i większości gwarancji ACID. Jednak jednym z powodów istnienia transakcji jest to, że relacyjne bazy danych muszą traktować określone dane jako pojedynczą jednostkę , ale te dane zostały znormalizowane do wielu tabel .

MongoDB umożliwia przechowywanie danych jako jednej jednostki . W większości przypadków eliminuje to potrzebę kluczy obcych i integralności referencyjnej. Nie potrzebujesz również transakcji z wieloma zapytaniami, ponieważ nie potrzebujesz wielu tabel do aktualizacji jednej encji. W większości przypadków wystarczy zaktualizować pojedynczy dokument, a te operacje są niepodzielne w MongoDB.

Według pierwszy komentarz na tej stronie , db.eval() zapewnia izolację dla wielu operacji. Jednak zgodnie z dokumentacja zazwyczaj chcesz uniknąć używania db.eval() .



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB allowDiskUse nie działa..

  2. mniam instalacja mongodb 3.2 kończy się niepowodzeniem

  3. Zapytanie MongoDB dla wszystkich dokumentów z unikalnym polem

  4. Mongodb aktualizuje wszystkie dokumenty o unikalny identyfikator

  5. Czy są jakieś korzyści z używania niestandardowego identyfikatora _id dla dokumentów w MongoDB?