MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Zwei-Phasen-Commit in MongoDB

Wenn die Anwendung oder Datenbank zwischen dem Anwenden der Transaktion auf A und dem Anwenden der Transaktion auf B plötzlich abstürzt, gibt es immer noch eine Transaktion mit state:"pending" in der globalen Transaktionssammlung. Ihr Wiederherstellungsskript, das Sie nach einem Absturz ausführen, sollte dies bemerken, die beiden Konten überprüfen und feststellen, dass in einem Konto eine ausstehende Transaktion vorhanden ist, aber nicht im anderen Konto. Es weiß jetzt alles, was es wissen muss, um die Transaktion entweder rückgängig zu machen oder zu versuchen, sie abzuschließen.

Ja, es ist nicht einfach, ein so intelligentes Wiederherstellungsskript zu schreiben. Aber Transaktionen in einem Datenbanksystem, das nicht für sie ausgelegt ist, sind immer schwierig. Manchmal können Sie das Erfordernis von Transaktionen in MongoDB umgehen, indem Sie Ihre Dokumente so gestalten, dass sich Felder, die zusammen aktualisiert werden müssen, immer im selben Dokument befinden, aber es gibt nicht immer eine vernünftige Möglichkeit, dies zu tun. Wenn Ihr Anwendungsfall unbedingt Transaktionen erfordert, schützen Sie Ihren Verstand und verwenden Sie eine relationale Datenbank.