Transakcje MongoDB

Transakcje MongoDB

MongoDB obsługuje transakcje w celu połączenia i izolowania różnych twierdzeń do przetwarzania w jednej operacji. Operacje transakcyjne są pogrupowane i przetwarzane w środowisku, które różni się od innych zapytań, a nie wykonywane jeden po drugim, ponieważ są dostarczane na serwerze. Właściwości transakcji pomagają kolekcjom MongoDB w utrzymaniu zgodności kwasowej. Spójność bazy danych jest zachowywana, a trwałość jest uzyskiwana, gdy modyfikacja transakcji nie jest zapisywana, dopóki nie zostaną popełnione.

Krok 1: Tworzenie przykładowych danych w MongoDB dla transakcji

Aby przeprowadzić transakcje w MongoDB, potrzebujemy kolekcji z dokumentami. Tutaj ustanawiamy kolekcję MongoDB „Publicbank” i dodajemy do niej trzy dokumenty za pomocą metody InsertMany. Struktura zapytań wkładania dokumentu jest następująca:

db.Publicbank.wstrząs
Person_name: „Sam”,
Person_city: „Los Angeles”,
Conccum_number: „132309423”,
Kwota: 150000.400,
Person_name: „Emily”,
Person_city: „Kalifornia”,
Conccount_number: „752889411”,
Kwota: 370000.400,
Person_name: „Maddy”,
Person_city: „Houston”,
Conccount_number: „34305909”,
Kwota: 560000.400
])

Dane wyjściowe jest wyświetlane na poniższym obrazie, co wskazuje, że dokumenty są z powodzeniem dodawane do kolekcji „PublicBank”. Teraz pokazujemy, jak rozpocząć i ukończyć transakcje przy użyciu tych przykładowych danych „publicbank”.

Ponadto, tworzymy indeks jako „ConcT_Number: 1” każdego dokumentu w kolekcji „PublicBank” za pomocą metody createIndex (), aby sprawdzić, czy wartość pola nazwy każdego dokumentu jest inna. Jest to bardzo pomocne w potwierdzeniu wymagań spójności podczas przetwarzania transakcji.

db.Publicbank.createIndex ("concT_Number": 1, "unikalne": true)

Krok 2: Utwórz transakcję określonej kolekcji próbek MongoDB

W tej sekcji rozpoczynamy transakcję od deklarowania zmiennej „sesji”. Ta zmienna „sesji” przechowuje wszystkie obiekty sesji używane do naszej transakcji. Zapytanie znajduje się w następujący sposób, w którym definiujemy „DB.getMongo ().Startsession () ”Oświadczenie po ogłoszeniu zmiennej„ sesji ”. Metoda getMongo () służy do sprawdzenia, czy połączenie jest prawidłowo ustanowione. Metoda Startession () jest wywoływana w celu rozpoczęcia sesji dla operacji transakcyjnych, ponieważ sesja musi być nadal inicjowana w celu wykonania serii operacji razem jako transakcja.

session = db.getMongo ().Starascession ()

Kiedy uruchamiamy zapytanie sesji w powłoce, generuje sesję „id”, jak pokazano na poniższym obrazku:

Teraz ustawiamy parametr: metoda starttransaction () ze zmienną „sesji” dla operacji odczytu i zapisu w naszej transakcji MongoDB. Strona startowa jest najpierw dostarczona z parametrem „ReadConcern”. Następnie ustawiamy opcję ReadConcern z „poziomem” „Snapshot”, która pobiera dane z migawki większości zaangażowanych danych. „Większość” jest ustawiona na opcję „W” parametru „WriteConcern”.

sesja.startTransaction (
„ReadConcern”: „poziom”: „migawka”,
„WriteConcern”: „W”: „większość”

)

Należy zauważyć, że zapytanie StartTransaction nie zwraca niczego jako wyjścia, ponieważ jest wykonywane pomyślnie. Zwraca dane wyjściowe, jeśli coś poszło nie tak z tym zapytaniem lub podczas rozpoczęcia sesji. Po wykonaniu najnowszego zapytania jesteśmy w aktywnej transakcji i możemy rozpocząć wykonywanie instrukcji, które są częścią transakcji.

Krok 3: Praca w sesji transakcji w MongoDB

Zamiast uzyskać informacje bezpośrednio z obiektu bazy danych „DB”, deklarujemy inną zmienną, która odwołuje się do obiektu sesji. Zmienna jest zdefiniowana przed pracą w aktywnej transakcji, która reprezentuje kolekcję, z którą chcemy pracować w kontekście sesji.

var bank = sesja.getDatabase („test”).GetCollection („PublicBank”)

Tutaj tworzymy zmienną „Bank”, określając modyfikator „var”. Następnie odwołujemy się do obiektu „sesji”, który wywołuje metodę getDatabase () i metodę getCollection (). Metoda getDataBase () przyjmuje nazwę bazy danych „test” i tworzy bazę danych „test”. Zapewniamy kolekcję „publicbank” w metodzie getCollection ().

Włóż pojedynczy dokument do sesji transakcji

Teraz, wewnątrz sesji aktywnej, wykonujemy operację transakcji wstawienia innego dokumentu do kolekcji „PublicBank” za pomocą metody InserTone (). Metoda InserTone () jest wywoływana za pomocą „banku” i wprowadza dokument z następującymi dziedzinami:

Bank.wstawić (
„Person_name”: „James”,
„Person_city”: „Nowy Jork”,
„Conccount_number”: „99931001”,
„Kwota”: 450000.900
)

MongoDB zwraca komunikat sukcesu, który wskazuje, że operacja transakcji jest wykonywana. Ponieważ sesja transakcji jest nadal aktywna, dokument, który został wcześniej wstawiony. Mogą istnieć przypadki, w których albo transakcja obejmuje nowy rekord lub wyniki w wycofaniu się do początkowego warunku sesji transakcyjnej.

Zaktualizuj dokument w sesji transakcyjnej

Ponownie wykonujemy inną transakcję w tej samej kolekcji „publicbank”, która jest określona za pomocą dwóch poleceń. Najpierw przyjmujemy odniesienie do sesji, a następnie podajemy nazwę kolekcji metodzie getDatabase (). Następnie używamy słowa kluczowego „transakcji” w kolekcji. Zaktualizuj wartość danego pola za pomocą metody updateOne (). Tutaj metoda updateOne () jest przypisana dwóm wyrażeniom - „ConcT_Number:” 132309423 ”i„ $ set: kwota: 6700000.000 ”. Najpierw znajdujemy „ConcT_Number”, która jest równa wartości „132309423”. Po uzyskaniu tej wartości ustawiamy pole dokumentu „kwota” z nową wartością „670000.000 ”za pomocą operatora $ set.

sesja.getDatabase („publicbank”).transakcje.updateOne (concT_Number: „132309423”, $ set: kwota: 6700000.000)

Teraz, gdy zapytanie jest wykonywane, generuje uznane wyniki z prawdziwą wartością. Tutaj MatchCount: 1 stwierdza, że ​​jeden dokument jest dopasowany, co spełnia warunek. „ModifiedCount: 1” wskazuje, że jeden dokument jest aktualizowany o warunkach, który jest do niego stosowany. Nadal nie popełniliśmy transakcji, więc kolekcja poza sesją transakcyjną nie jest modyfikowana.

Zatrzymaj sesję transakcyjną metodą Commiptransaction ()

Zobowiązanie w transakcji bazy danych odnosi się do stałego przechowywania danych po serii wstępnych aktualizacji. Używamy następującego polecenia w MongoDB, aby popełnić aktywną sesję transakcji:

sesja.commitransaction ()

Teraz wszystkie zmiany są przechowywane w kolekcji „PublicBank” poprzez wykonanie polecenia zatwierdzenia MongoDB. Widzieliśmy zmiany, które wprowadziliśmy w transakcji. Poniżej znajduje się dokument, który wprowadzamy do kolekcji „PublicBank”, gdy transakcja jest aktywna:

db.Publicbank.Znajdź (person_name: James ”)

Następnie mamy transakcję aktualizacji dokumentu o nowej wartości pola „kwota”. Wartość jest również aktualizowana, gdy polecenie zatwierdzenia jest stosowane do transakcji.

db.Publicbank.Znajdź (concT_Number: „132309423”)

Przerwać sesję transakcyjną metodą abortTransaction ()

Czasami nie chcemy operacji zatwierdzenia przez transakcję. W tym celu przerywamy transakcję, która nie wpływa na wartość transakcji. Transakcja jest przywrócona do poprzedniego stanu. Należy wykonać następujące instrukcje podczas przerwania transakcji:

sesja.abortTransaction ()

Sesja transakcji kończy się tutaj. Wszelkie istotne zmiany są odrzucane. Baza danych odwraca zmiany i wraca do stanu początkowego, a nie tworzenie nowego spójnego stanu.

Wniosek

W tym przewodniku opisaliśmy koncepcyjnie transakcję MongoDB. Nauczyliśmy się rozpocząć transakcje w MongoDB. Włożyliśmy również nowy dokument i zaktualizowaliśmy wartość podanego dokumentu w transakcji. Następnie instrukcje zatwierdzenia są używane do ukończenia transakcji. Ponadto, sposób cofania zmian wprowadzanych do transakcji, jest również dokonywana poprzez stwierdzenie Abort.