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

Wersjonowanie Mongoose:kiedy można go bezpiecznie wyłączyć?

Kluczowym celem wersji jest optymistyczne blokowanie.

Gdy ta opcja jest włączona, wartość wersji jest automatycznie zwiększana za każdym razem, gdy dokument jest aktualizowany.

Dzięki temu kod aplikacji może przetestować, czy dokonano zmian między pobraniem (na przykład wprowadzeniem klucza wersji 42) a wynikającą z niego aktualizacją (upewniając się, że wartość wersji nadal wynosi 42). Jeśli klucz wersji ma inną wartość (np. 43, ponieważ aktualizacja została dokonana w dokumencie), Twój kod aplikacji może obsłużyć współbieżną modyfikację.

Ta sama koncepcja jest często używana w relacyjnych bazach danych zamiast pesymistycznego blokowania, które może przynieść straszną wydajność. Wszystkie przyzwoite ORM-y zapewniają taką funkcję. Na przykład jest to ładnie opisane w dokumentacji ObjectDB . Jest to obiektowa baza danych zaimplementowana w Javie, ale obowiązuje ta sama koncepcja.

post na blogu połączone w komentarzu Behlüla pokazują optymistyczną użyteczność blokowania na konkretnym przykładzie, ale tylko w przypadku zmian w tablicach, patrz poniżej.

Z drugiej strony, tutaj jest prosty przypadek, w którym jest bezużyteczny:profil użytkownika, który może być edytowany przez właściciela. Tutaj możesz pozbyć się optymistycznego blokowania i założyć, że ostatnia edycja zawsze wygrywa.

Tak więc tylko Ty wiesz, czy Twoja aplikacja wymaga optymistycznego blokowania, czy nie. Użyj przypadku po przypadku użycia.

Sytuacja Mongoose jest nieco wyjątkowa.

Blokowanie optymistyczne jest włączone tylko dla tablic, ponieważ format pamięci wewnętrznej używa indeksu pozycyjnego. Jest to problem opisany w poście na blogu link w komentarzu do pytania. Znalazłem wyjaśnienie podane w mongoose-orm lista mailingowa całkiem przejrzysta:jeśli potrzebujesz optymistycznego blokowania innych pól, musisz sam sobie z tym poradzić.

Oto przegląd pokazuje, jak zaimplementować strategię ponawiania dla add operacja. Ponownie, sposób, w jaki chcesz sobie z tym poradzić, zależy od Twoich przypadków użycia, ale powinno wystarczyć, aby zacząć.

Mam nadzieję, że to wyjaśnia sprawę.

Pozdrawiam




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Złożoność czasowa $addToset vs $push, gdy element nie istnieje w tablicy

  2. MongoDB Ruby Driver 2.5.x Problemy z rozróżnianiem wielkości liter w nazwach hostów w zestawach replik

  3. MongoDB — kolekcja nie ma unikalnego indeksu na _id

  4. Czy MongoDB _id (ObjectId) jest generowany w porządku rosnącym?

  5. Parametr projekcji MongoDB nie działa w findOne()