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

Multikolekcje, wielodokumentowe „transakcje” w MongoDB

Jako ogólną odpowiedź, zatwierdzenia wielodokumentowe w MongoDB mogą być wykonywane jako zatwierdzenia dwufazowe, które zostały dość obszernie udokumentowane w podręczniku (patrz:http://docs.mongodb.org/manual/tutorial/perform-two-phase- zobowiązania/).

Schemat sugerowany w instrukcji jest krótko następujący:

  • Skonfiguruj oddzielne transactions kolekcja, która zawiera dokument docelowy , dokument źródłowy , wartość i stan (transakcji)
  • Utwórz nowy obiekt transakcji za pomocą initial jako state
  • Rozpocznij dokonywanie transakcji i zaktualizuj state na pending
  • Zastosuj transakcje do obu dokumentów (cel, źródło)
  • Zaktualizuj stan transakcji do committed
  • Użyj find, aby określić, czy dokumenty odzwierciedlają stan transakcji, jeśli OK, zaktualizuj stan transakcji do done

Ponadto:

  • Musisz ręcznie obsługiwać scenariusze awarii (coś się nie stało, jak opisano poniżej)
  • Musisz ręcznie zaimplementować wycofanie, po prostu wprowadzając nazwę state wartość canceling

Kilka konkretnych uwag dotyczących Twojej implementacji:

  • Odradzałbym dodawanie pól takich jak lock_status , data_old , data_new na dokumenty źródłowe/docelowe. Powinny to być właściwości transakcji, a nie same dokumenty.
  • Aby uogólnić koncepcję dokumentów docelowych/źródłowych, myślę, że możesz użyć DBref s:http://www.mongodb.org/display/DOCS/Database+References
  • Nie podoba mi się pomysł usuwania dokumentów transakcyjnych po ich zakończeniu. Ustawienie stanu na done wydaje się lepszym pomysłem, ponieważ pozwala to później debugować i dowiedzieć się, jakie transakcje zostały wykonane. Jestem prawie pewien, że nie zabraknie Ci miejsca na dysku (a do tego też istnieją rozwiązania).
  • Jak w swoim modelu gwarantujesz, że wszystko zostało zmienione zgodnie z oczekiwaniami? Czy jakoś sprawdzasz zmiany?


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB jako usługa kolejkowa?

  2. Jak zacząć korzystać z ClusterControl

  3. php mongodb wyszukiwanie pełnotekstowe i sortowanie

  4. Jak zainstalować MongoDB 4.2 na systemach RedHat/CentOS 7?

  5. MongoError:parametr filtra musi być obiektem